import test from 'node:test'; import assert from 'node:assert/strict'; import { createDesk } from './desk.mjs'; test('same key replays without a second decrement', () => { const desk = createDesk(); assert.equal(desk.checkout({ key: 'a', kitId: 701, quantity: 2 }).available, 1); assert.equal(desk.checkout({ key: 'a', kitId: 701, quantity: 2 }).replayed, true); assert.equal(desk.inventory()[0].available, 1); }); test('same key with changed request rejects', () => { const desk = createDesk(); desk.checkout({ key: 'a', kitId: 701, quantity: 1 }); assert.throws( () => desk.checkout({ key: 'a', kitId: 701, quantity: 2 }), (error) => error.status === 409, ); }); test('invalid and excessive quantities preserve stock', () => { const desk = createDesk(); for (const quantity of [0, -1, 1.5, 21, NaN]) assert.throws( () => desk.checkout({ key: 'a', kitId: 701, quantity }), (error) => error.status === 422, ); assert.throws( () => desk.checkout({ key: 'a', kitId: 701, quantity: 4 }), (error) => error.status === 409, ); assert.equal(desk.inventory()[0].available, 3); }); test('unknown kit rejects and receipt copies do not mutate state', () => { const desk = createDesk(); assert.throws( () => desk.checkout({ key: 'a', kitId: 999, quantity: 1 }), (error) => error.status === 404, ); const receipt = desk.checkout({ key: 'b', kitId: 701, quantity: 1 }); receipt.available = 999; assert.equal(desk.checkout({ key: 'b', kitId: 701, quantity: 1 }).available, 2); });