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

61 lines
2.4 KiB
JavaScript
Raw Normal View History

import { describe, expect, it } from 'bun:test';
import express from 'express';
import request from 'supertest';
import { createStaticRoutesRuntime } from './static-routes-runtime.js';
const createRuntime = () => createStaticRoutesRuntime({
fs: { existsSync: () => false },
path: { join: (...parts) => parts.join('/'), resolve: (value) => value, sep: '/' },
process: { env: {} },
__dirname: '/server',
express,
resolveProjectDirectory: () => '',
buildOpenCodeUrl: () => '',
getOpenCodeAuthHeaders: () => ({}),
readSettingsFromDiskMigrated: async () => ({}),
normalizePwaAppName: (value) => value,
normalizePwaOrientation: (value) => value,
});
describe('static routes runtime', () => {
it('returns API-only HTML fallback for browser UI routes', async () => {
const app = express();
createRuntime().registerApiOnlyFallbackRoutes(app);
const response = await request(app).get('/sessions/abc').set('Accept', 'text/html');
expect(response.status).toBe(200);
expect(response.text).toContain('OpenChamber is running in headless mode');
expect(response.text).toContain('Open it from the OpenChamber desktop or mobile app');
expect(response.text).toContain('openchamber connect-url --help');
expect(response.text).toContain('Copy command');
});
it('returns API-only info JSON for JSON clients', async () => {
const app = express();
createRuntime().registerApiOnlyFallbackRoutes(app);
const response = await request(app).get('/sessions/abc').set('Accept', 'application/json');
expect(response.status).toBe(200);
expect(response.body).toEqual({
ok: true,
mode: 'api-only',
message: 'OpenChamber is running in API-only mode',
});
});
it('does not intercept API, auth, or health routes in API-only mode', async () => {
const app = express();
createRuntime().registerApiOnlyFallbackRoutes(app);
const api = await request(app).get('/api/version');
const auth = await request(app).get('/auth/session');
const health = await request(app).get('/health');
expect(api.body).not.toEqual({ ok: true, mode: 'api-only', message: 'OpenChamber is running in API-only mode' });
expect(auth.body).not.toEqual({ ok: true, mode: 'api-only', message: 'OpenChamber is running in API-only mode' });
expect(health.body).not.toEqual({ ok: true, mode: 'api-only', message: 'OpenChamber is running in API-only mode' });
});
});