import assert from 'node:assert/strict'; import {workshopBillingProposal} from '../resources/js/workshopBillingProposal.js'; const order={client_id:16,entries:[{id:6,version:1},{id:4,version:1}],proposals:[]},services=[{id:9,version:1}]; const form=new FormData(); assert.throws(()=>workshopBillingProposal(order,services,form),/Incluir origem integral/); form.set('select-6','on'); assert.throws(()=>workshopBillingProposal(order,services,form),/Origem #6: seleccione o serviço/); form.set('service-6','9'); assert.throws(()=>workshopBillingProposal(order,services,form),/Origem #6: preencha o preço/); form.set('price-6','0'); assert.throws(()=>workshopBillingProposal(order,services,form),/fonte comercial/); form.set('source-6','WORKSHOP-SALES-SYNTHETIC-v1'); assert.throws(()=>workshopBillingProposal(order,services,form),/fundamento/); form.set('evidence','Proposta sintética'); const zero=workshopBillingProposal(order,services,form);assert.equal(zero.lines[0].price,'0');assert.equal(zero.lines.length,1); form.set('select-4','on');form.set('service-4','9');form.set('price-4','200');form.set('source-4','WORKSHOP-SALES-SYNTHETIC-v1');form.set('price-6','75'); const proposal=workshopBillingProposal(order,services,form);assert.deepEqual(proposal.lines.map(l=>l.price),['75','200']);assert.equal(proposal.previous_id,null);assert.equal(proposal.version,1); console.log('Workshop form checks passed: missing selection/service/price/source/evidence; explicit zero; exact selected values. No database or browser used.');