Files
compras/scripts/pilot-replenishment-activation-http.mjs
2026-11-03 11:51:44 +02:00

36 lines
3.1 KiB
JavaScript

import fs from 'node:fs/promises';
import assert from 'node:assert/strict';
const source = await fs.readFile('scripts/supplier-evaluation-check.mjs', 'utf8');
const common = source.slice(source.indexOf('const base ='), source.indexOf('const author ='));
const proof = JSON.parse(await fs.readFile('docs/proofs/pilot-replenishment-activation.json', 'utf8'));
await new Function('fs', 'assert', 'proof', 'return (async()=>{' + common + `
assert.equal(proof.result, 'applied');
const requester = client(); await requester.enter('requester');
assert.equal((await requester.request('/contexto','POST',{area:'procurement',option:'procurement.internal'})).status,302);
const tasks = await requester.request('/requisicoes/tarefas'); assert.equal(tasks.status,200);
const task = tasks.page.props.tasks.data.find(row => row.id === 'purchase:' + proof.purchase_id + ':draft'); assert.ok(task);
const page = await requester.request(task.href); assert.equal(page.status,200);
const r = page.page.props.requisition;
assert.equal(r.status,'draft'); assert.equal(r.items.length,1); assert.equal(r.items[0].quantity,'2.000'); assert.equal(r.total_minor,2320);
assert.equal(r.steps.length,0); assert.equal(page.page.props.canEdit,true); assert.ok(page.page.props.automaticSource);
const checks = [];
for (const [role, prepare, review] of [['procurement',true,false],['finance',false,true]]) {
const viewer=client(); await viewer.enter(role);
assert.equal((await viewer.request('/contexto','POST',{area:'procurement',option:'procurement.internal'})).status,302);
const response=await viewer.request('/stock/reposicao?rule_id='+proof.rule_id);
assert.equal(response.status,200); assert.equal(response.page.props.canPrepare,prepare); assert.equal(response.page.props.canReview,review);
assert.equal(response.page.props.rules.data.length,1); assert.equal(response.page.props.rules.data[0].state,'approved');
checks.push({role,result:'passed'});
}
const stock=client(); await stock.enter('warehouse');
assert.equal((await stock.request('/contexto','POST',{area:'procurement',option:'procurement.internal'})).status,302);
const availability=await stock.request('/stock/disponibilidade?warehouse_id=1'); assert.equal(availability.status,200);
const row=availability.page.props.rows.data.find(row=>row.id===1); assert.equal(row.physical_milli,1000); assert.equal(row.free_milli,1000);
await fs.writeFile('docs/proofs/pilot-replenishment-activation-http.json',JSON.stringify({checked_at:new Date().toISOString(),result:'passed',environment:base,
purchase_id:r.id,purchase_number:r.number,status:r.status,quantity:r.items[0].quantity,total_minor_mzn:r.total_minor,requester_task:true,
automatic_source_reused:true,physical_milli:row.physical_milli,free_milli:row.free_milli,checks,
business_commands:false,accounts_or_grants_changed:false,sgf_installation_changed:false,visual_review:false},null,2));
console.log('Rascunho, origem da reposicao, tarefas, competencias e saldo confirmados por HTTP.');
` + '})()')(fs, assert, proof);