84de110fee
Новый резолвер режима судьи М4 в judge-gate-config: inert ($0, нет флага/ключа) / shadow (active, логирует не блокирует — D28 «сперва тихо») / live-block (active + ROUTER_MENTOR_JUDGE_ MODE=block, блокирует на NO-GO). Рубильник judgeActive важнее режима: MODE=block без флага/ключа → всё равно inert. Default при активации — shadow (рекомендуемая обкатка §11). 9/9 GREEN.
44 lines
2.3 KiB
JavaScript
44 lines
2.3 KiB
JavaScript
// tools/judge-gate-config.test.mjs
|
||
import { describe, it, expect } from 'vitest';
|
||
import { resolveJudgeEnabled, judgeActive } from './judge-gate-config.mjs';
|
||
|
||
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');
|
||
});
|
||
});
|