test-workspace-create-project-route.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #!/usr/bin/env node
  2. import assert from 'assert';
  3. import express from 'express';
  4. import fs from 'fs';
  5. import os from 'os';
  6. import path from 'path';
  7. import { setupWorkspaceRoutes } from './src/server/routes/workspace.js';
  8. import { VL_CODE_HOME } from './src/server/helpers.js';
  9. const WORKSPACES_FILE = path.join(VL_CODE_HOME, 'workspaces.json');
  10. async function main() {
  11. const parentDir = fs.mkdtempSync(path.join(os.tmpdir(), 'vlcode-route-parent-'));
  12. const backup = fs.existsSync(WORKSPACES_FILE)
  13. ? fs.readFileSync(WORKSPACES_FILE, 'utf8')
  14. : null;
  15. const app = express();
  16. app.use(express.json({ limit: '10mb' }));
  17. const fakeServer = {
  18. config: {
  19. emptyWorkspaceDir: path.join(os.tmpdir(), 'vlcode-empty-window-route-test'),
  20. },
  21. _openTabs: [],
  22. _workspaceStates: new Map(),
  23. _saveOpenTabs() {},
  24. broadcast() {},
  25. hasSelectedWorkspace() { return false; },
  26. getVisibleWorkDir() { return ''; },
  27. async switchWorkspace() { return { ok: true }; },
  28. };
  29. setupWorkspaceRoutes(app, fakeServer);
  30. const httpServer = app.listen(0);
  31. await new Promise((resolve, reject) => {
  32. httpServer.once('listening', resolve);
  33. httpServer.once('error', reject);
  34. });
  35. const { port } = httpServer.address();
  36. try {
  37. const response = await fetch(`http://127.0.0.1:${port}/api/workspaces/create-project`, {
  38. method: 'POST',
  39. headers: { 'Content-Type': 'application/json' },
  40. body: JSON.stringify({
  41. projectName: 'RouteCreateProjectTest',
  42. parentDir,
  43. }),
  44. });
  45. const body = await response.json();
  46. assert.equal(response.status, 200);
  47. assert.equal(body.ok, true);
  48. const projectDir = path.join(parentDir, 'RouteCreateProjectTest');
  49. assert.ok(fs.existsSync(path.join(projectDir, '.vl-code', 'project.json')));
  50. assert.ok(fs.existsSync(path.join(projectDir, '.vl-code', 'workflows', 'parallel-codegen.json')));
  51. assert.ok(fs.existsSync(path.join(projectDir, 'Theme', 'Theme.vth')));
  52. } finally {
  53. await new Promise((resolve) => httpServer.close(resolve));
  54. fs.rmSync(parentDir, { recursive: true, force: true });
  55. if (backup === null) fs.rmSync(WORKSPACES_FILE, { force: true });
  56. else fs.writeFileSync(WORKSPACES_FILE, backup, 'utf8');
  57. }
  58. console.log('\n── Workspace Create Project Route ──');
  59. console.log('PASS test-workspace-create-project-route.js');
  60. }
  61. main().catch((err) => {
  62. console.error(err);
  63. process.exit(1);
  64. });