7 lines
3.6 KiB
JavaScript
7 lines
3.6 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',commercial=JSON.parse(fs.readFileSync(root+'/single-commercial.json')),file=root+'/workshop-equipment-http-20261110.json',progress=fs.existsSync(file)?JSON.parse(fs.readFileSync(file)):{checks:[]},save=()=>fs.writeFileSync(file,JSON.stringify(progress,null,2)),ok=(value,label)=>{assert(value,label);if(!progress.checks.includes(label))progress.checks.push(label);save();};const manager=await session('sgf:workshop_manage','workshop');
|
|
let r=await manager.get('/api/workshop-equipment?view=clients&per_page=100');ok(r.status===200,'paged explicit Workshop client catalogue200');let data=await r.json();ok(data.records.data.some(c=>c.id===commercial.client),'existing explicitly associated client remains selectable');
|
|
const body={client_id:commercial.client,identifier:'QA-CATALOGO-INDEPENDENTE-cc50a276c10c',description:'Equipamento sintético registado antes de abrir uma ordem',serial:'QA-CATALOGO-001',reason:'Identificação individual em catálogo para reutilização explícita na oficina.'};progress.key??=crypto.randomUUID();save();if(!progress.result){const preview=await manager.command('/api/workshop-equipment/preview',body,progress.key);assert.equal(preview.status,200,JSON.stringify(preview.value));ok(!preview.value.impact.creates_order,'preview declares no automatic work order');const result=await manager.command('/api/workshop-equipment/confirm',{preview:preview.value.preview});assert.equal(result.status,200,JSON.stringify(result.value));progress.result=result.value;save();const replay=await manager.command('/api/workshop-equipment/confirm',{preview:preview.value.preview});ok(replay.status===200&&replay.value.replayed&&replay.value.id===result.value.id,'uncertain response recovers same registered equipment');}
|
|
r=await manager.get('/api/workshop-equipment?client_id='+commercial.client+'&search='+body.identifier+'&per_page=25');ok(r.status===200,'paged equipment selector for selected client200');data=await r.json();ok(data.records.total===1&&data.records.data[0].id===progress.result.id,'one equipment identifier, no duplicated registration');r=await manager.get('/api/workshop-equipment?search=%25&per_page=100');ok(r.status===200,'equipment page100');data=await r.json();ok(data.records.total===0,'equipment literal wildcard does not widen search');
|
|
const tech=await session('sgf:workshop_record','workshop');r=await tech.get('/api/workshop-equipment?search='+body.identifier);ok(r.status===200,'technician authorised filtered lookup200');data=await r.json();ok(data.records.total===0,'unassigned catalogue equipment remains hidden from technician');const denied=await tech.command('/api/workshop-equipment/preview',body);ok(denied.status===403,'technician cannot register independent equipment');r=await manager.get('/api/workshop');ok(r.status===200,'existing Workshop orders remain available');data=await r.json();ok(data.orders.length>=2&&!data.orders.some(o=>o.equipment_id===progress.result.id),'registration did not create an order or replace existing equipment');
|
|
const accounting=await session('sgf:accounting_prepare','accounting');r=await accounting.get('/api/general-ledger');data=await r.json();ok(r.status===200&&data.journals.length===18,'existing18 journals remain unchanged in count');progress.passed=true;progress.new_rights=0;progress.browser_visual_review=false;save();console.log(JSON.stringify({passed:true,checks:progress.checks.length,proof:file}));
|