107 lines
3.1 KiB
TypeScript
107 lines
3.1 KiB
TypeScript
import fs from 'node:fs';
|
|
import os from 'node:os';
|
|
import path from 'node:path';
|
|
|
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
|
|
import { getMoaSettings, updateMoaSettings } from './settings-store-moa.js';
|
|
|
|
const originalCwd = process.cwd();
|
|
let tempDir: string | null = null;
|
|
|
|
function writeTempEnv(content: string): string {
|
|
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'ejclaw-moa-settings-'));
|
|
fs.writeFileSync(path.join(tempDir, '.env'), content, { mode: 0o600 });
|
|
process.chdir(tempDir);
|
|
return path.join(tempDir, '.env');
|
|
}
|
|
|
|
afterEach(() => {
|
|
process.chdir(originalCwd);
|
|
if (tempDir) fs.rmSync(tempDir, { recursive: true, force: true });
|
|
tempDir = null;
|
|
});
|
|
|
|
describe('MoA settings store', () => {
|
|
it('reads MoA config without exposing API keys', () => {
|
|
writeTempEnv(
|
|
[
|
|
'MOA_ENABLED=true',
|
|
'MOA_REF_MODELS=kimi,glm',
|
|
'MOA_KIMI_MODEL=kimi-k2.6',
|
|
'MOA_KIMI_BASE_URL=https://api.kimi.com/coding',
|
|
'MOA_KIMI_API_FORMAT=anthropic',
|
|
'MOA_KIMI_API_KEY=sk-kimi-secret',
|
|
'MOA_GLM_MODEL=glm-5.1',
|
|
'MOA_GLM_BASE_URL=https://open.bigmodel.cn/api/anthropic',
|
|
'MOA_GLM_API_FORMAT=anthropic',
|
|
'MOA_GLM_API_KEY=glm-secret',
|
|
'',
|
|
].join('\n'),
|
|
);
|
|
|
|
expect(getMoaSettings()).toMatchObject({
|
|
enabled: true,
|
|
referenceModels: ['kimi', 'glm'],
|
|
models: [
|
|
{
|
|
name: 'kimi',
|
|
enabled: true,
|
|
model: 'kimi-k2.6',
|
|
apiFormat: 'anthropic',
|
|
apiKeyConfigured: true,
|
|
},
|
|
{
|
|
name: 'glm',
|
|
enabled: true,
|
|
model: 'glm-5.1',
|
|
apiFormat: 'anthropic',
|
|
apiKeyConfigured: true,
|
|
},
|
|
],
|
|
});
|
|
expect(JSON.stringify(getMoaSettings())).not.toContain('sk-kimi-secret');
|
|
});
|
|
|
|
it('updates the master toggle, active models, and replacement API keys', () => {
|
|
const envFile = writeTempEnv(
|
|
[
|
|
'MOA_ENABLED=true',
|
|
'MOA_REF_MODELS=kimi,glm',
|
|
'MOA_KIMI_MODEL=kimi-k2.6',
|
|
'MOA_KIMI_BASE_URL=https://api.kimi.com/coding',
|
|
'MOA_KIMI_API_FORMAT=anthropic',
|
|
'MOA_KIMI_API_KEY=old-secret',
|
|
'MOA_GLM_MODEL=glm-5.1',
|
|
'MOA_GLM_BASE_URL=https://open.bigmodel.cn/api/anthropic',
|
|
'MOA_GLM_API_FORMAT=anthropic',
|
|
'MOA_GLM_API_KEY=glm-secret',
|
|
'',
|
|
].join('\n'),
|
|
);
|
|
|
|
const updated = updateMoaSettings({
|
|
enabled: false,
|
|
models: [
|
|
{
|
|
name: 'kimi',
|
|
enabled: false,
|
|
model: 'kimi-k2.7',
|
|
baseUrl: 'https://api.kimi.com/coding',
|
|
apiFormat: 'anthropic',
|
|
apiKey: 'new-secret',
|
|
},
|
|
{ name: 'glm', enabled: true },
|
|
],
|
|
});
|
|
|
|
expect(updated.enabled).toBe(false);
|
|
expect(updated.referenceModels).toEqual(['glm']);
|
|
const content = fs.readFileSync(envFile, 'utf-8');
|
|
expect(content).toContain('MOA_ENABLED=false');
|
|
expect(content).toContain('MOA_REF_MODELS=glm');
|
|
expect(content).toContain('MOA_KIMI_MODEL=kimi-k2.7');
|
|
expect(content).toContain('MOA_KIMI_API_KEY=new-secret');
|
|
});
|
|
});
|