mirror of
https://github.com/kennethnym/aris.git
synced 2026-06-14 11:31:17 +01:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
|
|
import type { Reminder } from "./types.ts"
|
|
|
|
import { expandReminderOriginalDueAts, findReminderOccurrenceIndex } from "./recurrence.ts"
|
|
import { ReminderPriority, ReminderRecurrenceFrequency, ReminderWeekday } from "./types.ts"
|
|
|
|
describe("recurrence", () => {
|
|
test("deduplicates weekly weekdays before applying recurrence count", () => {
|
|
const reminder = weeklyReminder({
|
|
recurrence: {
|
|
frequency: ReminderRecurrenceFrequency.Weekly,
|
|
interval: 1,
|
|
weekdays: [ReminderWeekday.Monday, ReminderWeekday.Monday, ReminderWeekday.Wednesday],
|
|
count: 3,
|
|
},
|
|
})
|
|
|
|
const originalDueAts = expandReminderOriginalDueAts(
|
|
reminder,
|
|
new Date("2026-06-08T00:00:00Z"),
|
|
new Date("2026-06-22T00:00:00Z"),
|
|
)
|
|
|
|
expect(originalDueAts.map(toIsoString)).toEqual([
|
|
"2026-06-08T09:00:00.000Z",
|
|
"2026-06-10T09:00:00.000Z",
|
|
"2026-06-15T09:00:00.000Z",
|
|
])
|
|
})
|
|
|
|
test("deduplicates weekly weekdays before calculating occurrence indexes", () => {
|
|
const reminder = weeklyReminder({
|
|
recurrence: {
|
|
frequency: ReminderRecurrenceFrequency.Weekly,
|
|
interval: 1,
|
|
weekdays: [ReminderWeekday.Monday, ReminderWeekday.Monday, ReminderWeekday.Wednesday],
|
|
},
|
|
})
|
|
|
|
expect(findReminderOccurrenceIndex(reminder, new Date("2026-06-10T09:00:00Z"))).toBe(1)
|
|
expect(findReminderOccurrenceIndex(reminder, new Date("2026-06-15T09:00:00Z"))).toBe(2)
|
|
})
|
|
})
|
|
|
|
function weeklyReminder(overrides: Partial<Reminder> = {}): Reminder {
|
|
const now = new Date("2026-06-01T00:00:00Z")
|
|
return {
|
|
id: "r1",
|
|
title: "Take vitamins",
|
|
notes: null,
|
|
dueAt: new Date("2026-06-08T09:00:00Z"),
|
|
timeZone: "UTC",
|
|
recurrence: {
|
|
frequency: ReminderRecurrenceFrequency.Weekly,
|
|
interval: 1,
|
|
weekdays: [ReminderWeekday.Monday],
|
|
},
|
|
priority: ReminderPriority.Normal,
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
...overrides,
|
|
}
|
|
}
|
|
|
|
function toIsoString(date: Date): string {
|
|
return date.toISOString()
|
|
}
|