Spaces:
Sleeping
Sleeping
| import { describe, it, expect } from 'vitest' | |
| import { getHolidays, isWeekend, getWeekday, getWeekdayFull, daysInMonth, formatDate, BUNDESLAENDER } from './holidays' | |
| describe('holidays', () => { | |
| // FE-COMP-HOLIDAYS-001 | |
| it('getHolidays returns Neujahr for any year', () => { | |
| expect(getHolidays(2025)['2025-01-01']).toBe('Neujahr') | |
| expect(getHolidays(2030)['2030-01-01']).toBe('Neujahr') | |
| }) | |
| // FE-COMP-HOLIDAYS-002 | |
| it('getHolidays returns correct Easter-relative holidays for 2025', () => { | |
| const h = getHolidays(2025) | |
| expect(h['2025-04-18']).toBe('Karfreitag') | |
| expect(h['2025-04-21']).toBe('Ostermontag') | |
| expect(h['2025-05-29']).toBe('Christi Himmelfahrt') | |
| expect(h['2025-06-09']).toBe('Pfingstmontag') | |
| }) | |
| // FE-COMP-HOLIDAYS-003 | |
| it('getHolidays includes state-specific holiday for Bayern (BY)', () => { | |
| expect(getHolidays(2025, 'BY')['2025-01-06']).toBe('Heilige Drei Könige') | |
| }) | |
| // FE-COMP-HOLIDAYS-004 | |
| it('getHolidays does not include Heilige Drei Könige for NW', () => { | |
| expect(getHolidays(2025, 'NW')['2025-01-06']).toBeUndefined() | |
| }) | |
| // FE-COMP-HOLIDAYS-005 | |
| it('getHolidays includes Fronleichnam for NW', () => { | |
| expect(getHolidays(2025, 'NW')['2025-06-19']).toBe('Fronleichnam') | |
| }) | |
| // FE-COMP-HOLIDAYS-006 | |
| it('getHolidays includes Reformationstag for BB but not BW', () => { | |
| expect(getHolidays(2025, 'BB')['2025-10-31']).toBe('Reformationstag') | |
| expect(getHolidays(2025, 'BW')['2025-10-31']).toBeUndefined() | |
| }) | |
| // FE-COMP-HOLIDAYS-007 | |
| it('isWeekend returns true for Saturday with default weekendDays', () => { | |
| expect(isWeekend('2025-01-04')).toBe(true) | |
| }) | |
| // FE-COMP-HOLIDAYS-008 | |
| it('isWeekend returns false for Monday', () => { | |
| expect(isWeekend('2025-01-06')).toBe(false) | |
| }) | |
| // FE-COMP-HOLIDAYS-009 | |
| it('isWeekend respects custom weekendDays', () => { | |
| expect(isWeekend('2025-01-06', [1])).toBe(true) | |
| expect(isWeekend('2025-01-04', [1])).toBe(false) | |
| }) | |
| // FE-COMP-HOLIDAYS-010 | |
| it('getWeekday returns correct abbreviation', () => { | |
| expect(getWeekday('2025-01-06')).toBe('Mo') | |
| }) | |
| // FE-COMP-HOLIDAYS-011 | |
| it('daysInMonth returns correct count', () => { | |
| expect(daysInMonth(2025, 2)).toBe(28) | |
| expect(daysInMonth(2024, 2)).toBe(29) | |
| expect(daysInMonth(2025, 1)).toBe(31) | |
| }) | |
| // FE-COMP-HOLIDAYS-012 | |
| it('BUNDESLAENDER contains all 16 states', () => { | |
| expect(Object.keys(BUNDESLAENDER)).toHaveLength(16) | |
| expect(BUNDESLAENDER).toHaveProperty('BW') | |
| expect(BUNDESLAENDER).toHaveProperty('BY') | |
| expect(BUNDESLAENDER).toHaveProperty('BE') | |
| }) | |
| // Additional: lowercase bundesland input | |
| it('getHolidays handles lowercase bundesland', () => { | |
| expect(getHolidays(2025, 'by')['2025-01-06']).toBe('Heilige Drei Könige') | |
| }) | |
| // Additional: Buß- und Bettag for Sachsen | |
| it('getHolidays includes Buß- und Bettag for SN', () => { | |
| expect(getHolidays(2025, 'SN')['2025-11-19']).toBe('Buß- und Bettag') | |
| }) | |
| // Additional: fixed national holidays | |
| it('getHolidays returns all fixed national holidays', () => { | |
| const h = getHolidays(2025) | |
| expect(h['2025-05-01']).toBe('Tag der Arbeit') | |
| expect(h['2025-10-03']).toBe('Tag der Deutschen Einheit') | |
| expect(h['2025-12-25']).toBe('1. Weihnachtsfeiertag') | |
| expect(h['2025-12-26']).toBe('2. Weihnachtsfeiertag') | |
| }) | |
| // Additional: state-specific holidays coverage | |
| it('getHolidays includes Internationaler Frauentag for BE', () => { | |
| expect(getHolidays(2025, 'BE')['2025-03-08']).toBe('Internationaler Frauentag') | |
| }) | |
| it('getHolidays includes Mariä Himmelfahrt for SL', () => { | |
| expect(getHolidays(2025, 'SL')['2025-08-15']).toBe('Mariä Himmelfahrt') | |
| }) | |
| it('getHolidays includes Weltkindertag for TH', () => { | |
| expect(getHolidays(2025, 'TH')['2025-09-20']).toBe('Weltkindertag') | |
| }) | |
| it('getHolidays includes Allerheiligen for BW', () => { | |
| expect(getHolidays(2025, 'BW')['2025-11-01']).toBe('Allerheiligen') | |
| }) | |
| // Additional: getWeekdayFull | |
| it('getWeekdayFull returns full day name', () => { | |
| expect(getWeekdayFull('2025-01-06')).toBe('Montag') | |
| expect(getWeekdayFull('2025-01-05')).toBe('Sonntag') | |
| }) | |
| // Additional: formatDate returns non-empty string | |
| it('formatDate returns a non-empty string', () => { | |
| const result = formatDate('2025-01-06') | |
| expect(result).toBeTruthy() | |
| expect(typeof result).toBe('string') | |
| }) | |
| it('formatDate accepts a locale parameter', () => { | |
| const result = formatDate('2025-01-06', 'de-DE') | |
| expect(result).toBeTruthy() | |
| }) | |
| // Additional: isWeekend for Sunday | |
| it('isWeekend returns true for Sunday with default weekendDays', () => { | |
| expect(isWeekend('2025-01-05')).toBe(true) | |
| }) | |
| }) | |