Files
openchamber/packages/web/server/lib/opencode/routes-directory.test.js
T

46 lines
1.7 KiB
JavaScript

import { describe, expect, it, vi } from 'vitest';
import express from 'express';
import request from 'supertest';
import { registerOpenCodeRoutes } from './routes.js';
const createApp = (overrides = {}) => {
const app = express();
app.use(express.json());
const dependencies = {
fsPromises: { mkdir: vi.fn(async () => undefined) },
validateDirectoryPath: vi.fn(async (directory) => ({ ok: true, directory })),
readSettingsFromDisk: vi.fn(async () => ({ projects: [] })),
sanitizeProjects: (projects) => projects,
persistSettings: vi.fn(async (settings) => settings),
...overrides,
};
registerOpenCodeRoutes(app, dependencies);
return { app, dependencies };
};
describe('OpenCode project directory route', () => {
it('creates and activates a requested project outside the active workspace', async () => {
const { app, dependencies } = createApp();
const response = await request(app)
.post('/api/opencode/directory')
.send({ path: '/projects/testing-one', create: true })
.expect(200);
expect(dependencies.fsPromises.mkdir).toHaveBeenCalledWith('/projects/testing-one', { recursive: true });
expect(dependencies.validateDirectoryPath).toHaveBeenCalledWith('/projects/testing-one');
expect(response.body).toMatchObject({ success: true, path: '/projects/testing-one' });
});
it('does not create a directory for the existing activation flow', async () => {
const { app, dependencies } = createApp();
await request(app)
.post('/api/opencode/directory')
.send({ path: '/projects/existing' })
.expect(200);
expect(dependencies.fsPromises.mkdir).not.toHaveBeenCalled();
});
});