import { describe, it, expect } from 'vitest'; import { enqueue, applyApprovalBatch, pendingCount } from './router-learning-queue.mjs'; import { proposeProbe } from './router-exploration.mjs'; const cand = (id) => ({ id, kind: 'lesson', summary: `s-${id}`, why_proposed: `w-${id}` }); describe('Машина 3-E — несущие инварианты hard-rule', () => { it('БЕЗ явного «да» владельца НИЧЕГО не входит в фонд (no auto-fill)', () => { let q = []; for (let i = 0; i < 10; i++) q = enqueue(q, cand(`c${i}`)); const r = applyApprovalBatch(q, {}); expect(r.fund).toEqual([]); expect(pendingCount(r.queue)).toBe(10); }); it('разведка по умолчанию НЕ инициирует пробу (rate=0)', () => { expect(proposeProbe({ rate: 0, candidates: [{ id: '#x' }] })).toBe(null); }); it('проба, даже включённая, требует одобрения владельца (никогда авто)', () => { const p = proposeProbe({ rate: 0.5, candidates: [{ id: '#x' }], usageCounts: {} }); expect(p.requiresOwnerApproval).toBe(true); }); });