74 lines
4.4 KiB
JavaScript
74 lines
4.4 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/submitBooking/submitBooking.vue',import.meta.url),'utf8');
|
|
const script=source.match(/<script>([\s\S]*?)<\/script>/)[1]
|
|
.replace(/import[\s\S]*?from\s+['"][^'"]+['"];?[^\n]*/g,'').replace('export default','return');
|
|
function setup(bookType=0) {
|
|
const saved=[],logs=[];
|
|
const page=new Function('uni','saveBooking','getApprover',script)(
|
|
{showLoading(){},hideLoading(){},showToast(){},$u:{throttle(){}}},
|
|
async data=>{saved.push(structuredClone(data));return {success:true};},
|
|
async()=>({success:true,data:{records:[{approverList:[{employeeId:'7',employeeName:'Approver'}],approvalRoutingMessage:'Route'}]}}));
|
|
const vm={$t:k=>k,$set:(o,k,v)=>o[k]=v,writeLog:async(...args)=>logs.push(args)};
|
|
Object.assign(vm,page.data.call(vm));
|
|
for(const [k,fn] of Object.entries(page.methods))vm[k]=fn.bind(vm);
|
|
for(const [k,fn] of Object.entries(page.computed))Object.defineProperty(vm,k,{get:fn.bind(vm)});
|
|
vm.bookingData={bookType,dateList:[{date:['2026-09-09','2026-09-10'],status:1}],
|
|
extendDate:[{date:['2026-09-10','2026-09-11'],status:1}],roomRemark:'',otherRemark:''};
|
|
vm.checkList=[0]; vm.playerData={playerId:'80001'};vm.userData={userId:'1'};
|
|
return {vm,saved,logs};
|
|
}
|
|
test('direct Waitlist initializes selected dates for normal and extension booking',()=>{
|
|
for(const type of [0,1]) {
|
|
const {vm}=setup(type); vm.showWaitlistPop();
|
|
assert.equal(vm.unqualifiedDateList[0],type?vm.bookingData.extendDate[0]:vm.bookingData.dateList[0]);
|
|
assert.deepEqual(vm.unqualifiedDateCheckboxStates,[[]]);assert.equal(vm.showWaitlistModal,true);
|
|
}
|
|
});
|
|
test('Waitlist room choice is mutually exclusive and can be deselected',()=>{
|
|
const {vm}=setup();
|
|
vm.onWaitlistRoomRemarkGroupChange(['2nd Room']);
|
|
assert.deepEqual(vm.waitlistRoomGroupValue,['2nd Room']);
|
|
vm.onWaitlistRoomRemarkGroupChange(['2nd Room','3rd Room']);
|
|
assert.deepEqual(vm.waitlistRoomGroupValue,['3rd Room']);
|
|
vm.onWaitlistRoomRemarkGroupChange([]);assert.deepEqual(vm.waitlistRoomGroupValue,[]);
|
|
});
|
|
test('Waitlist remark includes Extend first and preserves date-specific manual text',()=>{
|
|
const {vm}=setup();vm.showWaitlistPop();vm.onWaitlistRoomRemarkGroupChange(['2nd Room']);
|
|
vm.changeWaitlistOtherRemark(['Extend','Remark']);vm.unqualifiedDateRemarks[0]='Late arrival';
|
|
vm.getWaitlistRemark(1,0);
|
|
assert.equal(vm.bookingData.dateList[0].remark,'Extend; 2nd Room; Late arrival');
|
|
vm.changeWaitlistOtherRemark([]);vm.onWaitlistRoomRemarkGroupChange([]);vm.unqualifiedDateRemarks[0]='';
|
|
vm.getWaitlistRemark(1,0);assert.equal(vm.bookingData.dateList[0].remark,'');
|
|
});
|
|
test('Waitlist date matching survives reconstructed objects',()=>{
|
|
const {vm}=setup();vm.showWaitlistPop();vm.changeWaitlistOtherRemark(['Extend','Remark']);
|
|
vm.unqualifiedDateRemarks[0]='Date note';
|
|
vm.bookingData.dateList[0]=structuredClone(vm.bookingData.dateList[0]);
|
|
vm.getWaitlistRemark(1,0);assert.equal(vm.bookingData.dateList[0].remark,'Extend; Date note');
|
|
});
|
|
test('different existing and manual remarks are both preserved',()=>{
|
|
const {vm}=setup();vm.showWaitlistPop();vm.changeWaitlistOtherRemark(['Remark']);
|
|
vm.bookingData.dateList[0].remarkText='Existing note';vm.unqualifiedDateRemarks[0]='Additional note';
|
|
vm.getWaitlistRemark(1,0);
|
|
assert.equal(vm.bookingData.dateList[0].remark,'Existing note; Additional note');
|
|
});
|
|
test('extension approval submits extendDate remark and approver fields',async()=>{
|
|
const {vm,saved,logs}=setup(1);vm.showWaitlistPop();
|
|
vm.unqualifiedDateReasons[0]='reason';vm.unqualifiedDateApprovers[0]=['7'];
|
|
vm.unqualifiedDateRemarks[0]='Extension note';vm.changeWaitlistOtherRemark(['Extend','Remark']);
|
|
vm.selectApproverData=[{value:'7',label:'Approver'}];
|
|
await vm.submitApprovalRequest();
|
|
assert.equal(logs.length,0);assert.equal(saved.length,1);
|
|
assert.equal(saved[0].extendDate[0].remarkText,'Extension note');
|
|
assert.equal(saved[0].extendDate[0].approver,'7');assert.equal(saved[0].isApproval,1);
|
|
assert.equal(saved[0].extendDate[0].remark,'Extend; Extension note');
|
|
assert.equal(saved[0].extendData,undefined);
|
|
});
|
|
test('approver response retains Daylight records envelope',async()=>{
|
|
const {vm}=setup();await vm.getApprover();
|
|
assert.equal(vm.selectApproverData[0].value,'7');assert.equal(vm.selectApproverData[0].label,'Approver');
|
|
assert.equal(vm.routingResaon,'Route');
|
|
});
|