import { beforeEach, describe, expect, test } from 'vitest' import { useRRuleLabel } from '@/stores/rrules' import { useI18n } from '@/i18n' describe('rrules', () => { describe('useRRuleLabel', () => { beforeEach(() => { const { locale } = useI18n() locale.value = 'en' }) test('Returns the rrule string as title attribute', () => { const { attrs } = useRRuleLabel({ freq: 1, interval: 1, byWeekdays: [2] }) expect(attrs.value?.title).toBe('RRULE:FREQ=MONTHLY;BYDAY=WE;INTERVAL=1') }) test('Returns a natural language representation as the label', () => { expect(useRRuleLabel({ freq: 0, count: 1 }).label.value).toBe('once') expect(useRRuleLabel({ freq: 3, interval: 1 }).label.value).toBe('every day') expect(useRRuleLabel({ freq: 2, interval: 1, byWeekdays: [0, 1, 2, 3, 4] }).label.value).toBe( 'every week on business days', ) expect(useRRuleLabel({ freq: 2, interval: 1, byWeekdays: [0] }).label.value).toBe( 'every week on Monday', ) expect(useRRuleLabel({ freq: 2, interval: 2, byWeekdays: [0] }).label.value).toBe( 'every 2 weeks on Monday', ) expect(useRRuleLabel({ freq: 2, interval: 4, byWeekdays: [0] }).label.value).toBe( 'every 4 weeks on Monday', ) expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: 1, byWeekdays: [0] }).label.value, ).toBe('every month on the first Monday') expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: 2, byWeekdays: [0] }).label.value, ).toBe('every month on the second Monday') expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: 3, byWeekdays: [0] }).label.value, ).toBe('every month on the third Monday') expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: 4, byWeekdays: [0] }).label.value, ).toBe('every month on the fourth Monday') expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: 5, byWeekdays: [0] }).label.value, ).toBe('every month on the fifth Monday') expect( useRRuleLabel({ freq: 1, interval: 1, bySetPos: -1, byWeekdays: [0] }).label.value, ).toBe('every month on the last Monday') expect( useRRuleLabel({ freq: 1, interval: 2, bySetPos: 5, byWeekdays: [0] }).label.value, ).toBe('every 2 months on the fifth Monday') expect( useRRuleLabel({ freq: 1, interval: 2, bySetPos: 5, byWeekdays: [0, 1, 2, 3, 4] }).label .value, ).toBe('every 2 months on the fifth business day') expect( useRRuleLabel({ freq: 1, interval: 2, bySetPos: 5, byWeekdays: [3, 4] }).label.value, ).toBe('every 2 months on the fifth Thursday') expect( useRRuleLabel({ freq: 1, interval: 2, bySetPos: -1, byWeekdays: [3, 4] }).label.value, ).toBe('every 2 months on the last Friday') expect(useRRuleLabel({ freq: 2, interval: 1, byWeekdays: [0, 1, 2, 3, 4] }).label.value).toBe( 'every week on business days', ) expect(useRRuleLabel({ freq: 2, interval: 1, byWeekdays: [5, 6] }).label.value).toBe( 'every week on Saturday, and Sunday', ) }) }) })