package template_test import ( "testing" "git.max-richter.dev/max/marka/registry" "git.max-richter.dev/max/marka/template" ) func TestExtractBlocks(t *testing.T) { src, err := registry.GetTemplate("Recipe") if err != nil { t.Errorf("Failed to extract blocks: %s", err.Error()) t.FailNow() } templateBlocks, err := template.CompileTemplate(src) if err != nil { t.Errorf("Failed to extract blocks: %s", err.Error()) t.FailNow() } expected := []template.Block{ { Type: template.MatchingBlock, }, { Type: template.DataBlock, Codec: "yaml", Path: ".", Fields: []template.BlockField{ { Path: "@type", }, { Path: "image", }, { Path: "author.@type", }, { Path: "author.name", }, { Path: "datePublished", }, { Path: "prepTime", }, { Path: "cookTime", }, { Path: "recipeYield", }, }, }, {Type: template.MatchingBlock}, {Type: template.DataBlock, Path: "name", Codec: "text"}, {Type: template.MatchingBlock}, {Type: template.DataBlock, Path: "description", Codec: "text"}, {Type: template.MatchingBlock}, {Type: template.DataBlock, Path: "recipeIngredient", Codec: "list", ListTemplate: "- { . }"}, {Type: template.MatchingBlock}, {Type: template.DataBlock, Path: "recipeInstructions", Codec: "list", ListTemplate: "{ @index }. { . }"}, } if len(templateBlocks) != len(expected) { t.Fatalf("expected %d blocks, got %d", len(expected), len(templateBlocks)) } for i, b := range templateBlocks { exp := expected[i] if b.Type != exp.Type { t.Errorf("Block#%d Type '%s' did not match expected type '%s'", i, b.Type, exp.Type) } if b.Path != exp.Path { t.Errorf("Block#%d Path '%s' did not match expected path '%s'", i, b.Path, exp.Path) } if b.Codec != exp.Codec { t.Errorf("Block#%d Codec '%s' did not match expected codec '%s'", i, b.Codec, exp.Codec) } } } func TestExtractInlineTemplate(t *testing.T) { testCases := []string{ "- { . }", "- { amount } { type }", } for _, tc := range testCases { _, err := template.CompileTemplate(tc) if err != nil { t.Errorf("Failed to extract blocks: %s", err.Error()) t.FailNow() } } }