mirror of
https://github.com/bmadcode/BMAD-METHOD.git
synced 2025-12-17 17:55:34 +00:00
134 lines
3.6 KiB
JavaScript
134 lines
3.6 KiB
JavaScript
|
|
/**
|
||
|
|
* Unit Tests for Agent Schema Edge Cases
|
||
|
|
*
|
||
|
|
* Tests internal functions to achieve 100% branch coverage
|
||
|
|
*/
|
||
|
|
|
||
|
|
const { validateAgentFile } = require('../tools/schema/agent.js');
|
||
|
|
|
||
|
|
console.log('Running edge case unit tests...\n');
|
||
|
|
|
||
|
|
let passed = 0;
|
||
|
|
let failed = 0;
|
||
|
|
|
||
|
|
// Test 1: Path with malformed module structure (no slash after module name)
|
||
|
|
// This tests line 213: slashIndex === -1
|
||
|
|
console.log('Test 1: Malformed module path (no slash after module name)');
|
||
|
|
try {
|
||
|
|
const result = validateAgentFile('src/modules/bmm', {
|
||
|
|
agent: {
|
||
|
|
metadata: {
|
||
|
|
id: 'test',
|
||
|
|
name: 'Test',
|
||
|
|
title: 'Test',
|
||
|
|
icon: '🧪',
|
||
|
|
},
|
||
|
|
persona: {
|
||
|
|
role: 'Test',
|
||
|
|
identity: 'Test',
|
||
|
|
communication_style: 'Test',
|
||
|
|
principles: ['Test'],
|
||
|
|
},
|
||
|
|
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
if (result.success) {
|
||
|
|
console.log('✗ Should have failed - missing module field');
|
||
|
|
failed++;
|
||
|
|
} else {
|
||
|
|
console.log('✓ Correctly handled malformed path (treated as core agent)');
|
||
|
|
passed++;
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.log('✗ Unexpected error:', error.message);
|
||
|
|
failed++;
|
||
|
|
}
|
||
|
|
console.log('');
|
||
|
|
|
||
|
|
// Test 2: Module option with empty string
|
||
|
|
// This tests line 222: trimmed.length > 0
|
||
|
|
console.log('Test 2: Module agent with empty string in module field');
|
||
|
|
try {
|
||
|
|
const result = validateAgentFile('src/modules/bmm/agents/test.agent.yaml', {
|
||
|
|
agent: {
|
||
|
|
metadata: {
|
||
|
|
id: 'test',
|
||
|
|
name: 'Test',
|
||
|
|
title: 'Test',
|
||
|
|
icon: '🧪',
|
||
|
|
module: ' ', // Empty after trimming
|
||
|
|
},
|
||
|
|
persona: {
|
||
|
|
role: 'Test',
|
||
|
|
identity: 'Test',
|
||
|
|
communication_style: 'Test',
|
||
|
|
principles: ['Test'],
|
||
|
|
},
|
||
|
|
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
if (result.success) {
|
||
|
|
console.log('✗ Should have failed - empty module string');
|
||
|
|
failed++;
|
||
|
|
} else {
|
||
|
|
console.log('✓ Correctly rejected empty module string');
|
||
|
|
passed++;
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.log('✗ Unexpected error:', error.message);
|
||
|
|
failed++;
|
||
|
|
}
|
||
|
|
console.log('');
|
||
|
|
|
||
|
|
// Test 3: Core agent path (src/core/agents/...) - tests the !filePath.startsWith(marker) branch
|
||
|
|
console.log('Test 3: Core agent path returns null for module');
|
||
|
|
try {
|
||
|
|
const result = validateAgentFile('src/core/agents/test.agent.yaml', {
|
||
|
|
agent: {
|
||
|
|
metadata: {
|
||
|
|
id: 'test',
|
||
|
|
name: 'Test',
|
||
|
|
title: 'Test',
|
||
|
|
icon: '🧪',
|
||
|
|
// No module field - correct for core agent
|
||
|
|
},
|
||
|
|
persona: {
|
||
|
|
role: 'Test',
|
||
|
|
identity: 'Test',
|
||
|
|
communication_style: 'Test',
|
||
|
|
principles: ['Test'],
|
||
|
|
},
|
||
|
|
menu: [{ trigger: 'help', description: 'Help', action: 'help' }],
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
if (result.success) {
|
||
|
|
console.log('✓ Core agent validated correctly (no module required)');
|
||
|
|
passed++;
|
||
|
|
} else {
|
||
|
|
console.log('✗ Core agent should pass without module field');
|
||
|
|
failed++;
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.log('✗ Unexpected error:', error.message);
|
||
|
|
failed++;
|
||
|
|
}
|
||
|
|
console.log('');
|
||
|
|
|
||
|
|
// Summary
|
||
|
|
console.log('═══════════════════════════════════════');
|
||
|
|
console.log('Edge Case Unit Test Results:');
|
||
|
|
console.log(` Passed: ${passed}`);
|
||
|
|
console.log(` Failed: ${failed}`);
|
||
|
|
console.log('═══════════════════════════════════════\n');
|
||
|
|
|
||
|
|
if (failed === 0) {
|
||
|
|
console.log('✨ All edge case tests passed!\n');
|
||
|
|
process.exit(0);
|
||
|
|
} else {
|
||
|
|
console.log('❌ Some edge case tests failed\n');
|
||
|
|
process.exit(1);
|
||
|
|
}
|