diff --git a/tests/unit/task-finder.test.js b/tests/unit/task-finder.test.js index 30b723c3..78348d8f 100644 --- a/tests/unit/task-finder.test.js +++ b/tests/unit/task-finder.test.js @@ -24,14 +24,17 @@ describe('Task Finder', () => { }); test('should find tasks when JSON contains string IDs (normalized to numbers)', () => { - // Simulate tasks loaded from JSON with string IDs + // Simulate tasks loaded from JSON with string IDs and mixed subtask notations const tasksWithStringIds = [ { id: "1", title: 'First Task' }, { id: "2", title: 'Second Task', subtasks: [ { id: "1", title: 'Subtask One' }, - { id: "2", title: 'Subtask Two' } + { id: "2.2", title: 'Subtask Two (with dotted notation)' } // Testing dotted notation ]}, - { id: "5", title: 'Fifth Task' } + { id: "5", title: 'Fifth Task', subtasks: [ + { id: "5.1", title: 'Subtask with dotted ID' }, // Should normalize to 1 + { id: "3", title: 'Subtask with simple ID' } // Should stay as 3 + ]} ]; // The readJSON function should normalize these IDs to numbers @@ -40,7 +43,13 @@ describe('Task Finder', () => { task.id = parseInt(task.id, 10); if (task.subtasks) { task.subtasks.forEach(subtask => { - subtask.id = parseInt(subtask.id, 10); + // Handle dotted notation like "5.1" -> extract the subtask part + if (typeof subtask.id === 'string' && subtask.id.includes('.')) { + const parts = subtask.id.split('.'); + subtask.id = parseInt(parts[parts.length - 1], 10); + } else { + subtask.id = parseInt(subtask.id, 10); + } }); } }); @@ -56,12 +65,30 @@ describe('Task Finder', () => { expect(result2.task).toBeDefined(); expect(result2.task.id).toBe(5); - // Test finding subtasks + // Test finding subtasks with normalized IDs const result3 = findTaskById(tasksWithStringIds, '2.1'); expect(result3.task).toBeDefined(); expect(result3.task.id).toBe(1); expect(result3.task.title).toBe('Subtask One'); expect(result3.task.isSubtask).toBe(true); + + // Test subtask that was originally "2.2" (should be normalized to 2) + const result4 = findTaskById(tasksWithStringIds, '2.2'); + expect(result4.task).toBeDefined(); + expect(result4.task.id).toBe(2); + expect(result4.task.title).toBe('Subtask Two (with dotted notation)'); + + // Test subtask that was originally "5.1" (should be normalized to 1) + const result5 = findTaskById(tasksWithStringIds, '5.1'); + expect(result5.task).toBeDefined(); + expect(result5.task.id).toBe(1); + expect(result5.task.title).toBe('Subtask with dotted ID'); + + // Test subtask that was originally "3" (should stay as 3) + const result6 = findTaskById(tasksWithStringIds, '5.3'); + expect(result6.task).toBeDefined(); + expect(result6.task.id).toBe(3); + expect(result6.task.title).toBe('Subtask with simple ID'); }); test('should find a subtask using dot notation', () => {