Files
EJClaw/src/settings-store-moa.test.ts
2026-04-30 01:31:05 +09:00

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