Files
CapaKraken/packages/db/src/holiday-calendar-seed-data.test.ts
T

90 lines
3.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { buildHolidayCalendarSeedDefinitions } from "./holiday-calendar-seed-data.js";
function getDefinition(
definitions: ReturnType<typeof buildHolidayCalendarSeedDefinitions>,
predicate: (definition: ReturnType<typeof buildHolidayCalendarSeedDefinitions>[number]) => boolean,
) {
const definition = definitions.find(predicate);
assert.ok(definition, "expected holiday seed definition to exist");
return definition;
}
test("builds country, state, and city holiday seeds for available profiles", () => {
const definitions = buildHolidayCalendarSeedDefinitions({
availableCountryCodes: ["DE", "ES", "IN", "US"],
availableCitiesByCountry: {
DE: ["Augsburg", "Berlin", "Hamburg", "Muenchen", "Stuttgart"],
ES: ["Barcelona", "Madrid"],
IN: ["Bangalore", "Mumbai"],
US: ["Los Angeles", "New York"],
},
activeGermanStates: ["BW", "BY", "HH"],
years: [2026, 2027],
});
const byCalendar = getDefinition(
definitions,
(definition) => definition.scopeType === "STATE" && definition.countryCode === "DE" && definition.stateCode === "BY",
);
const nwCalendar = getDefinition(
definitions,
(definition) => definition.scopeType === "STATE" && definition.countryCode === "DE" && definition.stateCode === "NW",
);
const madridCalendar = getDefinition(
definitions,
(definition) => definition.scopeType === "CITY" && definition.countryCode === "ES" && definition.cityName === "Madrid",
);
const augsburgCalendar = getDefinition(
definitions,
(definition) => definition.scopeType === "CITY" && definition.countryCode === "DE" && definition.cityName === "Augsburg",
);
const usCalendar = getDefinition(
definitions,
(definition) => definition.scopeType === "COUNTRY" && definition.countryCode === "US",
);
assert.ok(
byCalendar.entries.some((entry) => entry.date === "2026-01-06" && entry.name === "Heilige Drei Könige"),
);
assert.ok(
byCalendar.entries.some((entry) => entry.date === "2027-08-15" && entry.name === "Mariä Himmelfahrt"),
);
assert.ok(
nwCalendar.entries.some((entry) => entry.date === "2026-06-04" && entry.name === "Fronleichnam"),
);
assert.ok(
!nwCalendar.entries.some((entry) => entry.date === "2026-01-06"),
);
assert.ok(
madridCalendar.entries.some((entry) => entry.date === "2026-05-15" && entry.name === "San Isidro"),
);
assert.ok(
augsburgCalendar.entries.some((entry) => entry.date === "2027-08-08" && entry.name === "Augsburger Friedensfest"),
);
assert.ok(
usCalendar.entries.some((entry) => entry.date === "2026-07-03" && entry.name === "Independence Day"),
);
assert.ok(
usCalendar.entries.some((entry) => entry.date === "2027-12-24" && entry.name === "Christmas Day"),
);
});
test("only includes city calendars for cities that exist in the database", () => {
const definitions = buildHolidayCalendarSeedDefinitions({
availableCountryCodes: ["DE", "ES"],
availableCitiesByCountry: {
DE: ["Berlin"],
ES: ["Madrid"],
},
activeGermanStates: ["BY"],
years: [2026, 2027],
});
assert.ok(definitions.some((definition) => definition.countryCode === "DE" && definition.scopeType === "STATE"));
assert.ok(definitions.some((definition) => definition.countryCode === "ES" && definition.scopeType === "CITY" && definition.cityName === "Madrid"));
assert.ok(!definitions.some((definition) => definition.countryCode === "ES" && definition.scopeType === "CITY" && definition.cityName === "Barcelona"));
assert.ok(!definitions.some((definition) => definition.countryCode === "US"));
});