397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
54 lines
2.9 KiB
JavaScript
54 lines
2.9 KiB
JavaScript
// tools/judge-gate-config.test.mjs
|
||
import { describe, it, expect } from 'vitest';
|
||
import { resolveJudgeEnabled, judgeActive, resolveJudgeLlmKey } from './judge-gate-config.mjs';
|
||
|
||
// «Оба строго» (решение владельца 2026-06-12): LLM-ключ судьи — ТОЛЬКО свой
|
||
// ROUTER_JUDGE_LLM_KEY; общий ROUTER_LLM_KEY НЕ фолбэк (разделение счетов).
|
||
describe('resolveJudgeLlmKey (строгий LLM-ключ судьи)', () => {
|
||
it('свой ключ → он; общий не фолбэк; нет → null', () => {
|
||
expect(resolveJudgeLlmKey({ env: { ROUTER_JUDGE_LLM_KEY: 'jk', ROUTER_LLM_KEY: 'common' } })).toBe('jk');
|
||
expect(resolveJudgeLlmKey({ env: { ROUTER_LLM_KEY: 'common' } })).toBe(null);
|
||
expect(resolveJudgeLlmKey({ env: {} })).toBe(null);
|
||
});
|
||
});
|
||
|
||
describe('resolveJudgeEnabled (рубильник владельца)', () => {
|
||
it('флаг =1 → включён', () => {
|
||
expect(resolveJudgeEnabled({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1' } })).toBe(true);
|
||
});
|
||
it('нет флага → выключен ($0)', () => {
|
||
expect(resolveJudgeEnabled({ env: {} })).toBe(false);
|
||
});
|
||
});
|
||
|
||
describe('judgeActive (активен только при флаге И ключе — иначе $0/инертен)', () => {
|
||
it('флаг + ключ → активен', () => {
|
||
expect(judgeActive({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1' }, keychainGet: () => 'k' })).toBe(true);
|
||
});
|
||
it('флаг есть, ключа нет → НЕ активен (fail-closed, нечем подписать)', () => {
|
||
expect(judgeActive({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1' }, keychainGet: () => null })).toBe(false);
|
||
});
|
||
it('ключ есть, флага нет → НЕ активен ($0 до рубильника)', () => {
|
||
expect(judgeActive({ env: {}, keychainGet: () => 'k' })).toBe(false);
|
||
});
|
||
});
|
||
|
||
import { judgeGateMode } from './judge-gate-config.mjs';
|
||
|
||
describe('judgeGateMode (М7 Фаза 7 §8): inert / shadow / live-block', () => {
|
||
const KG = () => 'k';
|
||
it('нет флага/ключа → inert ($0)', () => {
|
||
expect(judgeGateMode({ env: {}, keychainGet: KG })).toBe('inert');
|
||
expect(judgeGateMode({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1' }, keychainGet: () => null })).toBe('inert');
|
||
});
|
||
it('флаг+ключ, без MODE → shadow (D28 обкатка по умолчанию)', () => {
|
||
expect(judgeGateMode({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1' }, keychainGet: KG })).toBe('shadow');
|
||
});
|
||
it('флаг+ключ + MODE=block → live-block', () => {
|
||
expect(judgeGateMode({ env: { ROUTER_MENTOR_JUDGE_ENABLED: '1', ROUTER_MENTOR_JUDGE_MODE: 'block' }, keychainGet: KG })).toBe('live-block');
|
||
});
|
||
it('MODE=block без активации → всё равно inert (рубильник важнее режима)', () => {
|
||
expect(judgeGateMode({ env: { ROUTER_MENTOR_JUDGE_MODE: 'block' }, keychainGet: KG })).toBe('inert');
|
||
});
|
||
});
|