397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
2.1 KiB
JavaScript
39 lines
2.1 KiB
JavaScript
// tools/judge-key-config.test.mjs
|
|
import { describe, it, expect } from 'vitest';
|
|
import { readFileSync } from 'node:fs';
|
|
import { resolveJudgeKey } from './judge-key-config.mjs';
|
|
|
|
describe('resolveJudgeKey', () => {
|
|
it('returns keychain key when present', () => {
|
|
expect(resolveJudgeKey({ env: {}, keychainGet: () => 'k-chain' })).toBe('k-chain');
|
|
});
|
|
// Пакет 4.1 (Δ4): env-fallback УБРАН в judge-key-config (зеркало receipt-key-config).
|
|
it('env-fallback УБРАН: env задан, keychain пуст → null', () => {
|
|
expect(resolveJudgeKey({ env: { ROUTER_MENTOR_JUDGE_KEY: 'k-env' }, keychainGet: () => null })).toBe(null);
|
|
});
|
|
it('keychain держит ключ, env полностью игнорируется', () => {
|
|
expect(resolveJudgeKey({ env: { ROUTER_MENTOR_JUDGE_KEY: 'k-env' }, keychainGet: () => 'k-chain' })).toBe('k-chain');
|
|
});
|
|
it('returns null when neither present', () => {
|
|
expect(resolveJudgeKey({ env: {}, keychainGet: () => null })).toBe(null);
|
|
});
|
|
it('never throws when keychainGet throws → null', () => {
|
|
expect(resolveJudgeKey({ env: {}, keychainGet: () => { throw new Error('boom'); } })).toBe(null);
|
|
});
|
|
it('is a DIFFERENT key domain than receipts (separate service)', async () => {
|
|
const { _internals } = await import('./judge-key-config.mjs');
|
|
expect(_internals.KEYCHAIN_SERVICE).toBe('router-mentor-judge');
|
|
expect(_internals.KEY_ENV).toBe('ROUTER_MENTOR_JUDGE_KEY');
|
|
});
|
|
});
|
|
|
|
// keytar fix (live activation 2026-06-09): keytar async-only — getPasswordSync НЕ существует.
|
|
// Пин: defaultKeychainGet не зовёт несуществующий getPasswordSync, читает через keychain-read.
|
|
describe('defaultKeychainGet keytar-fix (async getPassword via keychain-read)', () => {
|
|
it('не использует getPasswordSync (его нет в keytar) и делегирует readKeychainSync', () => {
|
|
const src = readFileSync(new URL('./judge-key-config.mjs', import.meta.url), 'utf8');
|
|
expect(src).not.toContain('getPasswordSync');
|
|
expect(src).toContain('readKeychainSync');
|
|
});
|
|
});
|