6 lines
4.9 KiB
JavaScript
6 lines
4.9 KiB
JavaScript
import fs from 'node:fs';import assert from 'node:assert/strict';import {createRequire} from 'node:module';import {pathToFileURL} from 'node:url';import {transformWithOxc} from 'vite';import React from 'react';import {renderToStaticMarkup} from 'react-dom/server';import {checkedPositions,positionsCsv,exactMoney,selectedReceivable} from '../resources/js/receivable-position-view.js';
|
|
const require=createRequire(import.meta.url),root=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')).root+'/private/receipt-composition-cc50a276c10c';const compile=async(file,imports=[])=>{let source=fs.readFileSync('resources/js/'+file,'utf8').replace("from 'react'",'from '+JSON.stringify(pathToFileURL(require.resolve('react')).href));for(const name of imports)source=source.replace("from './"+name+"'",'from '+JSON.stringify(pathToFileURL(process.cwd()+'/resources/js/'+name).href));const code=await transformWithOxc(source,file,{jsx:{runtime:'classic'}});return import('data:text/javascript;base64,'+Buffer.from(code.code).toString('base64'));};const {default:Workspace,ReceivablePositionRows}=await compile('ReceivablePositionsWorkspace.jsx',['receivable-position-view.js']),checks=[],ok=(v,n)=>{assert(v,n);checks.push(n);};
|
|
// Presentation-only contract examples. Financial projection parity is proved against the original service in PHP.
|
|
const sample={read_only:true,currency:'MZN',balance_basis:'current_confirmed_effects_not_historical_cut',reference_on:'2026-11-10',positions:{current_page:1,last_page:1,total:2,data:[{id:1,reference:'QA/1',client:'Cliente <QA>',state:'partial',original:'1000.00',reduced:'0.00',allocated:'600.00',balance:'400.00',opened:true,due_date:null,due_state:'unknown',overdue_days:null,revision:6},{id:2,reference:'QA/2',client:'Proposta',state:'proposed',original:'1000.00',reduced:'0.00',allocated:'0.00',balance:null,opened:false,due_date:null,due_state:'not_open',overdue_days:null,revision:0}]},totals:{recognized_balance:'400.00',recognized_positions:1,unrecognized_proposals:1,unknown_due_positions:1},basis:{scope:{tenant_id:1,company_id:2,unit_id:2},records:3,last_record_id:3,effects:6,last_effect_id:6}};const query={reference_on:'2026-11-10',page:1,per_page:'25'};ok(checkedPositions(sample,query)===sample,'page contract accepted');const html=renderToStaticMarkup(React.createElement(ReceivablePositionRows,{data:sample,onOpen(){}}));ok(html.includes('400,00 MZN')&&html.includes('Ainda não reconhecido'),'recognized balance and proposal distinct');ok(html.includes('Dias de atraso indeterminados')&&html.includes('Vencimento desconhecido'),'unknown due never zero delay');ok(html.includes('<QA>')&&!html.includes('Cliente <QA>'),'client snapshot escaped');const csv=positionsCsv(sample,query);ok(csv.includes('NAO E SALDO HISTORICO')&&csv.includes('Indeterminado'),'export honest basis and pending amounts');const dangerous=structuredClone(sample);dangerous.positions.data[0].client=' =CMD()';ok(positionsCsv(dangerous,query).includes("' =CMD()"),'CSV text formula escaped');assert.throws(()=>checkedPositions({...sample,reference_on:'2026-11-11'},query));ok(true,'late date response refused');assert.throws(()=>checkedPositions({...sample,basis:{...sample.basis,last_effect_id:7}},query,JSON.stringify(sample.basis)));ok(true,'changed book marker refused');const wrong=structuredClone(sample);wrong.positions.data[1].balance='1000.00';assert.throws(()=>checkedPositions(wrong,query));ok(true,'proposed amount cannot masquerade as recognized balance');ok(exactMoney('9999999999999999.99')==='9999999999999999,99','large exact decimal no floating conversion');const form=renderToStaticMarkup(React.createElement(Workspace,{context:{token:'test'},api(){throw Error('No implicit query');}}));ok(form.includes('data-sgf-read-filters="true"')&&form.includes('type="date" required="" value=""'),'explicit reference no automatic date');ok(!form.includes('Saldo reconhecido do filtro completo'),'no invented metrics before query');
|
|
const {default:Original}=await compile('ServiceReceivablesWorkspace.jsx',['receivable-position-view.js']);const original=renderToStaticMarkup(React.createElement(Original,{context:{token:'test',unit:{id:2}},can:()=>false,api(){},busy:false,initialObligationId:999}));ok(original.includes('Recebimentos')||original.includes('Recebíveis'),'original workspace compiles with explicit target');ok(selectedReceivable([{id:1},{id:2}],'2').id===2,'explicit requested position preserved');ok(selectedReceivable([{id:1}],999)===null,'missing requested position never falls back');ok(selectedReceivable([{id:1}]).id===1,'existing entry behavior retained without requested identity');const file=root+'/receivable-positions-ui-20261110.json';fs.writeFileSync(file,JSON.stringify({passed:true,checks,presentation_contract_examples_only:true,browser_visual_review:false,business_commands:0},null,2));console.log(JSON.stringify({passed:true,checks:checks.length,proof:file}));
|