test-workflow-seed-sync.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env node
  2. import assert from 'assert';
  3. import fs from 'fs';
  4. import os from 'os';
  5. import path from 'path';
  6. import { ensureProjectProfile } from './src/server/helpers.js';
  7. function makeTempProject() {
  8. const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'vlcode-workflow-sync-'));
  9. fs.mkdirSync(path.join(dir, '.vl-code', 'workflows'), { recursive: true });
  10. fs.mkdirSync(path.join(dir, 'Apps'), { recursive: true });
  11. fs.writeFileSync(path.join(dir, 'Apps', 'Demo.vx'), '// VL_VERSION:3.5\n');
  12. return dir;
  13. }
  14. function main() {
  15. const seedWorkflowDir = path.join(process.cwd(), 'public', 'seed-workflows');
  16. const projectDir = makeTempProject();
  17. const staleWorkflow = {
  18. version: '3.16',
  19. name: 'AddPage',
  20. registry: {
  21. vars: ['$updatedMeta(OBJECT)', '$newSection(OBJECT)'],
  22. docs: {
  23. '1': 'VL 3.5 Syntax Rules',
  24. '80': 'Agent-800-Section: Section business logic + UI',
  25. '90': 'Agent-900-App: App entry + routing',
  26. },
  27. },
  28. steps: [
  29. {
  30. id: 'LLM_050_UpdateApp',
  31. in: { docs: ['1', '90'] },
  32. out: {},
  33. },
  34. ],
  35. };
  36. const targetPath = path.join(projectDir, '.vl-code', 'workflows', 'add-page.json');
  37. fs.writeFileSync(targetPath, JSON.stringify(staleWorkflow, null, 2), 'utf-8');
  38. ensureProjectProfile(projectDir, seedWorkflowDir);
  39. const refreshedWorkflow = JSON.parse(fs.readFileSync(targetPath, 'utf-8'));
  40. const updateAppStep = refreshedWorkflow.steps.find((step) => step.id === 'LLM_050_UpdateApp');
  41. assert(
  42. refreshedWorkflow.registry.vars.some((entry) => String(entry).includes('$targetAppFilePath')),
  43. 'should refresh stale add-page workflow with targetAppFilePath support'
  44. );
  45. assert(
  46. updateAppStep?.in?.readFiles?.length > 0,
  47. 'should refresh stale add-page workflow with app readFiles input'
  48. );
  49. assert(
  50. updateAppStep?.out && Object.keys(updateAppStep.out).length > 0,
  51. 'should refresh stale add-page workflow with app output mapping'
  52. );
  53. fs.rmSync(projectDir, { recursive: true, force: true });
  54. console.log('\n── Workflow Seed Sync ──');
  55. console.log('PASS test-workflow-seed-sync.js');
  56. }
  57. main();