aboutsummaryrefslogtreecommitdiff
path: root/internal/calendar/temporal_ef_test.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:35:41 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-18 16:35:41 +0200
commit25aa1fa687ec714e145a998714c29a5f5728a603 (patch)
tree7dde727167a0fc50ba79f1ffd8e7500af02cd653 /internal/calendar/temporal_ef_test.go
parent5ee75098e1c86fdce195df2e37784c18a2b081a5 (diff)
downloadlectio-25aa1fa687ec714e145a998714c29a5f5728a603.tar.gz
lectio-25aa1fa687ec714e145a998714c29a5f5728a603.zip
feat(ef): Rogation Monday and Tuesday (RG 87)
RG 87: "Litaniae minores seu Rogationes, per se, assignantur feriis II, III et IV ante festum Ascensionis Domini." Easter+36 and +37 are that Monday and Tuesday. RG 128(d) gives them violet -- "for the procession and Mass of the Greater and Lesser Litanies" -- a penitential note inside white Paschaltide. lectio computed no Rogation days at all and showed a plain paschaltide feria. The WEDNESDAY is deliberately not built, and the test asserts its absence. Easter+38 is by construction the Vigil of the Ascension, II class, which wins the day outright; what the rubric asks for there is a COMMEMORATION, and this function returns one office per day. colitur reaches it through a movable-date entry in its sanctoral overlay. Extending the Rogation branch to +38 to "complete" the rubric would silently displace the Vigil, so the test pins the Vigil rather than leaving the omission to a comment. Rank is left as the feria's: these are IV-class days and any III-class saint displaces them, which is what makes the office rare. In 2026 all three are impeded and none appears; 2027 has the Monday unimpeded, and lectio and colitur are byte-identical across 2-5 May that year. One oracle allow-list entry: missalemeum builds no Rogation days either and shows a white feria, so it is the outlier here rather than lectio.
Diffstat (limited to 'internal/calendar/temporal_ef_test.go')
-rw-r--r--internal/calendar/temporal_ef_test.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/internal/calendar/temporal_ef_test.go b/internal/calendar/temporal_ef_test.go
index 1290a59..e8ef391 100644
--- a/internal/calendar/temporal_ef_test.go
+++ b/internal/calendar/temporal_ef_test.go
@@ -300,3 +300,37 @@ func TestTemporalEFBVMSaturday(t *testing.T) {
}
}
}
+
+// TestTemporalEFRogationDays pins RG 87's Minor Litanies: "Litaniae minores seu
+// Rogationes, per se, assignantur feriis II, III et IV ante festum Ascensionis
+// Domini." Easter+36 and +37 are that Monday and Tuesday; RG 128(d) makes them
+// violet, "for the procession and Mass of the Greater and Lesser Litanies" --
+// a penitential note inside white Paschaltide.
+//
+// The Wednesday is asserted in the opposite direction on purpose. Easter+38 is
+// by construction the Vigil of the Ascension, II class, which wins the day; the
+// rubric asks for a COMMEMORATION there, which this function cannot express
+// since it returns one office per day. A change that extended the Rogation
+// branch to +38 to "complete" the rubric would silently displace the Vigil, and
+// this test is what stops it.
+func TestTemporalEFRogationDays(t *testing.T) {
+ // 2027: Easter is 28 March, so the Rogation days are 3-5 May and the
+ // Monday is unimpeded that year.
+ easter := d("2027-03-28")
+ for off, want := range map[int]string{36: "ef-rogation-monday", 37: "ef-rogation-tuesday"} {
+ day := easter.AddDate(0, 0, off)
+ got := temporalEF(day)
+ if got.Cel.Slug != want {
+ t.Errorf("Easter+%d (%s): slug = %q, want %q", off, day.Format("2006-01-02"), got.Cel.Slug, want)
+ }
+ if got.Cel.Colour != Violet {
+ t.Errorf("Easter+%d (%s): colour = %s, want violet (RG 128(d))",
+ off, day.Format("2006-01-02"), got.Cel.Colour)
+ }
+ }
+ // Easter+38 is the Ascension's Vigil and must stay so.
+ if got := temporalEF(easter.AddDate(0, 0, 38)); got.Cel.Slug != "ef-ascension-vigil" {
+ t.Errorf("Easter+38: slug = %q, want ef-ascension-vigil -- the Rogation Wednesday's "+
+ "commemoration cannot be built here without displacing the Vigil", got.Cel.Slug)
+ }
+}