Files
qwen-code/integration-tests/todo_write.test.ts

70 lines
2.0 KiB
TypeScript

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { describe, it, expect } from 'vitest';
import { TestRig, printDebugInfo, validateModelOutput } from './test-helper.js';
describe('todo_write', () => {
it('should be able to create and manage a todo list', async () => {
const rig = new TestRig();
await rig.setup('should be able to create and manage a todo list');
const prompt = `Please create a todo list with these three simple tasks:
1. Buy milk
2. Walk the dog
3. Read a book
Use the todo_write tool to create this list.`;
const result = await rig.run(prompt);
const foundToolCall = await rig.waitForToolCall('todo_write');
// Add debugging information
if (!foundToolCall) {
printDebugInfo(rig, result);
}
expect(
foundToolCall,
'Expected to find a todo_write tool call',
).toBeTruthy();
// Validate model output - will throw if no output
validateModelOutput(result, null, 'Todo write test');
// Check that the tool was called with the right parameters
const toolLogs = rig.readToolLogs();
const todoWriteCalls = toolLogs.filter(
(t) => t.toolRequest.name === 'todo_write',
);
expect(todoWriteCalls.length).toBeGreaterThan(0);
// Parse the arguments to verify they contain our tasks
const todoArgs = JSON.parse(todoWriteCalls[0].toolRequest.args);
expect(todoArgs.todos).toBeDefined();
expect(Array.isArray(todoArgs.todos)).toBe(true);
expect(todoArgs.todos.length).toBeGreaterThanOrEqual(3);
// Check that all todos have the correct structure
for (const todo of todoArgs.todos) {
expect(todo.id).toBeDefined();
expect(todo.content).toBeDefined();
expect(['pending', 'in_progress', 'completed', 'cancelled']).toContain(
todo.status,
);
}
// Log success info if verbose
if (process.env['VERBOSE'] === 'true') {
console.log('Todo list created successfully');
console.log(`Created ${todoArgs.todos.length} todos`);
}
});
});