aboutsummaryrefslogtreecommitdiff
path: root/internal/readings/partids_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/readings/partids_test.go')
-rw-r--r--internal/readings/partids_test.go75
1 files changed, 75 insertions, 0 deletions
diff --git a/internal/readings/partids_test.go b/internal/readings/partids_test.go
new file mode 100644
index 0000000..fdbd816
--- /dev/null
+++ b/internal/readings/partids_test.go
@@ -0,0 +1,75 @@
+package readings
+
+import (
+ "testing"
+
+ "github.com/lukaszkasprzak/lectio/internal/config"
+ "github.com/lukaszkasprzak/lectio/internal/i18n"
+)
+
+// The day header must carry the rank, not just name and colour: the app's
+// calendar rows and the CLI's day line both display it.
+func TestDayInfoCarriesRank(t *testing.T) {
+ cases := []struct {
+ date, lect, wantRank string
+ }{
+ // 2026-08-01 is the memorial of St Alphonsus Liguori in the OF.
+ {"2026-08-01", "new", "memorial"},
+ // 2026-12-25 is a solemnity.
+ {"2026-12-25", "new", "solemnity"},
+ }
+ for _, c := range cases {
+ cfg := config.Config{UILanguage: "en", Lectionary: c.lect, All: true}
+ _, info, err := Load(cfg, Options{Date: c.date, All: true})
+ if err != nil {
+ t.Fatalf("%s: load: %v", c.date, err)
+ }
+ if info.Rank != c.wantRank {
+ t.Errorf("%s: rank = %q, want %q", c.date, info.Rank, c.wantRank)
+ }
+ }
+}
+
+// PartIDs must list exactly the IDs the engine can emit, in display order.
+// The app derives its "show readings" checkboxes from this; when it hardcoded
+// them instead, seven of the nine 1962 IDs were wrong and the epistle's
+// checkbox did nothing.
+func TestPartIDs(t *testing.T) {
+ wantNew := []string{"pierwsze_czytanie", "psalm", "drugie_czytanie", "ewangelia"}
+ wantOld := []string{"epistola", "evangelium"}
+ if got := PartIDs("new"); !equalSlice(got, wantNew) {
+ t.Errorf("PartIDs(new) = %v, want %v", got, wantNew)
+ }
+ if got := PartIDs("traditional"); !equalSlice(got, wantOld) {
+ t.Errorf("PartIDs(traditional) = %v, want %v", got, wantOld)
+ }
+ if got := PartIDs("nonsense"); len(got) != 0 {
+ t.Errorf("PartIDs(nonsense) = %v, want empty", got)
+ }
+}
+
+// Every ID PartIDs lists must have a label in every shipped language,
+// otherwise a checkbox would render a raw ID like "epistola".
+func TestEveryPartIDHasLabels(t *testing.T) {
+ for _, lect := range []string{"new", "traditional"} {
+ for _, id := range PartIDs(lect) {
+ for _, lang := range []string{"en", "pl"} {
+ if i18n.Get(lang).PartLabel[id] == "" {
+ t.Errorf("%s/%s: no label for %q", lect, lang, id)
+ }
+ }
+ }
+ }
+}
+
+func equalSlice(a, b []string) bool {
+ if len(a) != len(b) {
+ return false
+ }
+ for i := range a {
+ if a[i] != b[i] {
+ return false
+ }
+ }
+ return true
+}