feat: renderer

This commit is contained in:
2025-08-19 17:20:24 +02:00
parent 6db87db325
commit 210b31aef8
38 changed files with 727 additions and 299 deletions

88
renderer/renderer_test.go Normal file
View File

@@ -0,0 +1,88 @@
package renderer_test
import (
"strings"
"testing"
"git.max-richter.dev/max/marka/renderer"
"git.max-richter.dev/max/marka/testdata"
"github.com/google/go-cmp/cmp"
)
func TestRenderFile_RecipeSalad(t *testing.T) {
inputJSON := testdata.Read(t, "recipe_salad/output.json")
expectedMarkdown := testdata.Read(t, "recipe_salad/input.md")
gotMarkdown, err := renderer.RenderFile([]byte(inputJSON))
if err != nil {
t.Fatalf("RenderFile failed: %v", err)
}
if diff := cmp.Diff(string(expectedMarkdown), string(gotMarkdown)); diff != "" {
t.Errorf("Rendered markdown mismatch (-want +got):\n%s", diff)
}
}
func TestRenderFile_RecipeNoDescription(t *testing.T) {
inputJSON := testdata.Read(t, "recipe_no_description/output.json")
expectedMarkdown := testdata.Read(t, "recipe_no_description/input.md")
gotMarkdown, err := renderer.RenderFile([]byte(inputJSON))
if err != nil {
t.Fatalf("RenderFile failed: %v", err)
}
if diff := cmp.Diff(string(expectedMarkdown), string(gotMarkdown)); diff != "" {
t.Errorf("Rendered markdown mismatch (-want +got):\n%s", diff)
}
}
func TestRenderFile_MissingType(t *testing.T) {
rawJSON := []byte(`{"name": "Test"}`)
_, err := renderer.RenderFile(rawJSON)
if err == nil {
t.Fatal("expected error for missing @type, got nil")
}
if !strings.Contains(err.Error(), "JSON does not contain a valid '@type' property") {
t.Errorf("expected missing @type error, got: %v", err)
}
}
func TestRenderFile_InvalidJSON(t *testing.T) {
rawJSON := []byte(`{"name": "Test"`)
_, err := renderer.RenderFile(rawJSON)
if err == nil {
t.Fatal("expected error for invalid JSON, got nil")
}
if !strings.Contains(err.Error(), "failed to parse JSON") {
t.Errorf("expected invalid JSON error, got: %v", err)
}
}
func TestRenderFile_RecipeBaguette(t *testing.T) {
inputJSON := testdata.Read(t, "baguette/output.json")
expectedMarkdown := testdata.Read(t, "baguette/input.md")
gotMarkdown, err := renderer.RenderFile(inputJSON)
if err != nil {
t.Fatalf("RenderFile failed: %v", err)
}
if diff := cmp.Diff(string(expectedMarkdown), string(gotMarkdown)); diff != "" {
t.Errorf("Rendered markdown mismatch (-want +got):\n%s", diff)
}
}
func TestRenderFile_ArticleSimple(t *testing.T) {
inputJSON := testdata.Read(t, "article_simple/output.json")
expectedMarkdown := testdata.Read(t, "article_simple/input.md")
gotMarkdown, err := renderer.RenderFile([]byte(inputJSON))
if err != nil {
t.Fatalf("RenderFile failed: %v", err)
}
if diff := cmp.Diff(string(expectedMarkdown), string(gotMarkdown)); diff != "" {
t.Errorf("Rendered markdown mismatch (-want +got):\n%s", diff)
}
}