import {test} from 'node:test';
import assert from 'node:assert/strict';
import {parseQuote,unsafeAmount,transition,raceResponses} from '../build/domain.mjs';
const valid={id:'Q-001',customerId:'C-001',totalCents:12500};
test('runtime boundary rejects values a type assertion would trust',()=>{
 for(const value of [null,[],{}, {...valid,totalCents:'free'},{...valid,totalCents:-1},{...valid,totalCents:1.1},{...valid,totalCents:Infinity},{...valid,totalCents:Number.MAX_SAFE_INTEGER+1},{...valid,id:'C-001'},{...valid,customerId:'Q-001'}])assert.equal(parseQuote(value).ok,false);
 assert.equal(Number.isNaN(unsafeAmount({...valid,totalCents:'free'})),true);
});
test('validation returns a detached, normalized record',()=>{const parsed=parseQuote({...valid,extra:'ignored'});assert.equal(parsed.ok,true);assert.deepEqual(parsed.value,valid);assert.notEqual(parsed.value,valid);});
test('approval is a guarded state transition',()=>{
 assert.equal(transition({status:'idle'},{type:'approve',approver:'Reviewer'}).status,'error');
 const ready=transition({status:'idle'},{type:'received',quote:valid});
 assert.equal(transition(ready,{type:'approve',approver:'  '}).status,'error');
 assert.deepEqual(transition(ready,{type:'approve',approver:' Reviewer '}),{status:'approved',quote:valid,approvedBy:'Reviewer'});
 assert.deepEqual(transition(ready,{type:'reset'}),{status:'idle'});
});
test('the older request cannot win after a newer request when guarded',async()=>{
 assert.equal((await raceResponses(false,5)).selected,'Older request');
 assert.equal((await raceResponses(true,5)).selected,'Newer request');
});
test('cancellation prevents the asynchronous run from finishing',async()=>{
 const controller=new AbortController();const pending=raceResponses(true,100,controller.signal);controller.abort();
 await assert.rejects(pending,{name:'AbortError'});
});
