Files
flynn/src/config/persistence.test.ts
T
2026-02-15 22:03:21 -08:00

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');
});
});