propers: add March's collect and antiphon text
Deploy / deploy (push) Successful in 40s

Real collect text for all 6 March saints that have one, plus St. Joseph's
own antiphon — same extraction method as January/February.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-10 15:38:11 -04:00
parent 67915b6c81
commit a2d86a4879
8 changed files with 165 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
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; for Mar 4/9
// specifically, clear of the movable Lenten ferias that usually overshadow
// them) — see data/calendar/saints/*.yml for per-saint source detail.
describe('March sanctoral pull (first pass)', () => {
it('St. Joseph wins outright with a real proper collect and antiphon', () => {
const day = resolveDay('2033-03-19');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-joseph',
name: 'St. Joseph, Spouse of the Blessed Virgin Mary, Confessor',
rank: 'duplex',
});
expect(getDayCollect(day).status.en).toBe('verified');
});
it('the Forty Holy Martyrs (one feast, several martyrs) resolve like any other saint', () => {
const day = resolveDay('2033-03-10');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'forty-holy-martyrs',
name: 'The Forty Holy Martyrs',
rank: 'semiduplex',
});
expect(getDayCollect(day).status.en).toBe('verified');
});
it("St. Benedict wins outright at Duplex I. classis despite having no unique propers at all", () => {
const day = resolveDay('2033-03-21');
expect(day.winner).toEqual({
kind: 'sanctoral',
id: 'st-benedict',
name: 'St. Benedict, Abbot (Transitus)',
rank: 'duplex-1-classis',
});
expect(getDayCollect(day).status.en).toBe('missing');
});
});