takt/src/__tests__/global-provider-profiles.test.ts

76 lines
2.3 KiB
TypeScript

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdirSync, rmSync, writeFileSync, existsSync } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
import { vi } from 'vitest';
const testHomeDir = join(tmpdir(), `takt-gpp-test-${Date.now()}`);
vi.mock('node:os', async () => {
const actual = await vi.importActual('node:os');
return {
...actual,
homedir: () => testHomeDir,
};
});
const { loadGlobalConfig, saveGlobalConfig, invalidateGlobalConfigCache } = await import('../infra/config/global/globalConfig.js');
const { getGlobalConfigPath } = await import('../infra/config/paths.js');
describe('global provider_profiles', () => {
beforeEach(() => {
invalidateGlobalConfigCache();
mkdirSync(testHomeDir, { recursive: true });
});
afterEach(() => {
if (existsSync(testHomeDir)) {
rmSync(testHomeDir, { recursive: true });
}
});
it('loads provider_profiles from yaml', () => {
const taktDir = join(testHomeDir, '.takt');
mkdirSync(taktDir, { recursive: true });
writeFileSync(
getGlobalConfigPath(),
[
'language: en',
'provider_profiles:',
' codex:',
' default_permission_mode: full',
' movement_permission_overrides:',
' ai_fix: edit',
].join('\n'),
'utf-8',
);
const config = loadGlobalConfig();
expect(config.providerProfiles?.codex?.defaultPermissionMode).toBe('full');
expect(config.providerProfiles?.codex?.movementPermissionOverrides?.ai_fix).toBe('edit');
});
it('saves provider_profiles to yaml', () => {
const taktDir = join(testHomeDir, '.takt');
mkdirSync(taktDir, { recursive: true });
writeFileSync(getGlobalConfigPath(), 'language: en\n', 'utf-8');
const config = loadGlobalConfig();
config.providerProfiles = {
codex: {
defaultPermissionMode: 'full',
movementPermissionOverrides: {
supervise: 'full',
},
},
};
saveGlobalConfig(config);
invalidateGlobalConfigCache();
const reloaded = loadGlobalConfig();
expect(reloaded.providerProfiles?.codex?.defaultPermissionMode).toBe('full');
expect(reloaded.providerProfiles?.codex?.movementPermissionOverrides?.supervise).toBe('full');
});
});