514300821a
Deploy / deploy (push) Successful in 1m31s
Authors a real Latin nameLa for every saint in src/data/calendar/saints/ except the deliberate example-confessor placeholder (standard ecclesiastical Latin forms, a lighter sourcing bar than this app's usual reference-engine verification -- flagged for future spot-check). Fixes a real mechanism bug found in the process: calendar/index.ts's sanctoral collision-resolution branch was dropping nameLa for any saint that won after beating another same-day candidate. Updates ~180 pre-existing test fixtures across the calendar suite for the new field. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EwsZQMjALCvy7u9tFDWmuQ
62 lines
2.9 KiB
TypeScript
62 lines
2.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, and for
|
|
// Feb 14/Feb 15 specifically, clear of the movable Ash-Wednesday-adjacent
|
|
// ferias too) — see data/calendar/saints/*.yml for per-saint source detail.
|
|
describe('February sanctoral pull (first pass)', () => {
|
|
it('a saint with a proper collect but no proper antiphon wins outright, antiphon missing', () => {
|
|
const day = resolveDay('2029-02-06'); // St. Dorothea
|
|
expect(day.winner).toEqual({
|
|
kind: 'sanctoral',
|
|
id: 'st-dorothea',
|
|
name: 'St. Dorothea, Virgin and Martyr',
|
|
nameLa: 'Sancta Dorothea, Virgo et Martyr',
|
|
rank: 'simplex',
|
|
});
|
|
expect(getDayCollect(day).status.en).toBe('verified');
|
|
});
|
|
|
|
it('a saint with a proper antiphon but no proper collect resolves the collect via its Common category (collectCommon), not missing', () => {
|
|
// Her own [Oratio] is @Commune/C6::s/N\./Agathæ/ -- a name-substituted
|
|
// reference, not unique text -- confirmed identical to collect-c6.yml's
|
|
// own template; wired via collectCommon (2026-08), postdating this
|
|
// saint's own original authoring, which is why this used to be missing.
|
|
// 2029 was the original proof year, but St. Andrew Corsini (added
|
|
// 2026-08 -- see st-andrew-corsini.yml) transfers onto Feb 5 in years
|
|
// where Sexagesima falls on his own Feb 4, and outranks Agatha
|
|
// (Duplex vs. Semiduplex) when it does -- 2029 is now one of those
|
|
// years. 2025 has no such collision.
|
|
const day = resolveDay('2025-02-05'); // St. Agatha
|
|
expect(day.winner).toEqual({
|
|
kind: 'sanctoral',
|
|
id: 'st-agatha',
|
|
name: 'St. Agatha, Virgin and Martyr',
|
|
nameLa: 'Sancta Agatha, Virgo et Martyr',
|
|
rank: 'semiduplex',
|
|
});
|
|
const collect = getDayCollect(day);
|
|
expect(collect.status.en).toBe('verified');
|
|
expect(collect.text.en).toContain('Agatha');
|
|
});
|
|
|
|
it('the two Chair-of-Peter feasts (Rome, Antioch) are separate records with independently authored, matching content', () => {
|
|
const rome = resolveDay('2029-01-18');
|
|
const antioch = resolveDay('2029-02-22');
|
|
expect(rome.winner.kind).toBe('sanctoral');
|
|
expect(antioch.winner.kind).toBe('sanctoral');
|
|
if (rome.winner.kind === 'sanctoral' && antioch.winner.kind === 'sanctoral') {
|
|
expect(rome.winner.id).not.toBe(antioch.winner.id);
|
|
}
|
|
expect(getDayCollect(rome).text.en).toEqual(getDayCollect(antioch).text.en);
|
|
});
|
|
|
|
it('a vigil impeded by a privileged Lenten feria is not forced to win', () => {
|
|
// The Vigil of St. Matthias (Feb 23) lands on the Ember Friday of
|
|
// Lent's first week in 2029 — a privileged feria the vigil can't beat.
|
|
const day = resolveDay('2029-02-23');
|
|
expect(day.winner.kind).toBe('temporal');
|
|
});
|
|
});
|