import updateTaskById from '../../../scripts/modules/task-manager/update-task-by-id.js'; import { readJSON, writeJSON } from '../../../scripts/modules/utils.js'; import fs from 'fs'; import path from 'path'; describe('update-task-by-id with generateObject', () => { const testTasksFile = path.join(process.cwd(), 'test-tasks.json'); beforeEach(() => { // Create a test tasks file const testTasks = { projectName: 'Test Project', tasks: [ { id: 1, title: 'Setup project structure', description: 'Initialize the project with proper folder structure', status: 'pending', dependencies: [], priority: 'high', details: 'Create folders for src, tests, docs', testStrategy: 'Manual verification' }, { id: 2, title: 'Implement authentication', description: 'Add user authentication with JWT tokens', status: 'pending', dependencies: [1], priority: 'high', details: null, testStrategy: null } ] }; fs.writeFileSync(testTasksFile, JSON.stringify(testTasks, null, 2)); }); afterEach(() => { // Clean up test files if (fs.existsSync(testTasksFile)) { fs.unlinkSync(testTasksFile); } }); test('should update task with structured data', async () => { const result = await updateTaskById({ file: testTasksFile, prompt: 'Update the description to include OAuth2 support', id: 2 }); expect(result).toHaveProperty('updatedTask'); const { updatedTask } = result; // Verify the task structure expect(updatedTask).toHaveProperty('id', 2); expect(updatedTask).toHaveProperty('title'); expect(updatedTask).toHaveProperty('description'); expect(updatedTask).toHaveProperty('status'); expect(updatedTask).toHaveProperty('dependencies'); expect(updatedTask).toHaveProperty('priority'); // Check that description was updated expect(updatedTask.description.toLowerCase()).toContain('oauth'); // Verify task was written back to file const savedData = JSON.parse(fs.readFileSync(testTasksFile, 'utf8')); const savedTask = savedData.tasks.find((t) => t.id === 2); expect(savedTask.description).toBe(updatedTask.description); }, 30000); // Increase timeout for AI call test('should handle append mode with plain text', async () => { const result = await updateTaskById({ file: testTasksFile, prompt: 'Add information about refresh tokens', id: 2, append: true }); expect(result).toHaveProperty('updatedTask'); const { updatedTask } = result; // Check that details were appended expect(updatedTask.details).toBeTruthy(); expect(updatedTask.details).toContain('