73 lines
2.8 KiB
TypeScript
Raw Normal View History

2026-05-20 21:39:12 +08:00
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')));
});
});