BMAD-METHOD/test/test-workflow-path-regex.js

89 lines
3.2 KiB
JavaScript

/**
* Workflow Path Regex Tests
*
* Tests that the source and install workflow path regexes in ModuleManager
* extract the correct capture groups (module name and workflow sub-path).
*
* Usage: node test/test-workflow-path-regex.js
*/
// ANSI colors
const colors = {
reset: '\u001B[0m',
green: '\u001B[32m',
red: '\u001B[31m',
cyan: '\u001B[36m',
dim: '\u001B[2m',
};
let passed = 0;
let failed = 0;
function assert(condition, testName, errorMessage = '') {
if (condition) {
console.log(`${colors.green}${colors.reset} ${testName}`);
passed++;
} else {
console.log(`${colors.red}${colors.reset} ${testName}`);
if (errorMessage) {
console.log(` ${colors.dim}${errorMessage}${colors.reset}`);
}
failed++;
}
}
// ---------------------------------------------------------------------------
// These regexes are extracted from ModuleManager.vendorWorkflowDependencies()
// in tools/cli/installers/lib/modules/manager.js
// ---------------------------------------------------------------------------
// Source regex (line ~1081) — uses non-capturing group for _bmad
const SOURCE_REGEX = /\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/;
// Install regex (line ~1091) — uses non-capturing group for _bmad,
// consistent with source regex
const INSTALL_REGEX = /\{project-root\}\/(?:_bmad)\/([^/]+)\/workflows\/(.+)/;
// ---------------------------------------------------------------------------
// Test data
// ---------------------------------------------------------------------------
const sourcePath = '{project-root}/_bmad/bmm/workflows/4-implementation/bmad-create-story/workflow.md';
const installPath = '{project-root}/_bmad/bmgd/workflows/4-production/create-story/workflow.md';
console.log(`\n${colors.cyan}Workflow Path Regex Tests${colors.reset}\n`);
// --- Source regex tests (these should pass — source regex is correct) ---
const sourceMatch = sourcePath.match(SOURCE_REGEX);
assert(sourceMatch !== null, 'Source regex matches source path');
assert(
sourceMatch && sourceMatch[1] === 'bmm',
'Source regex group [1] is the module name',
`Expected "bmm", got "${sourceMatch && sourceMatch[1]}"`,
);
assert(
sourceMatch && sourceMatch[2] === '4-implementation/bmad-create-story/workflow.md',
'Source regex group [2] is the workflow sub-path',
`Expected "4-implementation/bmad-create-story/workflow.md", got "${sourceMatch && sourceMatch[2]}"`,
);
// --- Install regex tests (group [2] returns module name, not sub-path) ---
const installMatch = installPath.match(INSTALL_REGEX);
assert(installMatch !== null, 'Install regex matches install path');
// This is the critical test: installMatch[2] should be the workflow sub-path,
// because the code uses it as `installWorkflowSubPath`.
// With the bug, installMatch[2] is "bmgd" (module name) instead of the sub-path.
assert(
installMatch && installMatch[2] === '4-production/create-story/workflow.md',
'Install regex group [2] is the workflow sub-path (used as installWorkflowSubPath)',
`Expected "4-production/create-story/workflow.md", got "${installMatch && installMatch[2]}"`,
);
// --- Summary ---
console.log(`\n${passed} passed, ${failed} failed\n`);
process.exit(failed > 0 ? 1 : 0);