29 lines
1.5 KiB
JavaScript
29 lines
1.5 KiB
JavaScript
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');
|
|
});
|