From c9f3bf46f0de09edb796e35f3dcff349febf75c9 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Fri, 24 Jul 2026 10:32:28 +0200 Subject: dayinfo: show feast/day name + colour (modern niedziela + traditional missalemeum) in cli/tui/web; v0.5.0 --- internal/web/render_test.go | 56 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 8 deletions(-) (limited to 'internal/web/render_test.go') diff --git a/internal/web/render_test.go b/internal/web/render_test.go index b7f5b1e..de3c7c1 100644 --- a/internal/web/render_test.go +++ b/internal/web/render_test.go @@ -11,12 +11,52 @@ import ( func TestRenderReadings(t *testing.T) { secs := []liturgy.Section{{Heading: "Ewangelia (J 20, 1. 11-18)", PartID: "ewangelia"}} - html := string(RenderReadings(secs, []string{"wuj"}, "new", "horizontal", "pl")) + html := string(RenderReadings(secs, []string{"wuj"}, "new", "horizontal", "pl", liturgy.DayInfo{})) if !strings.Contains(html, "Ewangelia") || !strings.Contains(html, "class=") { t.Errorf("reading pane missing heading/classes: %q", html[:min(200, len(html))]) } } +// TestRenderReadingsDayInfoHeader checks RenderReadings prepends a +// "

" header carrying the celebration Name (heading role) +// and Season (citation role, muted) ahead of the reading sections, and that +// it reuses the existing role classes rather than inventing new ones. +func TestRenderReadingsDayInfoHeader(t *testing.T) { + secs := []liturgy.Section{{Heading: "Ewangelia (J 20, 1. 11-18)", PartID: "ewangelia"}} + info := liturgy.DayInfo{Name: "Święto św. Marii Magdaleny", Colour: "white"} + html := string(RenderReadings(secs, []string{"wuj"}, "new", "horizontal", "pl", info)) + if !strings.Contains(html, `class="dayinfo"`) { + t.Errorf("missing dayinfo header: %q", html[:min(300, len(html))]) + } + if !strings.Contains(html, "Święto św. Marii Magdaleny") { + t.Errorf("dayinfo header missing the day name: %q", html[:min(300, len(html))]) + } + if i := strings.Index(html, `class="dayinfo"`); i > strings.Index(html, "reading-section") && strings.Index(html, "reading-section") != -1 { + t.Errorf("dayinfo header should come before the reading sections: %q", html[:min(400, len(html))]) + } +} + +// TestRenderReadingsDayInfoSeason checks the Season (traditional lectionary +// only) renders as a muted citation-role span alongside Name. +func TestRenderReadingsDayInfoSeason(t *testing.T) { + secs := []liturgy.Section{{Heading: "Gospel", PartID: "evangelium"}} + info := liturgy.DayInfo{Name: "St. Mary Magdalene", Season: "Feria IV after VIII Sunday after Pentecost", Colour: "white"} + html := string(RenderReadings(secs, []string{"wuj"}, "traditional", "horizontal", "en", info)) + if !strings.Contains(html, "Feria IV after VIII Sunday after Pentecost") { + t.Errorf("dayinfo header missing Season: %q", html[:min(400, len(html))]) + } +} + +// TestRenderReadingsNoDayInfoHeaderWhenEmpty checks the header is entirely +// omitted (never an empty/error stub) when the source yielded no DayInfo. +func TestRenderReadingsNoDayInfoHeaderWhenEmpty(t *testing.T) { + secs := []liturgy.Section{{Heading: "Ewangelia (J 20, 1. 11-18)", PartID: "ewangelia"}} + html := string(RenderReadings(secs, []string{"wuj"}, "new", "horizontal", "pl", liturgy.DayInfo{})) + if strings.Contains(html, `class="dayinfo"`) { + t.Errorf("dayinfo header should be omitted when Name is empty: %q", html) + } +} + func TestBuiltinThemes(t *testing.T) { t.Setenv("XDG_CONFIG_HOME", t.TempDir()) // no user themes for _, name := range []string{ @@ -45,7 +85,7 @@ func TestRenderReadingsEscapesScriptText(t *testing.T) { PartID: "pierwsze_czytanie", Paragraphs: [][]string{{""}}, }} - html := string(RenderReadings(secs, []string{"bt"}, "new", "horizontal", "pl")) + html := string(RenderReadings(secs, []string{"bt"}, "new", "horizontal", "pl", liturgy.DayInfo{})) if strings.Contains(html, "") { t.Errorf("raw