BMAD-METHOD/test/unit-test-schema.js

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);
}