import { makeRecurrenceString } from "@/features/Events/EventPreview/utils/makeRecurrenceString"; import { RepetitionObject } from "@/features/Events/EventsTypes"; describe("makeRecurrenceString", () => { const mockT = jest.fn((key: string, params?: any) => { if (params) { if (key === "eventPreview.everyInterval") { return `Every ${params.interval} ${params.unit}`; } if (key === "eventPreview.recurrenceOnDays") { return `on ${params.days}`; } if (key === "eventPreview.forOccurrences") { return `for ${params.count} times`; } if (key === "eventPreview.until") { return `until ${params.date}`; } } const translations: Record = { "event.repeat.frequency.days": "days", "event.repeat.frequency.weeks": "weeks", "event.repeat.frequency.months": "months", "event.repeat.frequency.years": "years", "eventPreview.onDays.MO": "Monday", "eventPreview.onDays.TU": "Tuesday", "eventPreview.onDays.WE": "Wednesday", "eventPreview.onDays.TH": "Thursday", "eventPreview.onDays.FR": "Friday", "eventPreview.onDays.SA": "Saturday", "eventPreview.onDays.SU": "Sunday", locale: "en-US", }; return translations[key] || key; }); const startText = "Repeats"; beforeEach(() => { mockT.mockClear(); }); it("formats string for interval === 1 when enableStrForOneTimeInterval is true", () => { const repetition: RepetitionObject = { freq: "daily", interval: 1 }; const result = makeRecurrenceString({ repetition, t: mockT, startText, enableStrForOneTimeInterval: true, }); expect(result).toBe("Repeats, days"); }); it("formats string when interval is undefined", () => { const repetition: RepetitionObject = { freq: "daily" }; const result = makeRecurrenceString({ repetition, t: mockT, startText, enableStrForOneTimeInterval: true, }); expect(result).toBe("Repeats, days"); }); it("formats string for interval > 1", () => { const repetition: RepetitionObject = { freq: "weekly", interval: 2 }; const result = makeRecurrenceString({ repetition, t: mockT, startText }); expect(result).toBe("Repeats, Every 2 weeks"); expect(mockT).toHaveBeenCalledWith("eventPreview.everyInterval", { interval: 2, unit: "weeks", }); }); it("formats string with specific days and sorts them according to WEEK_DAYS order", () => { const repetition: RepetitionObject = { freq: "weekly", interval: 1, byday: ["WE", "MO", "FR"], }; const result = makeRecurrenceString({ repetition, t: mockT, startText }); // Expected order: MO, WE, FR expect(result).toBe("Repeats, on Monday, Wednesday, Friday"); }); it("formats string with occurrences count", () => { const repetition: RepetitionObject = { freq: "daily", interval: 1, occurrences: 5, }; const result = makeRecurrenceString({ repetition, t: mockT, startText }); expect(result).toBe("Repeats, for 5 times"); }); it("formats string with end date", () => { const endDate = "2025-12-31T00:00:00.000Z"; const repetition: RepetitionObject = { freq: "daily", interval: 1, endDate, }; const result = makeRecurrenceString({ repetition, t: mockT, startText }); const formattedDate = new Date(endDate).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", }); expect(result).toBe(`Repeats, until ${formattedDate}`); }); it("combines multiple properties", () => { const endDate = "2025-12-31T00:00:00.000Z"; const repetition: RepetitionObject = { freq: "monthly", interval: 3, byday: ["TU", "TH"], endDate, }; const result = makeRecurrenceString({ repetition, t: mockT, startText }); const formattedDate = new Date(endDate).toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", }); expect(result).toBe( `Repeats, Every 3 months, on Tuesday, Thursday, until ${formattedDate}` ); }); it("uses custom joinChar when provided", () => { const repetition: RepetitionObject = { freq: "weekly", interval: 2, occurrences: 10, }; const result = makeRecurrenceString({ repetition, t: mockT, startText, joinChar: ";", }); expect(result).toBe("Repeats; Every 2 weeks; for 10 times"); }); });