13 lines
3.0 KiB
JavaScript
13 lines
3.0 KiB
JavaScript
import fs from 'node:fs';import assert from 'node:assert/strict';import {session} from './sgf-single-http.mjs';
|
|
const run=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')),root=run.root+'/private/receipt-composition-cc50a276c10c';const direct=JSON.parse(fs.readFileSync(root+'/single-direct-cost.json')),commercial=JSON.parse(fs.readFileSync(root+'/single-commercial.json'));const file=root+'/single-workshop-commercial-http-progress.json',progress=fs.existsSync(file)?JSON.parse(fs.readFileSync(file)):{operations:{}};const save=()=>fs.writeFileSync(file,JSON.stringify(progress,null,2));
|
|
const clients={commercial:await session('sgf:commercial_prepare','commercial'),prepare:await session('sgf:finance_prepare','workshop'),review:await session('sgf:finance_review','workshop')};
|
|
const step=async(name,role,path,body)=>{let op=progress.operations[name];if(!op){op=progress.operations[name]={key:crypto.randomUUID(),role,path,body};save();}assert.deepEqual({role:op.role,path:op.path,body:op.body},{role,path,body});if(op.result)return op.result;const r=await clients[role].command(path,body,op.key);assert([200,201].includes(r.status),name+': '+JSON.stringify(r.value));op.result=r.value;save();return r.value;};
|
|
const service=await step('technical-service','commercial','/api/a/services',{name:'Intervenção técnica QA'});
|
|
let r=await clients.prepare.get('/api/workshop-billing');assert.equal(r.status,200);let data=await r.json();assert(data.services.some(s=>s.id===service.id));assert(data.orders.some(o=>o.id===direct.order));
|
|
const p=await step('price500','prepare',`/api/workshop-billing/orders/${direct.order}/proposals`,{version:1,previous_id:null,client_id:commercial.client,currency:'MZN',evidence:'Tarifas comerciais QA200/H e75/UN, independentes do custo interno295.','lines':[{entry_id:direct.time,entry_version:1,service_id:service.id,service_version:1,price:'200',price_source:'QA-TARIFA-OFICINA-v1'},{entry_id:direct.material,entry_version:1,service_id:service.id,service_version:1,price:'75',price_source:'QA-TARIFA-OFICINA-v1'}]});
|
|
await step('price500-review','review',`/api/workshop-billing/orders/${direct.order}/reviews`,{id:p.id,version:1,decision:'approved',reason:'Conferência comercial distinta das origens e preços seleccionados; custo não determina venda.'});
|
|
const g=await step('commercial-draft500','prepare',`/api/workshop-billing/orders/${direct.order}/generations`,{id:p.id,version:1});assert.equal(g.base_exact,'500');
|
|
// Explicit chosen module in a new normal session; no stale context or module inferred from data.
|
|
const destination=await session('sgf:finance_prepare','commercial');r=await destination.get('/api/a/billing_drafts/'+g.billing_draft_id);const body=await r.text();assert.equal(r.status,200,'chosen Commercial draft: '+body.slice(0,200));progress.passed=true;progress.generated=g;progress.automatic_invoice=false;save();console.log(JSON.stringify({passed:true,base:'500',draft:g.billing_draft_id,proof:file,browser_visual_review:false}));
|
|
|