UNPKG

alfred-chrono-notes

Version:

Alfred Workflow for easy access to your Obsidian Periodic Notes

129 lines (128 loc) 5.97 kB
import fs from 'fs'; import { DateTime } from 'luxon'; import { ChronoNote, Interval, Ordinal } from './ChronoNote.js'; import { FileProvider } from '../File/FileProvider.js'; jest.mock('fs'); describe('ChronoNote', () => { const readFileSyncMock = fs.readFileSync; let fileProvider = {}; const opts = { locale: 'en-US' }; beforeEach(() => { fileProvider = new FileProvider(); }); test('fileProvider should be defined', () => { expect(fileProvider).toBeDefined(); }); it('should create a ChronoNote based on given ChronoType', () => { const expectedChronoType = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const note = new ChronoNote(expectedChronoType, fileProvider); expect(note.getInterval()).toEqual(expectedChronoType.interval); expect(note.getOrdinal()).toEqual(expectedChronoType.ordinal); }); it('should create a ChronoNote with the default date as now', () => { const expectedWeekYear = DateTime.now().localWeekYear; const expectedChronoType = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const note = new ChronoNote(expectedChronoType, fileProvider); expect(note.getDate().localWeekYear).toEqual(expectedWeekYear); }); describe('getTemplate', () => { it('should return the template content for the given file path', () => { // Setup const expectedTemplateContent = 'template content'; const expectedChronoType = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const note = new ChronoNote(expectedChronoType, fileProvider); readFileSyncMock.mockReturnValue(expectedTemplateContent); // Execute const actualResult = note.getTemplate('template file path'); // Verify expect(actualResult).toEqual(expectedTemplateContent); }); }); describe('formatDate', () => { it('should format a datetime when date token is valid', () => { // Setup const testFormatToken = 'yyyy-MM-dd cccc'; const note = new ChronoNote({ interval: Interval.Daily, ordinal: Ordinal.Current }, fileProvider); // Execute const actualResult = note.formatDate(testFormatToken); // Verify expect(actualResult).toEqual(DateTime.now().toFormat(testFormatToken)); }); }); describe('formatDayDate', () => { const chronoTypeInput = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const cases = [ [DateTime.local(2024, 1, 1, opts), '2024-01-01 Monday'], [DateTime.local(2024, 1, 7, opts), '2024-01-07 Sunday'], [DateTime.local(2024, 1, 27, opts), '2024-01-27 Saturday'], [DateTime.local(2024, 1, 29, opts), '2024-01-29 Monday'], [DateTime.local(2024, 2, 4, opts), '2024-02-04 Sunday'], [DateTime.local(2024, 2, 29, opts), '2024-02-29 Thursday'], [DateTime.local(2024, 3, 1, opts), '2024-03-01 Friday'], [DateTime.local(2024, 3, 30, opts), '2024-03-30 Saturday'], [DateTime.local(2024, 3, 31, opts), '2024-03-31 Sunday'], [DateTime.local(2024, 12, 22, opts), '2024-12-22 Sunday'], [DateTime.local(2024, 12, 28, opts), '2024-12-28 Saturday'], ]; test.each(cases)('given %p DateTime, expect %p date string', (givenDate, expectedResult) => { const chronoNote = new ChronoNote(chronoTypeInput, fileProvider, givenDate); const result = chronoNote.formatDayDate(); expect(result).toEqual(expectedResult); }); }); describe('formatWeekDate', () => { const cases = [ [DateTime.local(2024, 1, 1, opts), '2024-W01'], [DateTime.local(2024, 2, 4, opts), '2024-W06'], [DateTime.local(2024, 12, 22, opts), '2024-W52'], [DateTime.local(2025, 2, 28, opts), '2025-W09'], [DateTime.local(2020, 2, 29, opts), '2020-W09'], [DateTime.local(2024, 3, 30, opts), '2024-W13'], ]; test.each(cases)('given %p DateTime, expect %p formatted week date string', (givenDate, expectedResult) => { const chronoTypeInput = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const chronoNote = new ChronoNote(chronoTypeInput, fileProvider, givenDate); const result = chronoNote.formatWeekDate(); expect(result).toEqual(expectedResult); }); }); describe('getWeekNumber', () => { const cases = [ [DateTime.local(2024, 1, 1, opts), 'Monday', 1], [DateTime.local(2024, 1, 7, opts), 'Sunday', 2], [DateTime.local(2024, 1, 27, opts), 'Saturday', 4], [DateTime.local(2024, 1, 29, opts), 'Monday', 5], [DateTime.local(2024, 2, 4, opts), 'Sunday', 6], [DateTime.local(2024, 2, 29, opts), 'Thursday', 9], [DateTime.local(2024, 3, 1, opts), 'Friday', 9], [DateTime.local(2024, 3, 30, opts), 'Saturday', 13], [DateTime.local(2024, 3, 31, opts), 'Sunday', 14], [DateTime.local(2024, 12, 22, opts), 'Sunday', 52], [DateTime.local(2024, 12, 28, opts), 'Saturday', 52], ]; test.each(cases)('given %p date, on %p, expect %p week number', (givenDate, _, expectedResult) => { const chronoTypeInput = { interval: Interval.Daily, ordinal: Ordinal.Current, }; const chronoNote = new ChronoNote(chronoTypeInput, fileProvider, givenDate); const result = chronoNote.getWeekNumber(); expect(result).toEqual(expectedResult); }); }); });