// tools/enforce-parallel-session-lock.test.mjs // Stream H Task 7 — wrapper tests around the pure parallel-session-lock module. import { describe, it, expect } from 'vitest'; import { decide } from './enforce-parallel-session-lock.mjs'; describe('enforce-parallel-session-lock wrapper (Stream H Task 7)', () => { it('allow when acquire succeeded (fresh own-lock)', () => { const r = decide({ acquireResult: { acquired: true, holder: { session_id: 's1', pid: 100, acquired_at: 1000 } }, sessionId: 's1', }); expect(r.block).toBe(false); }); it('block when another session holds the lock', () => { const r = decide({ acquireResult: { acquired: false, holder: { session_id: 'other-session', pid: 999, acquired_at: 500 } }, sessionId: 's1', }); expect(r.block).toBe(true); expect(r.reason).toMatch(/parallel session lock.*other-session/i); }); it('allow when same-session re-acquires (takeover)', () => { const r = decide({ acquireResult: { acquired: true, holder: { session_id: 's1', pid: 100, acquired_at: 2000 } }, sessionId: 's1', }); expect(r.block).toBe(false); }); it('fail-open when acquireResult is missing (internal error path)', () => { expect(decide({ acquireResult: null, sessionId: 's1' }).block).toBe(false); expect(decide({ acquireResult: undefined, sessionId: 's1' }).block).toBe(false); }); it('block message identifies the other holder pid for human triage', () => { const r = decide({ acquireResult: { acquired: false, holder: { session_id: 'other', pid: 42, acquired_at: 0 } }, sessionId: 's1', }); expect(r.reason).toMatch(/pid 42/); }); });