54 lines
2.1 KiB
TypeScript
54 lines
2.1 KiB
TypeScript
import path from 'node:path';
|
|
import { describe, expect, it } from 'vitest';
|
|
import { resolveDaemonResourceRoot, resolveProjectRoot } from '../src/server.js';
|
|
|
|
describe('resolveProjectRoot', () => {
|
|
it('resolves the repository root from the source daemon directory', () => {
|
|
const root = path.resolve(import.meta.dirname, '../../..');
|
|
|
|
expect(resolveProjectRoot(path.join(root, 'apps', 'daemon'))).toBe(root);
|
|
});
|
|
|
|
it('resolves the repository root from the live TypeScript source directory', () => {
|
|
const root = path.resolve(import.meta.dirname, '../../..');
|
|
|
|
expect(resolveProjectRoot(path.join(root, 'apps', 'daemon', 'src'))).toBe(root);
|
|
});
|
|
|
|
it('resolves the repository root from the compiled daemon dist directory', () => {
|
|
const root = path.resolve(import.meta.dirname, '../../..');
|
|
|
|
expect(resolveProjectRoot(path.join(root, 'apps', 'daemon', 'dist'))).toBe(root);
|
|
});
|
|
|
|
it('resolves the repository root from the daemon src directory (tsx entry)', () => {
|
|
const root = path.resolve(import.meta.dirname, '../../..');
|
|
|
|
expect(resolveProjectRoot(path.join(root, 'apps', 'daemon', 'src'))).toBe(root);
|
|
});
|
|
});
|
|
|
|
describe('resolveDaemonResourceRoot', () => {
|
|
it('allows resource roots under an explicit safe base', () => {
|
|
const safeBase = path.resolve(import.meta.dirname, '..', 'fixtures', 'resources');
|
|
const configured = path.join(safeBase, 'packaged');
|
|
|
|
expect(resolveDaemonResourceRoot({ configured, safeBases: [safeBase] })).toBe(configured);
|
|
});
|
|
|
|
it('allows a resource root equal to an explicit safe base', () => {
|
|
const safeBase = path.resolve(import.meta.dirname, '..', 'fixtures', 'resources');
|
|
|
|
expect(resolveDaemonResourceRoot({ configured: safeBase, safeBases: [safeBase] })).toBe(safeBase);
|
|
});
|
|
|
|
it('rejects resource roots outside the safe bases', () => {
|
|
const safeBase = path.resolve(import.meta.dirname, '..', 'fixtures', 'resources');
|
|
const configured = path.resolve(import.meta.dirname, '..', 'fixtures-other', 'resources');
|
|
|
|
expect(() => resolveDaemonResourceRoot({ configured, safeBases: [safeBase] })).toThrow(
|
|
/OD_RESOURCE_ROOT must be under/,
|
|
);
|
|
});
|
|
});
|