Files
vu/tests/calendar/september-sanctoral.test.ts
T
will 2cf5e9cd39
Deploy / deploy (push) Successful in 1m7s
Add September sanctoral content: 10 saints/feasts
Continues the full-year sanctoral import: St. Stephen of Hungary, St.
Pius X, St. Lawrence Justinian, Ss. Protus and Hyacinth, the Holy Name
of Mary, the Seven Sorrows of the BVM (Duplex II Classis, own full
proper content except Nocturn 2, a real cross-reference to Passion
Friday's own temporal content), the Impression of the Stigmata of St.
Francis, St. Joseph of Cupertino, Our Lady of Ransom, and St.
Wenceslaus.

Ss. Protus and Hyacinth (Sep 11) were previously excluded under a
stale "real secondary saint blocked by the Nativity's own octave, same
as St. Clare in August" note -- wrong, same class of error already
corrected for St. Tiburtius/Susanna in August: the octave-window
exclusion was never a real rule. Sep 15 (day 8 of the Nativity's own
octave) is now also the Seven Sorrows' own fixed day (Duplex II
Classis), which wins outright with the octave still commemorated
alongside her -- updated september-sanctoral.test.ts's own "excluded
secondary saints" case accordingly, splitting it into the still-valid
Sep 9 (Gorgonius) half and a new Sep 15 case reflecting the real
winner.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 17:13:04 -04:00

91 lines
3.9 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { resolveDay } from '../../src/calendar';
import { getDayCollect } from '../../src/hours/resolve-common';
// Clean per-annum years for these dates (no Sunday collision) — see
// data/calendar/saints/*.yml for per-saint source detail.
describe('September sanctoral pull (first pass)', () => {
it('St. Giles wins outright at Simplex over a genuinely unwinnable stub', () => {
const day = resolveDay('2025-09-01');
expect(day.winner).toEqual({ kind: 'sanctoral', id: 'st-giles', name: 'St. Giles, Abbot', rank: 'simplex' });
expect(day.commemorations).toEqual([
{ kind: 'sanctoral', id: 'ss-twelve-brothers', name: 'Ss. Twelve Brothers, Martyrs', rank: 'simplex' },
]);
});
it('the Nativity of the BVM wins outright with a real proper collect and antiphon, commemorating a real secondary saint blocked by its own day (not its octave)', () => {
const day = resolveDay('2025-09-08');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'nativity-bvm',
name: 'The Nativity of the Blessed Virgin Mary',
rank: 'duplex-2-classis',
});
expect(day.commemorations).toEqual([
{ kind: 'sanctoral', id: 'st-hadrian', name: 'St. Hadrian, Martyr', rank: 'simplex' },
]);
expect(getDayCollect(day).status.en).toBe('verified');
});
it("a date within the Nativity's own octave still excludes the real secondary saint the source names (Ss. Gorgonius) -- not modeled yet -- but the octave itself (now modeled, see calendar/octaves.ts) correctly commemorates through it", () => {
const gorgoniusDay = resolveDay('2025-09-09');
expect(gorgoniusDay.winner.kind).toBe('temporal');
expect(gorgoniusDay.commemorations).toEqual([
{ kind: 'octave', id: 'nativity-bvm', name: 'The Nativity of the Blessed Virgin Mary' },
]);
});
it('Sep 15 (day 8 of the Nativity octave) is now the Seven Sorrows of the BVM\'s own fixed day (Duplex II Classis, added per the full-year sanctoral import), which wins outright, with the Nativity octave still commemorated alongside her -- St. Nicomedes, the source\'s other named secondary for this date, still is not modeled', () => {
const nicomedesDay = resolveDay('2025-09-15');
expect(nicomedesDay.winner).toEqual({
kind: 'sanctoral',
id: 'seven-sorrows-of-the-bvm',
name: 'The Seven Sorrows of the Blessed Virgin Mary',
rank: 'duplex-2-classis',
});
expect(nicomedesDay.commemorations).toEqual([
{ kind: 'octave', id: 'nativity-bvm', name: 'The Nativity of the Blessed Virgin Mary' },
]);
});
it('a monastic-calendar-specific reassignment replaces what the base Tridentine table treats as a plain Nativity-octave continuation', () => {
const day = resolveDay('2025-09-10');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-nicholas-of-tolentino',
name: 'St. Nicholas of Tolentino, Confessor',
rank: 'semiduplex',
});
});
it('St. Matthew wins outright at Duplex II. classis with a real proper collect, distinct from his own Vigil the day before', () => {
const vigil = resolveDay('2029-09-20');
const day = resolveDay('2029-09-21');
expect(vigil.winner).toEqual({
kind: 'sanctoral',
id: 'vigil-of-st-matthew',
name: 'Vigil of St. Matthew',
rank: 'vigil',
});
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-matthew',
name: 'St. Matthew, Apostle and Evangelist',
rank: 'duplex-2-classis',
});
expect(getDayCollect(day).status.en).toBe('verified');
});
it('St. Jerome wins outright at Duplex with a real proper collect, alone', () => {
const day = resolveDay('2025-09-30');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-jerome',
name: 'St. Jerome, Priest, Confessor and Doctor of the Church',
rank: 'duplex',
});
expect(day.commemorations).toEqual([]);
expect(getDayCollect(day).status.en).toBe('verified');
});
});