mirror of
https://github.com/eyaltoledano/claude-task-master.git
synced 2025-11-12 08:04:31 +00:00
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Ben Vargas <ben@example.com>
131 lines
4.1 KiB
JavaScript
131 lines
4.1 KiB
JavaScript
import { PromptManager } from '../../../scripts/modules/prompt-manager.js';
|
|
import { ExpandTaskResponseSchema } from '../../../src/schemas/expand-task.js';
|
|
import { SubtaskSchema } from '../../../src/schemas/base-schemas.js';
|
|
|
|
describe('expand-task prompt template', () => {
|
|
let promptManager;
|
|
|
|
beforeEach(() => {
|
|
promptManager = new PromptManager();
|
|
});
|
|
|
|
const testTask = {
|
|
id: 1,
|
|
title: 'Setup AWS Infrastructure',
|
|
description: 'Provision core AWS services',
|
|
details: 'Create VPC, subnets, and security groups'
|
|
};
|
|
|
|
const baseParams = {
|
|
task: testTask,
|
|
subtaskCount: 3,
|
|
nextSubtaskId: 1,
|
|
additionalContext: '',
|
|
complexityReasoningContext: '',
|
|
gatheredContext: '',
|
|
useResearch: false,
|
|
expansionPrompt: undefined
|
|
};
|
|
|
|
test('default variant includes task context', () => {
|
|
const { userPrompt } = promptManager.loadPrompt(
|
|
'expand-task',
|
|
baseParams,
|
|
'default'
|
|
);
|
|
|
|
expect(userPrompt).toContain(testTask.title);
|
|
expect(userPrompt).toContain(testTask.description);
|
|
expect(userPrompt).toContain(testTask.details);
|
|
expect(userPrompt).toContain('Task ID: 1');
|
|
});
|
|
|
|
test('research variant includes task context', () => {
|
|
const params = { ...baseParams, useResearch: true };
|
|
const { userPrompt } = promptManager.loadPrompt(
|
|
'expand-task',
|
|
params,
|
|
'research'
|
|
);
|
|
|
|
expect(userPrompt).toContain(testTask.title);
|
|
expect(userPrompt).toContain(testTask.description);
|
|
expect(userPrompt).toContain(testTask.details);
|
|
expect(userPrompt).toContain('Parent Task:');
|
|
expect(userPrompt).toContain('ID: 1');
|
|
});
|
|
|
|
test('complexity-report variant includes task context', () => {
|
|
const params = {
|
|
...baseParams,
|
|
expansionPrompt: 'Focus on security best practices',
|
|
complexityReasoningContext: 'High complexity due to security requirements'
|
|
};
|
|
const { userPrompt } = promptManager.loadPrompt(
|
|
'expand-task',
|
|
params,
|
|
'complexity-report'
|
|
);
|
|
|
|
// The fix ensures task context is included
|
|
expect(userPrompt).toContain('Parent Task:');
|
|
expect(userPrompt).toContain(`ID: ${testTask.id}`);
|
|
expect(userPrompt).toContain(`Title: ${testTask.title}`);
|
|
expect(userPrompt).toContain(`Description: ${testTask.description}`);
|
|
expect(userPrompt).toContain(`Current details: ${testTask.details}`);
|
|
|
|
// Also includes the expansion prompt
|
|
expect(userPrompt).toContain(params.expansionPrompt);
|
|
expect(userPrompt).toContain(params.complexityReasoningContext);
|
|
});
|
|
|
|
test('ExpandTaskResponseSchema defines required subtask fields', () => {
|
|
// Test the schema definition directly instead of weak substring matching
|
|
const schema = ExpandTaskResponseSchema;
|
|
const subtasksSchema = schema.shape.subtasks;
|
|
const subtaskSchema = subtasksSchema.element;
|
|
|
|
// Verify the schema has the required fields
|
|
expect(subtaskSchema).toBe(SubtaskSchema);
|
|
expect(SubtaskSchema.shape).toHaveProperty('id');
|
|
expect(SubtaskSchema.shape).toHaveProperty('title');
|
|
expect(SubtaskSchema.shape).toHaveProperty('description');
|
|
expect(SubtaskSchema.shape).toHaveProperty('dependencies');
|
|
expect(SubtaskSchema.shape).toHaveProperty('details');
|
|
expect(SubtaskSchema.shape).toHaveProperty('status');
|
|
expect(SubtaskSchema.shape).toHaveProperty('testStrategy');
|
|
});
|
|
|
|
test('complexity-report variant fails without task context regression test', () => {
|
|
// This test ensures we don't regress to the old behavior where
|
|
// complexity-report variant only used expansionPrompt without task context
|
|
const params = {
|
|
...baseParams,
|
|
expansionPrompt: 'Generic expansion prompt'
|
|
};
|
|
|
|
const { userPrompt } = promptManager.loadPrompt(
|
|
'expand-task',
|
|
params,
|
|
'complexity-report'
|
|
);
|
|
|
|
// Count occurrences of task-specific content
|
|
const titleOccurrences = (
|
|
userPrompt.match(new RegExp(testTask.title, 'g')) || []
|
|
).length;
|
|
const descriptionOccurrences = (
|
|
userPrompt.match(new RegExp(testTask.description, 'g')) || []
|
|
).length;
|
|
|
|
// Should have at least one occurrence of title and description
|
|
expect(titleOccurrences).toBeGreaterThanOrEqual(1);
|
|
expect(descriptionOccurrences).toBeGreaterThanOrEqual(1);
|
|
|
|
// Should not be ONLY the expansion prompt
|
|
expect(userPrompt.length).toBeGreaterThan(
|
|
params.expansionPrompt.length + 100
|
|
);
|
|
});
|
|
});
|