Skip to content
Snippets Groups Projects
rrules.spec.ts 3.12 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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',
          )
        })
      })
    })