import test from 'node:test' import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' const helper = await readFile(new URL('../src/utils/return-relabel.js', import.meta.url), 'utf8') const { requiresReturnPack, returnDeductions, returnPackFacts, returnSelections } = await import('data:text/javascript;base64,' + Buffer.from(helper).toString('base64')) const source = await readFile(new URL('../src/components/ReturnRelabelPackWork.vue', import.meta.url), 'utf8') const body = source.split('')[0].replace(/^\s*import .*$/gm, '').replace('export default', 'return') function setup() { const calls = [], events = [] const component = new Function('requiresReturnPack','returnDeductions','returnPackFacts','returnSelections','packReturnRelabelCartons','warehouseIdempotencyKey','releaseWarehouseKey',body)(requiresReturnPack,returnDeductions,returnPackFacts,returnSelections,async(no,payload)=>{calls.push(payload);return {relabelNo:no}},()=>({value:'stable',signature:'s'}),()=>{}) const item = (mark,done) => ({returnCartonId:mark,cartonMark:mark,operationType:'SKU_LABEL',expectedPackages:1,relabelledPackages:done,skippedPackages:0,exceptionPackages:0,skuItems:[{skuCode:'SKU',quantity:3}]}) const value = {...component.data(),task:{relabelNo:'RL',items:[item('A',1),item('B',0)],history:[]},$emit:(...args)=>events.push(args)} for(const[name,fn]of Object.entries(component.methods))value[name]=fn.bind(value) for(const[name,fn]of Object.entries(component.computed))Object.defineProperty(value,name,{get:fn.bind(value)}) return {value,calls,events} } test('packing cannot run with an unfinished source, missing measurement, skipped or exception fact',async()=>{ const {value,calls}=setup(); await value.pack();assert.equal(calls.length,0) value.dimensions={length:'20',width:'30',height:'40',weight:'2'} assert.equal(value.ready,false);value.task.items[1].relabelledPackages=1;assert.equal(value.ready,true) value.task.items[0].skippedPackages=1;assert.equal(value.ready,false);value.task.items[0].skippedPackages=0 value.task.items[0].exceptionPackages=1;assert.equal(value.ready,false) }) test('pack sends every source with exact SKU piece deductions and generated target; saved history prevents repeat',async()=>{ const {value,calls,events}=setup();value.task.items[1].relabelledPackages=1;value.dimensions={length:'20',width:'30',height:'40',weight:'2'} await value.pack() assert.deepEqual(calls,[{sourceCartonMarks:['A','B'],targetCartonMark:null,sourceDeductions:[{cartonMark:'A',skuCode:'SKU',quantity:3},{cartonMark:'B',skuCode:'SKU',quantity:3}],length:20,width:30,height:40,weight:2,idempotencyKey:'stable'}]) assert.ok(events.some(row=>row[0]==='saved')) value.task.history=[{action:'RETURN_PACK',detail:JSON.stringify({round:'INITIAL',cartonMark:'NEW',quantity:6,label:{printableHtml:''}})}] assert.equal(value.ready,false);assert.equal(value.facts[0].cartonMark,'NEW') })