46 lines
1.7 KiB
JavaScript
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();
|
|
});
|
|
});
|