53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import { describe, it, expect, afterEach } from 'vitest';
|
|
import { mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { tmpdir } from 'os';
|
|
import { persistConfig } from './persistence.js';
|
|
import { configSchema } from './schema.js';
|
|
|
|
const testRoots: string[] = [];
|
|
|
|
afterEach(() => {
|
|
while (testRoots.length > 0) {
|
|
const dir = testRoots.pop();
|
|
if (!dir) {continue;}
|
|
try {
|
|
rmSync(dir, { recursive: true, force: true });
|
|
} catch {}
|
|
}
|
|
});
|
|
|
|
function makeConfig() {
|
|
return configSchema.parse({
|
|
telegram: { bot_token: 'test-token', allowed_chat_ids: [1] },
|
|
models: { default: { provider: 'anthropic', model: 'claude-3' } },
|
|
hooks: { confirm: ['shell.exec'], log: [], silent: [] },
|
|
});
|
|
}
|
|
|
|
describe('persistConfig', () => {
|
|
it('writes config to target path', () => {
|
|
const dir = mkdtempSync(join(tmpdir(), 'flynn-config-persist-'));
|
|
testRoots.push(dir);
|
|
const configPath = join(dir, 'config.yaml');
|
|
|
|
persistConfig(configPath, makeConfig());
|
|
const written = readFileSync(configPath, 'utf-8');
|
|
expect(written).toContain('telegram:');
|
|
expect(written).toContain('models:');
|
|
});
|
|
|
|
it('creates .bak when overwriting existing config', () => {
|
|
const dir = mkdtempSync(join(tmpdir(), 'flynn-config-persist-'));
|
|
testRoots.push(dir);
|
|
const configPath = join(dir, 'config.yaml');
|
|
|
|
writeFileSync(configPath, 'legacy: true\n', 'utf-8');
|
|
persistConfig(configPath, makeConfig());
|
|
|
|
const backupPath = `${configPath}.bak`;
|
|
expect(existsSync(backupPath)).toBe(true);
|
|
expect(readFileSync(backupPath, 'utf-8')).toContain('legacy: true');
|
|
});
|
|
});
|