package tradlit import ( "os" "strings" "testing" "github.com/lukaszkasprzak/lectio/internal/liturgy" ) func TestParse(t *testing.T) { body, err := os.ReadFile("testdata/2026-07-22.json") if err != nil { t.Fatal(err) } secs, _, err := Parse(body) if err != nil { t.Fatal(err) } var gospel, epistle bool for _, s := range secs { if s.PartID == "evangelium" { gospel = true if s.Citation != "Luke 7:36-50" { t.Errorf("gospel citation = %q", s.Citation) } if len(s.Paragraphs) == 0 { t.Error("gospel has no vernacular text") } } if s.PartID == "lectio" { epistle = true } } if !gospel || !epistle { t.Errorf("missing parts: gospel=%v epistle=%v", gospel, epistle) } } // TestParseDayInfo checks the traditional (missalemeum) day-info // extraction against the fixture's "info" object: Name from info.title, // Season from info.tempora, Colour from info.colors[0] ("w" -> "white"). func TestParseDayInfo(t *testing.T) { body, err := os.ReadFile("testdata/2026-07-22.json") if err != nil { t.Fatal(err) } _, info, err := Parse(body) if err != nil { t.Fatal(err) } if info.Name != "St. Mary Magdalene" { t.Errorf("Name = %q, want %q", info.Name, "St. Mary Magdalene") } if !strings.Contains(info.Season, "Pentecost") { t.Errorf("Season = %q, want it to contain %q", info.Season, "Pentecost") } if info.Colour != "white" { t.Errorf("Colour = %q, want %q", info.Colour, "white") } } // TestParseDayInfoMissingInfo checks that a response with no (or empty) // info object yields a zero DayInfo rather than an error. func TestParseDayInfoMissingInfo(t *testing.T) { _, info, err := Parse([]byte(`[{"sections":[]}]`)) if err != nil { t.Fatal(err) } if info != (liturgy.DayInfo{}) { t.Errorf("info = %+v, want zero value for a response with no info object", info) } } // TestParseDayInfoUnknownColourCode checks an unrecognised colour code maps // to "" rather than passing the raw code through. func TestParseDayInfoUnknownColourCode(t *testing.T) { body := []byte(`[{"info":{"title":"Test","tempora":"","colors":["z"]},"sections":[]}]`) _, info, err := Parse(body) if err != nil { t.Fatal(err) } if info.Colour != "" { t.Errorf("Colour = %q, want empty for unknown code %q", info.Colour, "z") } }