73 lines
2.8 KiB
TypeScript
73 lines
2.8 KiB
TypeScript
import * as path from 'node:path';
|
|
import * as os from 'node:os';
|
|
import { resolveDataDir } from '../../src/comm/data-dir';
|
|
import { pUploadPath, pCachePath, pPluginPath, pSqlitePath, pWorkspacePath } from '../../src/comm/path';
|
|
import { resolveAgentSessionTreeConfig } from '../../src/modules/netaclaw/session-tree/factory';
|
|
|
|
describe('resolveDataDir', () => {
|
|
it('prefers validated data.dir from config', () => {
|
|
const configDir = path.join(os.tmpdir(), 'neta-config-data');
|
|
const dir = resolveDataDir({
|
|
isPkg: true,
|
|
execDir: 'C:/Program Files/Neta',
|
|
config: { data: { dir: configDir } },
|
|
cwd: 'C:/Users/demo/Desktop',
|
|
});
|
|
|
|
expect(path.normalize(dir)).toBe(path.normalize(configDir));
|
|
});
|
|
|
|
it('uses NETA_DATA_DIR as second priority', () => {
|
|
const original = process.env.NETA_DATA_DIR;
|
|
const envDir = path.join(os.tmpdir(), 'neta-env-data');
|
|
process.env.NETA_DATA_DIR = envDir;
|
|
try {
|
|
const dir = resolveDataDir({
|
|
isPkg: true,
|
|
execDir: 'C:/Program Files/Neta',
|
|
cwd: 'C:/Users/demo/Desktop',
|
|
});
|
|
expect(path.normalize(dir)).toBe(path.normalize(envDir));
|
|
} finally {
|
|
if (original === undefined) delete process.env.NETA_DATA_DIR;
|
|
else process.env.NETA_DATA_DIR = original;
|
|
}
|
|
});
|
|
|
|
it('falls back to cwd/dist in development mode', () => {
|
|
const dir = resolveDataDir({
|
|
isPkg: false,
|
|
execDir: 'C:/Program Files/Neta',
|
|
cwd: 'C:/Users/demo/project',
|
|
});
|
|
expect(path.normalize(dir)).toBe(path.normalize('C:/Users/demo/project/dist'));
|
|
});
|
|
});
|
|
|
|
describe('installer-aware writable paths', () => {
|
|
let dataDir: string;
|
|
|
|
beforeEach(() => {
|
|
dataDir = path.join(os.tmpdir(), `neta-data-dir-test-${Date.now()}-${Math.random().toString(16).slice(2)}`);
|
|
process.env.NETA_DATA_DIR = dataDir;
|
|
});
|
|
|
|
afterEach(() => {
|
|
delete process.env.NETA_DATA_DIR;
|
|
});
|
|
|
|
it('maps comm/path writable directories to data.dir and creates directory roots', () => {
|
|
expect(path.normalize(pUploadPath())).toBe(path.normalize(path.join(dataDir, 'uploads')));
|
|
expect(path.normalize(pWorkspacePath())).toBe(path.normalize(path.join(dataDir, 'workspace')));
|
|
expect(path.normalize(pCachePath())).toBe(path.normalize(path.join(dataDir, 'cache')));
|
|
expect(path.normalize(pPluginPath())).toBe(path.normalize(path.join(dataDir, 'plugins')));
|
|
expect(path.normalize(pSqlitePath())).toBe(path.normalize(path.join(dataDir, 'cool.sqlite')));
|
|
});
|
|
|
|
it('maps session tree root to data.dir/sessions', () => {
|
|
const sessionDataDir = path.join(os.tmpdir(), 'neta-session-data');
|
|
const resolved = resolveAgentSessionTreeConfig(undefined, { backend: 'file', dataDir: sessionDataDir });
|
|
expect(path.normalize(resolved.file!.rootDir)).toBe(path.normalize(path.join(sessionDataDir, 'sessions')));
|
|
});
|
|
});
|