import test from 'node:test'; import assert from 'node:assert/strict'; import {readFile} from 'node:fs/promises'; const source=await readFile(new URL('../booking/bookingRecord/bookingRecord.vue',import.meta.url),'utf8'); function computed(name,next) { const start=source.indexOf(name+'(){'); const end=source.indexOf(next+'()',start); assert.ok(start>=0 && end>start); return new Function(`return ({${source.slice(start,end).trim().replace(/,$/,'')}}).${name}();`)(); } const color=computed('getRecordColor','getETA'); const confirmation=computed('getConfirmationNo','dateFormat'); test('AP retains approval color when lodging status also matches an ordinary booking',()=>{ for(const lastOperaStatus of ['CHECKED_IN','DUE_OUT','RESERVED',null]) { for(const sharer of [null,'[]','']) { assert.equal(color({approveStatus:'AP',lastOperaStatus,confirmationNo:'12345',sharer}),'hz-card-approval'); } } }); test('waitlist and ordinary colors are preserved',()=>{ for(const approveStatus of ['W','WA']) assert.equal(color({approveStatus,lastOperaStatus:'CHECKED_IN',confirmationNo:'12345'}),'hz-card-waitlist'); assert.equal(color({approveStatus:'N',lastOperaStatus:'CHECKED_IN',confirmationNo:'12345'}),'hz-card-booking'); }); test('Daylight still displays an existing AP confirmation number',()=>{ assert.equal(confirmation({approveStatus:'AP',confirmationNo:'12345'}),'12345'); assert.equal(confirmation({approveStatus:'AP',confirmationNo:null}),'N/A'); assert.equal(confirmation({approveStatus:'W',confirmationNo:'12345'}),'N/A'); });