package classes import ( "testing" "git.golem15.com/golem15/sm-seo-plugin/models" ) // TestTemplates: rendering fills the three placeholders, collapses spaces // and trims separators an empty placeholder leaves; an unknown placeholder // is refused when the template is saved. func TestTemplates(t *testing.T) { vars := TemplateVars{Title: "Grzyby leśne", Description: "O grzybach", Site: "Atlas"} for _, tc := range []struct { name, tpl string vars TemplateVars want string }{ {"title and site", "%title% | %site%", vars, "Grzyby leśne | Atlas"}, {"description", "%description% – %site%", vars, "O grzybach – Atlas"}, {"every placeholder twice", "%title% %title% %site%", vars, "Grzyby leśne Grzyby leśne Atlas"}, {"an empty site leaves no separator", "%title% | %site%", TemplateVars{Title: "About"}, "About"}, {"an empty title leaves no separator", "%title% · %site%", TemplateVars{Site: "Atlas"}, "Atlas"}, {"separators of every kind are trimmed", "%title% — : , %site%", TemplateVars{Title: "X"}, "X"}, {"inner separators stay", "%title% | Blog | %site%", TemplateVars{Title: "X", Site: "Y"}, "X | Blog | Y"}, {"runs of spaces collapse", " %title% \t %site% ", vars, "Grzyby leśne Atlas"}, {"an empty template renders nothing", "", vars, ""}, {"a blank template renders nothing", " ", vars, ""}, {"text without placeholders", "Static title", vars, "Static title"}, {"an unknown placeholder renders as written", "%title% %author%", vars, "Grzyby leśne %author%"}, {"everything empty", "%title% | %site%", TemplateVars{}, ""}, } { t.Run(tc.name, func(t *testing.T) { if got := RenderTemplate(tc.tpl, tc.vars); got != tc.want { t.Fatalf("RenderTemplate(%q) = %q, want %q", tc.tpl, got, tc.want) } }) } for _, tc := range []struct { tpl, unknown string }{ {"%title% | %site%", ""}, {"%description%", ""}, {"", ""}, {"100% sure", ""}, {"%author% | %site%", "%author%"}, {"%title% %Title%", "%Title%"}, {"%%", "%%"}, {"%site_name%", "%site_name%"}, {"%title% %date% %page%", "%date%"}, } { if got := models.UnknownPlaceholder(tc.tpl); got != tc.unknown { t.Errorf("UnknownPlaceholder(%q) = %q, want %q", tc.tpl, got, tc.unknown) } problems := models.TemplateProblems(tc.tpl) if tc.unknown == "" && problems != nil { t.Errorf("TemplateProblems(%q) = %+v", tc.tpl, problems) } if tc.unknown != "" && (len(problems) != 1 || problems[0].Key != "golem15.seo::lang.settings.template_unknown" || problems[0].Params["placeholder"] != tc.unknown) { t.Errorf("TemplateProblems(%q) = %+v", tc.tpl, problems) } } refused := models.Settings{TitleTemplate: "%title% | %brand%", HomeTemplate: "%site% %x%"}.Problems() if len(refused["title_template"]) != 1 || len(refused["home_template"]) != 1 { t.Fatalf("settings problems = %+v", refused) } if ok := (models.Settings{TitleTemplate: "%title% | %site%", HomeTemplate: "%site%"}).Problems(); len(ok) != 0 { t.Fatalf("valid templates refused: %+v", ok) } if len(models.KnownPlaceholders) != 3 || PlaceholderTitle != models.KnownPlaceholders[0] || PlaceholderDescription != models.KnownPlaceholders[1] || PlaceholderSite != models.KnownPlaceholders[2] { t.Fatalf("the rendered and the validated placeholders differ: %v", models.KnownPlaceholders) } }