8 lines
2.9 KiB
JavaScript
8 lines
2.9 KiB
JavaScript
import fs from'node:fs';import assert from'node:assert/strict';import{session}from'./sgf-single-http.mjs';
|
|
const finance=await session('sgf:finance_review','commercial'),read=await session('sgf:read_only','commercial'),checks=[],ok=(v,t)=>{assert(v,t);checks.push(t);};
|
|
let r=await finance.get('/api/service-documents/register?per_page=100');ok(r.status===200,'authenticated unified register200');const all=await r.json(),rows=all.documents.data;ok(all.documents.per_page===100&&rows.length<=100,'server100-row page');ok(['invoice','invoice_receipt','receipt','credit_note','quote','draft'].every(kind=>rows.some(r=>r.kind===kind)),'all six available document families visible');const fr=rows.find(r=>r.kind==='invoice_receipt');ok(rows.filter(r=>r.invoice_id===fr.invoice_id&&r.kind==='invoice').length===0,'technical invoice not duplicated beside invoice-receipt');ok(fr.balance_available&&Number(fr.origin_invoice_balance)===0,'invoice-receipt origin balance zero');const credit=rows.find(r=>r.kind==='credit_note');ok(credit.balance_available&&Number(credit.origin_invoice_balance)===500&&Number(credit.amount)===100,'credit100 retains distinct source invoice balance500');ok(rows.filter(r=>r.kind==='quote').every(r=>r.amount===null&&r.base!==null),'quotes retain base without fiscal total');ok(rows.filter(r=>r.kind==='draft').every(r=>r.amount===null&&r.document_on===null),'drafts not presented as issued');
|
|
for(const kind of ['receipt','credit_note','invoice_receipt']){r=await read.get('/api/service-documents/register?kind='+kind);const q=await r.json();ok(r.status===200&&q.documents.total===1&&q.documents.data[0].kind===kind,kind+' own filter and count');}
|
|
r=await finance.get('/api/service-documents/register?kind=quote&from=2026-01-01');ok(r.status===200&&(await r.json()).documents.total===0,'issue-date filter excludes unissued quotes');r=await finance.get('/api/service-documents/register?search='+encodeURIComponent('%_!'));ok(r.status===200&&(await r.json()).documents.total===0,'literal wildcard characters do not expand search');r=await finance.get('/api/service-documents/register?company_id=1');ok(r.status===422,'foreign context override rejected');r=await finance.get('/api/service-documents/register?per_page=1000');ok(r.status===422,'unbounded page refused');
|
|
const account=await session('sgf:accounting_prepare','accounting');r=await account.get('/api/general-ledger');const ledger=await r.json();ok(r.status===200&&ledger.journals.length===25&&ledger.totals.debit_minor===ledger.totals.credit_minor,'read integration preserves balanced25-journal book');
|
|
const run=JSON.parse(fs.readFileSync('C:/laragon/data/sgf-tempo/run/modular-regression-current.json')),file=run.root+'/private/receipt-composition-cc50a276c10c/billing-register-http-20261110.json';fs.writeFileSync(file,JSON.stringify({passed:true,checks,business_commands:0,new_rights:0,browser_visual_review:false},null,2));console.log(JSON.stringify({passed:true,checks:checks.length,proof:file}));
|