Continues the full-year sanctoral import: Ss. Tiburtius and Susanna, Ss. Hippolytus and Cassian, the Vigil of the Assumption, St. Joachim (Duplex II Classis, own full proper content), St. Hyacinth, St. John Eudes, St. Jane Frances de Chantal, the Immaculate Heart of the BVM (Duplex II Classis, instituted 1942, full proper content), St. Joseph Calasanctius, and St. Raymond Nonnatus. Several of the new fixed dates (Aug 16, 17, 21, 22) fall within or adjacent to St. Lawrence's and the Assumption's overlapping octave windows and now win outright there under the ordinary-feria/ordinary- sunday precedence rules, displacing what several existing tests expected to be bare octave commemorations or ferial fallbacks. Updated: - august-sanctoral.test.ts: Aug 22 now correctly shows the Immaculate Heart of Mary as the winner, with the Assumption's octave still commemorated alongside her. - day-label.test.ts: the two octave-priority tests pinned to Aug 17 (now St. Hyacinth's own day) moved their "day 8 alone" case to All Saints' own octave (Nov 8, still open); the two-octaves-overlap comparison can no longer be demonstrated via any real date in this app since every day where St. Lawrence's and the Assumption's octaves genuinely overlap is now real sanctoral content -- the underlying `pickWinningOctave` mechanism itself stays covered by tests/calendar/octaves.test.ts's own synthetic-data unit test. - vespers.test.ts: the Thursday Ps 138 split test moved off Aug 20, whose own first Vespers is now claimed by St. Jane Frances de Chantal's fixed day (Aug 21). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -91,9 +91,18 @@ describe('August sanctoral pull (first pass)', () => {
|
||||
// Aug 22 is the Assumption's own octave day (In Octava Assumptionis),
|
||||
// Duplex, blocking Ss. Timothy/Hippolytus/Symphorian the same way --
|
||||
// it's also day 8 of the Assumption's own octave. Those three still
|
||||
// aren't modeled, so this stays a bare octave commemoration.
|
||||
// aren't modeled -- but Aug 22 itself is also now the Immaculate
|
||||
// Heart of the Blessed Virgin Mary's own fixed day (Duplex II
|
||||
// Classis, added per the full-year sanctoral import), which wins
|
||||
// outright under the ordinary-feria rule, with the octave still
|
||||
// commemorated alongside her.
|
||||
const assumptionOctaveDay = resolveDay('2025-08-22');
|
||||
expect(assumptionOctaveDay.winner.kind).toBe('temporal');
|
||||
expect(assumptionOctaveDay.winner).toEqual({
|
||||
kind: 'sanctoral',
|
||||
id: 'immaculate-heart-of-mary',
|
||||
name: 'The Immaculate Heart of the Blessed Virgin Mary',
|
||||
rank: 'duplex-2-classis',
|
||||
});
|
||||
expect(assumptionOctaveDay.commemorations).toEqual([
|
||||
{ kind: 'octave', id: 'assumption', name: 'The Assumption of the Blessed Virgin Mary' },
|
||||
]);
|
||||
|
||||
@@ -107,9 +107,12 @@ describe('getDayLabel — active octave', () => {
|
||||
});
|
||||
|
||||
it('shows the octave day alone when nothing is separately commemorated that day', () => {
|
||||
// Aug 17 is day 8 (the last day) of St. Lawrence's octave, with no
|
||||
// sanctoral candidate of its own in this app's calendar.
|
||||
expect(getDayLabel(resolveDay('2026-08-17'))).toBe('8th Day within the Octave of St. Lawrence, Martyr');
|
||||
// Not Aug 17 (day 8, the last day, of St. Lawrence's octave): that
|
||||
// date is now St. Hyacinth's own fixed day (Duplex, added per the
|
||||
// full-year sanctoral import), which wins outright. All Saints' own
|
||||
// octave (Nov 1-8) still has a genuinely open day 8 -- 2028-11-08 is
|
||||
// a Wednesday, clear of both a Sunday and any sanctoral entry.
|
||||
expect(getDayLabel(resolveDay('2028-11-08'))).toBe('8th Day within the Octave of All Saints');
|
||||
});
|
||||
|
||||
it("a season's own named anchor day outranks an active octave, even though Trinity Sunday is technically also day 8 of Pentecost's own octave", () => {
|
||||
@@ -130,7 +133,22 @@ describe('getDayLabel — active octave', () => {
|
||||
});
|
||||
|
||||
it("picks the higher-ranked of two genuinely overlapping octaves for the label -- St. Lawrence's own elevated closing day (Aug 17) over the Assumption's ordinary day 3, even though the Assumption's octave started later and the Assumption is the higher-ranked feast overall", () => {
|
||||
expect(getDayLabel(resolveDay('2026-08-17'))).toBe('8th Day within the Octave of St. Lawrence, Martyr');
|
||||
// Aug 17 itself is no longer available to demonstrate the
|
||||
// octave-vs-octave priority pick through a real date: it's now St.
|
||||
// Hyacinth's own fixed day (Duplex, added per the full-year
|
||||
// sanctoral import), which wins outright over both octaves. In
|
||||
// fact every day where St. Lawrence's (Aug 10-17) and the
|
||||
// Assumption's (Aug 15-22) octaves genuinely overlap (Aug 15-17) is
|
||||
// now occupied by real sanctoral content (the Assumption herself,
|
||||
// St. Joachim, St. Hyacinth) -- there's no remaining real calendar
|
||||
// date left in this app where that specific priority comparison is
|
||||
// observable. The underlying mechanism itself (`pickWinningOctave`)
|
||||
// is still directly unit-tested with synthetic data in
|
||||
// tests/calendar/octaves.test.ts's own "picks the higher-ranked
|
||||
// octave regardless of order or start date" case. Aug 18 (day 4 of
|
||||
// the Assumption's octave alone, Lawrence's already over) is still
|
||||
// a valid, uncontested check.
|
||||
expect(getDayLabel(resolveDay('2026-08-17'))).toBe('St. Hyacinth, Confessor');
|
||||
expect(getDayLabel(resolveDay('2026-08-18'))).toBe('4th Day within the Octave of The Assumption of the Blessed Virgin Mary');
|
||||
});
|
||||
|
||||
|
||||
@@ -90,8 +90,13 @@ describe('resolveOrdo("vespers", ...)', () => {
|
||||
});
|
||||
|
||||
it('splits Ps 138 into two verse-ranges under one shared antiphon on Thursday', () => {
|
||||
// 2026-08-20 is a Thursday, in ordinary time.
|
||||
const ordo = resolveOrdo('vespers', '2026-08-20');
|
||||
// Not 2026-08-20: that date's own first Vespers is now claimed by
|
||||
// St. Jane Frances de Chantal's own fixed day (Duplex, Aug 21,
|
||||
// added per the full-year sanctoral import), so it no longer falls
|
||||
// back to the plain ferial Thursday scheme this test wants to
|
||||
// isolate. 2026-09-03 is also a Thursday in ordinary time, clear of
|
||||
// any such collision.
|
||||
const ordo = resolveOrdo('vespers', '2026-09-03');
|
||||
const psalmParts = ordo.parts.filter((p) => p.kind === 'psalm');
|
||||
const numbers = psalmParts.map((p) => (p.kind === 'psalm' ? p.psalmNumber : undefined));
|
||||
expect(numbers).toEqual([138, 138, 139, 140]);
|
||||
|
||||
Reference in New Issue
Block a user