From 4d3116cfca1ca58d545a58e2c4d757223579d459 Mon Sep 17 00:00:00 2001 From: Quorafind Date: Wed, 17 Dec 2025 14:52:19 +0800 Subject: [PATCH] style: format test files with consistent spacing Apply consistent code formatting to integration test files --- .../EnhancedTimeParsingIntegration.test.ts | 217 ++++++++++++------ .../IcsEventTimeHandling.integration.test.ts | 52 +++-- 2 files changed, 183 insertions(+), 86 deletions(-) diff --git a/src/__tests__/EnhancedTimeParsingIntegration.test.ts b/src/__tests__/EnhancedTimeParsingIntegration.test.ts index 902800f3..742a9b0f 100644 --- a/src/__tests__/EnhancedTimeParsingIntegration.test.ts +++ b/src/__tests__/EnhancedTimeParsingIntegration.test.ts @@ -1,6 +1,6 @@ /** * Enhanced Time Parsing Integration Tests - * + * * Tests for cross-component functionality including: * - End-to-end flow from task creation to timeline display * - Time component preservation across task updates @@ -8,7 +8,10 @@ * - ICS event integration with enhanced time parsing */ -import { TimeParsingService, DEFAULT_TIME_PARSING_CONFIG } from "../services/time-parsing-service"; +import { + TimeParsingService, + DEFAULT_TIME_PARSING_CONFIG, +} from "../services/time-parsing-service"; import { FileTaskManagerImpl } from "../managers/file-task-manager"; import { IcsManager } from "../managers/ics-manager"; import { IcsParser } from "../parsers/ics-parser"; @@ -69,7 +72,10 @@ interface MockBasesEntry { }; lazyEvalCache: Record; properties: Record; - getValue(prop: { type: "property" | "file" | "formula"; name: string }): any; + getValue(prop: { + type: "property" | "file" | "formula"; + name: string; + }): any; updateProperty(key: string, value: any): void; getFormulaValue(formula: string): any; getPropertyKeys(): string[]; @@ -118,7 +124,11 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; timeParsingService = new TimeParsingService(enhancedConfig); - fileTaskManager = new FileTaskManagerImpl(mockApp, undefined, timeParsingService); + fileTaskManager = new FileTaskManagerImpl( + mockApp, + undefined, + timeParsingService, + ); migrationService = new TaskMigrationService(); // Initialize ICS manager @@ -145,7 +155,12 @@ describe("Enhanced Time Parsing Integration Tests", () => { defaultEventColor: "#3498db", }; - icsManager = new IcsManager(icsConfig, mockPluginSettings, undefined, timeParsingService); + icsManager = new IcsManager( + icsConfig, + mockPluginSettings, + undefined, + timeParsingService, + ); }); describe("End-to-End Flow: Task Creation to Timeline Display", () => { @@ -178,7 +193,8 @@ describe("Enhanced Time Parsing Integration Tests", () => { due: "2025-08-25", }, getValue: jest.fn((prop: any) => { - if (prop.name === "title") return "Team meeting 14:00-16:00 tomorrow"; + if (prop.name === "title") + return "Team meeting 14:00-16:00 tomorrow"; if (prop.name === "status") return " "; if (prop.name === "completed") return false; if (prop.name === "due") return "2025-08-25"; @@ -186,18 +202,25 @@ describe("Enhanced Time Parsing Integration Tests", () => { }), updateProperty: jest.fn(), getFormulaValue: jest.fn(), - getPropertyKeys: jest.fn(() => ["title", "status", "completed", "due"]), + getPropertyKeys: jest.fn(() => [ + "title", + "status", + "completed", + "due", + ]), }; // Step 2: Convert to file task (simulates task parsing) const fileTask = fileTaskManager.entryToFileTask(mockEntry); - + // Verify task has enhanced metadata expect(fileTask.content).toBe("Team meeting 14:00-16:00 tomorrow"); expect(fileTask.metadata.timeComponents).toBeDefined(); expect(fileTask.metadata.timeComponents?.startTime?.hour).toBe(14); expect(fileTask.metadata.timeComponents?.endTime?.hour).toBe(16); - expect(fileTask.metadata.enhancedDates?.startDateTime).toBeDefined(); + expect( + fileTask.metadata.enhancedDates?.startDateTime, + ).toBeDefined(); expect(fileTask.metadata.enhancedDates?.endDateTime).toBeDefined(); // Step 3: Create timeline event from task (simulates timeline view processing) @@ -207,7 +230,8 @@ describe("Enhanced Time Parsing Integration Tests", () => { date: new Date(fileTask.metadata.dueDate!), task: fileTask as any, timeInfo: { - primaryTime: fileTask.metadata.enhancedDates!.startDateTime!, + primaryTime: + fileTask.metadata.enhancedDates!.startDateTime!, endTime: fileTask.metadata.enhancedDates!.endDateTime, isRange: true, timeComponent: fileTask.metadata.timeComponents!.startTime, @@ -233,8 +257,10 @@ describe("Enhanced Time Parsing Integration Tests", () => { }, }; - const events = [timelineEvent, anotherEvent].sort((a, b) => - a.timeInfo!.primaryTime.getTime() - b.timeInfo!.primaryTime.getTime() + const events = [timelineEvent, anotherEvent].sort( + (a, b) => + a.timeInfo!.primaryTime.getTime() - + b.timeInfo!.primaryTime.getTime(), ); expect(events[0].title).toBe("Earlier meeting"); @@ -244,10 +270,12 @@ describe("Enhanced Time Parsing Integration Tests", () => { test("should handle inline task creation with time components", () => { // Simulate inline task parsing const inlineTaskText = "- [ ] Call client at 3:30 PM 📅 2025-08-25"; - + // Parse time components from inline task - const parseResult = timeParsingService.parseTimeExpressions(inlineTaskText) as EnhancedParsedTimeResult; - + const parseResult = timeParsingService.parseTimeExpressions( + inlineTaskText, + ) as EnhancedParsedTimeResult; + expect(parseResult.timeComponents.scheduledTime).toBeDefined(); expect(parseResult.timeComponents.scheduledTime?.hour).toBe(15); expect(parseResult.timeComponents.scheduledTime?.minute).toBe(30); @@ -273,9 +301,15 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; // Verify enhanced metadata - expect(inlineTask.metadata.timeComponents?.scheduledTime?.hour).toBe(15); - expect(inlineTask.metadata.enhancedDates?.dueDateTime?.getHours()).toBe(15); - expect(inlineTask.metadata.enhancedDates?.dueDateTime?.getMinutes()).toBe(30); + expect( + inlineTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(15); + expect( + inlineTask.metadata.enhancedDates?.dueDateTime?.getHours(), + ).toBe(15); + expect( + inlineTask.metadata.enhancedDates?.dueDateTime?.getMinutes(), + ).toBe(30); // Create timeline event const timelineEvent: MockTimelineEvent = { @@ -284,9 +318,11 @@ describe("Enhanced Time Parsing Integration Tests", () => { date: new Date(inlineTask.metadata.dueDate!), task: inlineTask, timeInfo: { - primaryTime: inlineTask.metadata.enhancedDates!.dueDateTime!, + primaryTime: + inlineTask.metadata.enhancedDates!.dueDateTime!, isRange: false, - timeComponent: inlineTask.metadata.timeComponents!.scheduledTime, + timeComponent: + inlineTask.metadata.timeComponents!.scheduledTime, displayFormat: "date-time", }, }; @@ -325,20 +361,27 @@ describe("Enhanced Time Parsing Integration Tests", () => { completed: false, }, getValue: jest.fn((prop: any) => { - if (prop.name === "title") return "Doctor appointment at 2:00 PM"; + if (prop.name === "title") + return "Doctor appointment at 2:00 PM"; if (prop.name === "status") return " "; if (prop.name === "completed") return false; return undefined; }), updateProperty: jest.fn(), getFormulaValue: jest.fn(), - getPropertyKeys: jest.fn(() => ["title", "status", "completed"]), + getPropertyKeys: jest.fn(() => [ + "title", + "status", + "completed", + ]), }; const originalTask = fileTaskManager.entryToFileTask(mockEntry); - + // Verify original time component - expect(originalTask.metadata.timeComponents?.scheduledTime?.hour).toBe(14); + expect( + originalTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(14); // Update task content with new time await fileTaskManager.updateFileTask(originalTask, { @@ -346,8 +389,12 @@ describe("Enhanced Time Parsing Integration Tests", () => { }); // Verify time component was updated - expect(originalTask.metadata.timeComponents?.scheduledTime?.hour).toBe(16); - expect(originalTask.metadata.timeComponents?.scheduledTime?.minute).toBe(30); + expect( + originalTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(16); + expect( + originalTask.metadata.timeComponents?.scheduledTime?.minute, + ).toBe(30); }); test("should preserve time components when completing tasks", () => { @@ -396,10 +443,18 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; // Verify time components are preserved - expect(completedTask.metadata.timeComponents?.startTime?.hour).toBe(9); - expect(completedTask.metadata.timeComponents?.endTime?.hour).toBe(17); - expect(completedTask.metadata.enhancedDates?.startDateTime?.getHours()).toBe(9); - expect(completedTask.metadata.enhancedDates?.endDateTime?.getHours()).toBe(17); + expect(completedTask.metadata.timeComponents?.startTime?.hour).toBe( + 9, + ); + expect(completedTask.metadata.timeComponents?.endTime?.hour).toBe( + 17, + ); + expect( + completedTask.metadata.enhancedDates?.startDateTime?.getHours(), + ).toBe(9); + expect( + completedTask.metadata.enhancedDates?.endDateTime?.getHours(), + ).toBe(17); }); test("should handle task status changes while preserving time data", () => { @@ -446,9 +501,15 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; // Verify time components preserved through all status changes - expect(inProgressTask.metadata.timeComponents?.scheduledTime?.hour).toBe(15); - expect(completedTask.metadata.timeComponents?.scheduledTime?.hour).toBe(15); - expect(completedTask.metadata.enhancedDates?.scheduledDateTime?.getHours()).toBe(15); + expect( + inProgressTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(15); + expect( + completedTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(15); + expect( + completedTask.metadata.enhancedDates?.scheduledDateTime?.getHours(), + ).toBe(15); }); }); @@ -471,13 +532,18 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; // Migrate to enhanced metadata - const migratedTask = migrationService.migrateTaskToEnhanced(legacyTask); + const migratedTask = + migrationService.migrateTaskToEnhanced(legacyTask); // Should preserve all original data expect(migratedTask.id).toBe(legacyTask.id); expect(migratedTask.content).toBe(legacyTask.content); - expect(migratedTask.metadata.dueDate).toBe(legacyTask.metadata.dueDate); - expect(migratedTask.metadata.tags).toEqual(legacyTask.metadata.tags); + expect(migratedTask.metadata.dueDate).toBe( + legacyTask.metadata.dueDate, + ); + expect(migratedTask.metadata.tags).toEqual( + legacyTask.metadata.tags, + ); // Should not have time components (no time in content) expect(migratedTask.metadata.timeComponents).toBeUndefined(); @@ -502,19 +568,28 @@ describe("Enhanced Time Parsing Integration Tests", () => { }; // Migrate to enhanced metadata - const migratedTask = migrationService.migrateTaskToEnhanced(legacyTaskWithTime); + const migratedTask = + migrationService.migrateTaskToEnhanced(legacyTaskWithTime); // Should preserve original data expect(migratedTask.content).toBe(legacyTaskWithTime.content); - expect(migratedTask.metadata.dueDate).toBe(legacyTaskWithTime.metadata.dueDate); + expect(migratedTask.metadata.dueDate).toBe( + legacyTaskWithTime.metadata.dueDate, + ); // Should add time components from parsing expect(migratedTask.metadata.timeComponents).toBeDefined(); - expect(migratedTask.metadata.timeComponents?.scheduledTime?.hour).toBe(14); - expect(migratedTask.metadata.timeComponents?.scheduledTime?.minute).toBe(30); + expect( + migratedTask.metadata.timeComponents?.scheduledTime?.hour, + ).toBe(14); + expect( + migratedTask.metadata.timeComponents?.scheduledTime?.minute, + ).toBe(30); // Should create enhanced datetime - expect(migratedTask.metadata.enhancedDates?.scheduledDateTime).toBeDefined(); + expect( + migratedTask.metadata.enhancedDates?.scheduledDateTime, + ).toBeDefined(); }); test("should handle mixed task collections (with and without time)", () => { @@ -542,15 +617,17 @@ describe("Enhanced Time Parsing Integration Tests", () => { ]; // Migrate all tasks - const migratedTasks = mixedTasks.map(task => - migrationService.migrateTaskToEnhanced(task) + const migratedTasks = mixedTasks.map((task) => + migrationService.migrateTaskToEnhanced(task), ); // First task should not have time components expect(migratedTasks[0].metadata.timeComponents).toBeUndefined(); // Second task should have time components - expect(migratedTasks[1].metadata.timeComponents?.scheduledTime?.hour).toBe(15); + expect( + migratedTasks[1].metadata.timeComponents?.scheduledTime?.hour, + ).toBe(15); // Both should be valid enhanced tasks expect(migratedTasks[0].id).toBe("no-time-task"); @@ -574,9 +651,9 @@ STATUS:CONFIRMED END:VEVENT END:VCALENDAR`; - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; const parseResult = IcsParser.parse(icsData, testSource); - + expect(parseResult.events).toHaveLength(1); // Convert to tasks @@ -616,10 +693,10 @@ STATUS:CONFIRMED END:VEVENT END:VCALENDAR`; - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; const parseResult = IcsParser.parse(icsData, testSource); const tasks = icsManager.convertEventsToTasks(parseResult.events); - + const task = tasks[0]; const metadata = task.metadata as EnhancedStandardTaskMetadata; @@ -629,7 +706,9 @@ END:VCALENDAR`; // Should have time components parsed from description expect(metadata.timeComponents).toBeDefined(); // Should find the first time mentioned (9:00 AM) - const timeComponent = metadata.timeComponents?.startTime || metadata.timeComponents?.scheduledTime; + const timeComponent = + metadata.timeComponents?.startTime || + metadata.timeComponents?.scheduledTime; expect(timeComponent?.hour).toBe(9); }); @@ -647,16 +726,18 @@ STATUS:CONFIRMED END:VEVENT END:VCALENDAR`; - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; const parseResult = IcsParser.parse(icsData, testSource); const tasks = icsManager.convertEventsToTasks(parseResult.events); - + const task = tasks[0]; const metadata = task.metadata as EnhancedStandardTaskMetadata; // Should parse time from location field expect(metadata.timeComponents).toBeDefined(); - const timeComponent = metadata.timeComponents?.scheduledTime || metadata.timeComponents?.dueTime; + const timeComponent = + metadata.timeComponents?.scheduledTime || + metadata.timeComponents?.dueTime; expect(timeComponent?.hour).toBe(19); // 7:30 PM expect(timeComponent?.minute).toBe(30); }); @@ -675,10 +756,10 @@ STATUS:CONFIRMED END:VEVENT END:VCALENDAR`; - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; const parseResult = IcsParser.parse(icsData, testSource); const tasks = icsManager.convertEventsToTasks(parseResult.events); - + const task = tasks[0]; // Should maintain all ICS properties @@ -703,7 +784,7 @@ END:VCALENDAR`; test("should handle large numbers of tasks efficiently", () => { const startTime = Date.now(); const taskCount = 100; - + // Create many tasks with time information const tasks: Task[] = []; for (let i = 0; i < taskCount; i++) { @@ -721,8 +802,8 @@ END:VCALENDAR`; } // Migrate all tasks - const migratedTasks = tasks.map(task => - migrationService.migrateTaskToEnhanced(task) + const migratedTasks = tasks.map((task) => + migrationService.migrateTaskToEnhanced(task), ); const endTime = Date.now(); @@ -733,7 +814,9 @@ END:VCALENDAR`; expect(migratedTasks).toHaveLength(taskCount); // Verify some tasks have time components - const tasksWithTime = migratedTasks.filter(t => t.metadata.timeComponents); + const tasksWithTime = migratedTasks.filter( + (t) => t.metadata.timeComponents, + ); expect(tasksWithTime.length).toBeGreaterThan(0); }); @@ -774,17 +857,23 @@ END:VCALENDAR`; // Should not throw errors during migration expect(() => { - const migratedTasks = problematicTasks.map(task => - migrationService.migrateTaskToEnhanced(task) + const migratedTasks = problematicTasks.map((task) => + migrationService.migrateTaskToEnhanced(task), ); // All tasks should be migrated (even if without time components) expect(migratedTasks).toHaveLength(3); // Tasks with invalid time should not have time components - expect(migratedTasks[0].metadata.timeComponents).toBeUndefined(); - expect(migratedTasks[1].metadata.timeComponents).toBeUndefined(); - expect(migratedTasks[2].metadata.timeComponents).toBeUndefined(); + expect( + migratedTasks[0].metadata.timeComponents, + ).toBeUndefined(); + expect( + migratedTasks[1].metadata.timeComponents, + ).toBeUndefined(); + expect( + migratedTasks[2].metadata.timeComponents, + ).toBeUndefined(); // But should preserve other metadata expect(migratedTasks[0].id).toBe("invalid-time-1"); @@ -793,4 +882,4 @@ END:VCALENDAR`; }).not.toThrow(); }); }); -}); \ No newline at end of file +}); diff --git a/src/__tests__/IcsEventTimeHandling.integration.test.ts b/src/__tests__/IcsEventTimeHandling.integration.test.ts index 3978d9e0..ad2307e1 100644 --- a/src/__tests__/IcsEventTimeHandling.integration.test.ts +++ b/src/__tests__/IcsEventTimeHandling.integration.test.ts @@ -55,7 +55,7 @@ describe("ICS Event Time Handling Integration", () => { beforeEach(() => { timeParsingService = new TimeParsingService(mockTimeParsingConfig); - + const testSource: IcsSource = { id: "integration-test", name: "Integration Test Calendar", @@ -79,7 +79,12 @@ describe("ICS Event Time Handling Integration", () => { defaultEventColor: "#3498db", }; - icsManager = new IcsManager(mockConfig, mockPluginSettings, undefined, timeParsingService); + icsManager = new IcsManager( + mockConfig, + mockPluginSettings, + undefined, + timeParsingService, + ); }); test("end-to-end ICS event with time components conversion", () => { @@ -117,9 +122,9 @@ END:VEVENT END:VCALENDAR`; // Parse ICS data - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; const parseResult = IcsParser.parse(icsData, testSource); - + expect(parseResult.events).toHaveLength(3); expect(parseResult.errors).toHaveLength(0); @@ -128,10 +133,11 @@ END:VCALENDAR`; expect(tasks).toHaveLength(3); // Test 1: Timed event with ICS time components - const timedTask = tasks.find(t => t.content === "Team Standup"); + const timedTask = tasks.find((t) => t.content === "Team Standup"); expect(timedTask).toBeDefined(); - - const timedMetadata = timedTask!.metadata as EnhancedStandardTaskMetadata; + + const timedMetadata = timedTask! + .metadata as EnhancedStandardTaskMetadata; expect(timedMetadata.timeComponents).toBeDefined(); expect(timedMetadata.timeComponents?.startTime).toBeDefined(); expect(timedMetadata.timeComponents?.endTime).toBeDefined(); @@ -140,19 +146,21 @@ END:VCALENDAR`; expect(timedMetadata.enhancedDates?.endDateTime).toBeDefined(); // Test 2: All-day event with time parsing from description - const workshopTask = tasks.find(t => t.content === "Workshop Day"); + const workshopTask = tasks.find((t) => t.content === "Workshop Day"); expect(workshopTask).toBeDefined(); - - const workshopMetadata = workshopTask!.metadata as EnhancedStandardTaskMetadata; + + const workshopMetadata = workshopTask! + .metadata as EnhancedStandardTaskMetadata; // Should have time components parsed from description expect(workshopMetadata.timeComponents).toBeDefined(); expect(workshopMetadata.enhancedDates).toBeDefined(); // Test 3: Event with time in location field - const dinnerTask = tasks.find(t => t.content === "Team Dinner"); + const dinnerTask = tasks.find((t) => t.content === "Team Dinner"); expect(dinnerTask).toBeDefined(); - - const dinnerMetadata = dinnerTask!.metadata as EnhancedStandardTaskMetadata; + + const dinnerMetadata = dinnerTask! + .metadata as EnhancedStandardTaskMetadata; // Should have time components parsed from location expect(dinnerMetadata.timeComponents).toBeDefined(); expect(dinnerMetadata.enhancedDates).toBeDefined(); @@ -171,8 +179,8 @@ END:VCALENDAR`; }); test("ICS event time preservation with holiday detection", () => { - const testSource = icsManager.getConfig().sources[0]; - + const testSource = icsManager.getConfig().sources[0] as IcsSource; + // Add holiday configuration to source testSource.holidayConfig = { enabled: true, @@ -206,17 +214,17 @@ END:VCALENDAR`; // Test holiday detection directly on events const events = parseResult.events; const eventsWithHoliday = icsManager.convertEventsWithHolidayToTasks( - events.map(event => ({ + events.map((event) => ({ ...event, isHoliday: true, // Simulate holiday detection showInForecast: true, - })) + })), ); expect(eventsWithHoliday).toHaveLength(1); const task = eventsWithHoliday[0]; const metadata = task.metadata as EnhancedStandardTaskMetadata; - + // Should still have time components despite holiday processing expect(metadata.timeComponents).toBeDefined(); expect(metadata.timeComponents?.startTime).toBeDefined(); @@ -225,7 +233,7 @@ END:VCALENDAR`; }); test("error handling in time component extraction", () => { - const testSource = icsManager.getConfig().sources[0]; + const testSource = icsManager.getConfig().sources[0] as IcsSource; // ICS data with potential parsing issues const icsData = `BEGIN:VCALENDAR @@ -248,14 +256,14 @@ END:VCALENDAR`; expect(() => { const tasks = icsManager.convertEventsToTasks(parseResult.events); expect(tasks).toHaveLength(1); - + const task = tasks[0]; expect(task.content).toBe("Problematic Event"); - + // Should handle gracefully - may or may not have time components // but should not crash const metadata = task.metadata as EnhancedStandardTaskMetadata; expect(metadata).toBeDefined(); }).not.toThrow(); }); -}); \ No newline at end of file +});