From 0e3e8233e3de102950b0cecb044efc06e8edc003 Mon Sep 17 00:00:00 2001 From: Jin <22962980+JYC333@users.noreply.github.com> Date: Thu, 3 Apr 2025 01:02:05 +0200 Subject: [PATCH] =?UTF-8?q?test:=20=F0=9F=92=8D=20add=20journal=20unit=20t?= =?UTF-8?q?est?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/services/date_notes.spec.ts | 113 ++++++++++++++++++++++++++++++++ src/services/date_notes.ts | 5 +- 2 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/services/date_notes.spec.ts diff --git a/src/services/date_notes.spec.ts b/src/services/date_notes.spec.ts new file mode 100644 index 000000000..e280ab712 --- /dev/null +++ b/src/services/date_notes.spec.ts @@ -0,0 +1,113 @@ +import { describe, it, expect, vi, beforeAll } from 'vitest'; +import dayjs from "dayjs"; +import type BNote from "../becca/entities/bnote.js"; +import dateNotesService from "./date_notes.js"; +import i18next from "i18next"; + +// Mock becca_loader +vi.mock("../becca/becca_loader.js", () => ({ + default: { + load: vi.fn(), + loaded: Promise.resolve() + } +})); + +// Mock SQL init +vi.mock("../services/sql.js", () => ({ + default: { + dbReady: Promise.resolve(), + transactional: vi.fn((callback) => callback()) + } +})); + + +// Mock BNote +const mockRootNote = { + getOwnedLabelValue: (key: string) => { + const patterns: Record = { + "yearPattern": "{year}", + "quarterPattern": "Quarter {quarterNumber}", + "monthPattern": "{monthNumberPadded} - {month}", + "weekPattern": "Week {weekNumber}", + "datePattern": "{dateNumberPadded} - {weekDay}" + }; + return patterns[key] || null; + } +} as unknown as BNote; + +describe("date_notes", () => { + beforeAll(async () => { + await i18next.init({ + lng: "en", + resources: { + en: { + translation: { + "months.march": "March", + "weekdays.saturday": "Saturday" + } + } + } + }); + }); + + describe("getJournalNoteTitle", () => { + const testDate = dayjs("2025-03-15"); // Saturday + + it("should generate year note title", () => { + const title = dateNotesService.getJournalNoteTitle(mockRootNote, "year", testDate, 2025); + expect(title).toBe("2025"); + }); + + it("should generate quarter note title", () => { + const title = dateNotesService.getJournalNoteTitle(mockRootNote, "quarter", testDate, 1); + expect(title).toBe("Quarter 1"); + }); + + it("should generate month note title", () => { + const title = dateNotesService.getJournalNoteTitle(mockRootNote, "month", testDate, 3); + expect(title).toBe("03 - March"); + }); + + it("should generate week note title", () => { + const title = dateNotesService.getJournalNoteTitle(mockRootNote, "week", testDate, 11); + expect(title).toBe("Week 11"); + }); + + it("should generate day note title", () => { + const title = dateNotesService.getJournalNoteTitle(mockRootNote, "day", testDate, 15); + expect(title).toBe("15 - Saturday"); + }); + + it("should respect custom patterns", () => { + const customRootNote = { + getOwnedLabelValue: (key: string) => { + const patterns: Record = { + "yearPattern": "{year}", + "quarterPattern": "{quarterNumber} {shortQuarter}", + "monthPattern": "{isoMonth} {monthNumber} {monthNumberPadded} {month} {shortMonth3} {shortMonth4}", + "weekPattern": "{weekNumber} {weekNumberPadded} {shortWeek} {shortWeek3}", + "datePattern": "{isoDate} {dateNumber} {dateNumberPadded} {ordinal} {weekDay} {weekDay3} {weekDay2}" + }; + return patterns[key] || null; + } + } as unknown as BNote; + + const testDate = dayjs("2025-03-01"); // Saturday + + const yearTitle = dateNotesService.getJournalNoteTitle(customRootNote, "year", testDate, 2025); + expect(yearTitle).toBe("2025"); + + const quarterTitle = dateNotesService.getJournalNoteTitle(customRootNote, "quarter", testDate, 1); + expect(quarterTitle).toBe("1 Q1"); + + const monthTitle = dateNotesService.getJournalNoteTitle(customRootNote, "month", testDate, 3); + expect(monthTitle).toBe("2025-03 3 03 March Mar Marc"); + + const weekTitle = dateNotesService.getJournalNoteTitle(customRootNote, "week", testDate, 9); + expect(weekTitle).toBe("9 09 W9 W09"); + + const dayTitle = dateNotesService.getJournalNoteTitle(customRootNote, "day", testDate, 1); + expect(dayTitle).toBe("2025-03-01 1 01 1st Saturday Sat Sa"); + }); + }); +}); diff --git a/src/services/date_notes.ts b/src/services/date_notes.ts index ad4c81135..55119f761 100644 --- a/src/services/date_notes.ts +++ b/src/services/date_notes.ts @@ -453,5 +453,8 @@ export default { getWeekNote, getWeekFirstDayNote, getDayNote, - getTodayNote + getTodayNote, + getJournalNoteTitle, + getWeekStartDate, + getWeekNumberStr };