4 lines
4.2 KiB
JavaScript
4 lines
4.2 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 {payablePageSummary,checkedPayablePage,payablePageCsv} from '../resources/js/payable-position-view.js';
|
|
const require=createRequire(import.meta.url),base=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')).root+'/private',root=base+'/receipt-composition-cc50a276c10c',sample=JSON.parse(fs.readFileSync(base+'/receipt-composition-b4093c6f6707/single-integration/20261110-220530-07616d21/payable-positions-sample-private.json')),query={page:1,per_page:'100'},checks=[],ok=(v,n)=>{assert(v,n);checks.push(n);};checkedPayablePage(sample,query);ok(true,'canonical regression sample contract accepted');const compile=async(file,files)=>{let source=fs.readFileSync('resources/js/'+file,'utf8').replace("from 'react'",'from '+JSON.stringify(pathToFileURL(require.resolve('react')).href));for(const f of files)source=source.replace("from './"+f+"'",'from '+JSON.stringify(pathToFileURL(process.cwd()+'/resources/js/'+f).href));const c=await transformWithOxc(source,file,{jsx:{runtime:'classic'}});return import('data:text/javascript;base64,'+Buffer.from(c.code).toString('base64'));};const {default:Workspace,PayablePositionRows}=await compile('PayablePositionsWorkspace.jsx',['ledger-report-view.js','payable-position-view.js']);const html=renderToStaticMarkup(React.createElement(PayablePositionRows,{data:sample}));ok(sample.positions.every(r=>html.includes(r.reference)),'actual document references visible');ok(html.includes('Atraso indeterminado')&&!html.includes('0 dia(s)'),'unknown delay no zero');const recognised=sample.positions.find(r=>r.obligation_id);ok(html.includes('document_id='+recognised.document_id),'exact document carried to original financial page');const mock=structuredClone(sample);mock.positions=[{...recognised,source_conflict:true,balance_minor:null,payment_state:'indeterminate'}];ok(payablePageSummary(mock).unknown===1&&payablePageSummary(mock).totals.length===0,'indeterminate balance not included as zero');mock.positions=[{...recognised,obligation_id:null,balance_minor:null,payment_state:'not_recognised'}];ok(payablePageSummary(mock).unrecognized===1&&payablePageSummary(mock).totals.length===0,'unrecognized document not debt zero');mock.positions=[{...recognised,currency:'MZN',balance_minor:'10000'},{...recognised,currency:'USD',balance_minor:'2000'}];ok(payablePageSummary(mock).totals.length===2,'currencies never summed together');mock.positions=[{...recognised,supplier:' =FORMULA()'}];ok(payablePageCsv(mock,query).includes("' =FORMULA()"),'CSV formula-like supplier escaped');ok(payablePageCsv(sample,query).includes('Apenas esta pagina'),'CSV explicitly limited to page');const bad=structuredClone(sample);bad.positions[0]={...recognised,source_conflict:true,balance_minor:'10000'};assert.throws(()=>checkedPayablePage(bad,query));ok(true,'conflicting source cannot supply assumed balance');const form=renderToStaticMarkup(React.createElement(Workspace,{context:{token:'test'},api(){throw Error('SSR no network');}}));ok(form.includes('data-sgf-read-filters="true"')&&form.includes('Estado do documento'),'source filters identified as read-only document filters');ok(form.includes('página')&&!form.includes('Saldo conhecido apenas desta página'),'no invented initial metrics');
|
|
const {navigationGroups}=await compile('WorkspaceNavigation.jsx',['billing-menu.js','workshop-menu.js','stock-menu.js','accounting-menu.js']);const has=g=>g.some(x=>x.items.some(i=>i.id==='payable_positions'));ok(!has(navigationGroups(()=>true,2)),'new function hidden outside selected installation');ok(has(navigationGroups(()=>true,2,{payablePositions:true})),'authorized existing installation function available');ok(!has(navigationGroups(p=>p!=='supplier_payables.view',2,{payablePositions:true})),'no payable read no function');const file=root+'/payable-positions-ui-20261110.json';fs.writeFileSync(file,JSON.stringify({passed:true,checks,browser_visual_review:false,business_commands:0},null,2));console.log(JSON.stringify({passed:true,checks:checks.length,proof:file}));
|