Permitir consulta pública dos ecrãs reais com dados privados protegidos
tests / ci (push) Canceled after 0s
tests / ci (push) Canceled after 0s
This commit is contained in:
@@ -1,49 +1,128 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import fs from 'node:fs/promises';
|
||||
import {execFile} from 'node:child_process';
|
||||
import {promisify} from 'node:util';
|
||||
const run=promisify(execFile);
|
||||
const php='C:/Users/macbook/.config/investmoz/php-8.5.11/php.exe';
|
||||
const sgf='C:/laragon/www/sgf-tempo';
|
||||
for(const host of ['compras','sgf']) {
|
||||
const exists=await fs.access(`C:/laragon/data/sgf-tempo/secrets/payables-proof-${host}.json`).then(()=>true,()=>false);
|
||||
assert(!exists,'An existing proof must be reconciled before creating a new one.');
|
||||
import { execFile } from 'node:child_process';
|
||||
import { promisify } from 'node:util';
|
||||
const run = promisify(execFile);
|
||||
const php = 'C:/Users/macbook/.config/investmoz/php-8.5.11/php.exe';
|
||||
const sgf = 'C:/laragon/www/sgf-tempo';
|
||||
for (const host of ['compras', 'sgf']) {
|
||||
const exists = await fs
|
||||
.access(`C:/laragon/data/sgf-tempo/secrets/payables-proof-${host}.json`)
|
||||
.then(
|
||||
() => true,
|
||||
() => false,
|
||||
);
|
||||
assert(
|
||||
!exists,
|
||||
'An existing proof must be reconciled before creating a new one.',
|
||||
);
|
||||
}
|
||||
async function job(name) {
|
||||
const {stdout}=await run(php,['scripts/payable-history-pg.php',name],{cwd:process.cwd(),windowsHide:true,timeout:90000,maxBuffer:100000});
|
||||
const { stdout } = await run(
|
||||
php,
|
||||
['scripts/payable-history-pg.php', name],
|
||||
{
|
||||
cwd: process.cwd(),
|
||||
windowsHide: true,
|
||||
timeout: 90000,
|
||||
maxBuffer: 100000,
|
||||
},
|
||||
);
|
||||
return JSON.parse(stdout);
|
||||
}
|
||||
try {
|
||||
await run(php,[`${sgf}/scripts/payables-provision.php`,'--proof'],{cwd:sgf,windowsHide:true,timeout:180000,maxBuffer:100000});
|
||||
const before=await job('setup');
|
||||
const fault=await job('fault');
|
||||
assert(fault.fault_rolled_back);assert.equal(fault.business_fingerprint,before.business_fingerprint);
|
||||
const recognised=await Promise.all([job('validate'),job('validate')]);
|
||||
assert(recognised.every(result=>result.state==='recognised'));
|
||||
assert.equal(recognised[0].obligation_id,recognised[1].obligation_id);
|
||||
const after=await job('inspect');
|
||||
assert.equal(after.principal_minor,1160000);assert.equal(after.balance_minor,860000);
|
||||
assert.equal(after.confirmed_minor,300000);assert.equal(after.pending_minor,100000);assert.equal(after.rejected_minor,50000);
|
||||
assert.equal(after.obligations,1);assert.equal(after.imports,1);assert.equal(after.payment_links,3);
|
||||
assert.equal(after.business_fingerprint,before.business_fingerprint);
|
||||
assert(after.ui_balance_correct);assert(after.changed_history_refused);
|
||||
assert.equal(after.due_on,null);assert.equal(after.days_overdue,null);assert.equal(after.append_only_tables.length,2);
|
||||
if(process.argv.includes('--decisions')) {
|
||||
const fault=await job('decision_fault');
|
||||
assert(fault.rolled_back);assert.equal(fault.balance_minor,860000);
|
||||
const concurrent=await Promise.all([job('decision_confirm'),job('decision_confirm')]);
|
||||
assert(concurrent.every(r=>r.balance_minor===760000 && r.frozen===r.original));
|
||||
const final=await job('decision_inspect');
|
||||
assert.equal(final.balance_minor,760000);assert.equal(final.confirmed_minor,400000);assert.equal(final.pending_minor,0);
|
||||
assert.equal(final.decisions,1);assert.equal(final.events,1);assert.equal(final.original_status,'confirmed');assert(final.append_only);
|
||||
assert(concurrent.every(r=>r.frozen===final.frozen));
|
||||
await fs.writeFile('docs/proofs/payable-payment-decisions-pg.json',JSON.stringify({checked_at:new Date().toISOString(),passed:true,atomic_rollback:true,
|
||||
concurrent_decision_once:true,original_import_preserved:true,new_transfers_executed:false,scenario:final,visual_review:false},null,2)+'\n');
|
||||
await run(php, [`${sgf}/scripts/payables-provision.php`, '--proof'], {
|
||||
cwd: sgf,
|
||||
windowsHide: true,
|
||||
timeout: 180000,
|
||||
maxBuffer: 100000,
|
||||
});
|
||||
const before = await job('setup');
|
||||
const fault = await job('fault');
|
||||
assert(fault.fault_rolled_back);
|
||||
assert.equal(fault.business_fingerprint, before.business_fingerprint);
|
||||
const recognised = await Promise.all([job('validate'), job('validate')]);
|
||||
assert(recognised.every((result) => result.state === 'recognised'));
|
||||
assert.equal(recognised[0].obligation_id, recognised[1].obligation_id);
|
||||
const after = await job('inspect');
|
||||
assert.equal(after.principal_minor, 1160000);
|
||||
assert.equal(after.balance_minor, 860000);
|
||||
assert.equal(after.confirmed_minor, 300000);
|
||||
assert.equal(after.pending_minor, 100000);
|
||||
assert.equal(after.rejected_minor, 50000);
|
||||
assert.equal(after.obligations, 1);
|
||||
assert.equal(after.imports, 1);
|
||||
assert.equal(after.payment_links, 3);
|
||||
assert.equal(after.business_fingerprint, before.business_fingerprint);
|
||||
assert(after.ui_balance_correct);
|
||||
assert(after.changed_history_refused);
|
||||
assert.equal(after.due_on, null);
|
||||
assert.equal(after.days_overdue, null);
|
||||
assert.equal(after.append_only_tables.length, 2);
|
||||
if (process.argv.includes('--decisions')) {
|
||||
const fault = await job('decision_fault');
|
||||
assert(fault.rolled_back);
|
||||
assert.equal(fault.balance_minor, 860000);
|
||||
const concurrent = await Promise.all([
|
||||
job('decision_confirm'),
|
||||
job('decision_confirm'),
|
||||
]);
|
||||
assert(
|
||||
concurrent.every(
|
||||
(r) => r.balance_minor === 760000 && r.frozen === r.original,
|
||||
),
|
||||
);
|
||||
const final = await job('decision_inspect');
|
||||
assert.equal(final.balance_minor, 760000);
|
||||
assert.equal(final.confirmed_minor, 400000);
|
||||
assert.equal(final.pending_minor, 0);
|
||||
assert.equal(final.decisions, 1);
|
||||
assert.equal(final.events, 1);
|
||||
assert.equal(final.original_status, 'confirmed');
|
||||
assert(final.append_only);
|
||||
assert(concurrent.every((r) => r.frozen === final.frozen));
|
||||
await fs.writeFile(
|
||||
'docs/proofs/payable-payment-decisions-pg.json',
|
||||
JSON.stringify(
|
||||
{
|
||||
checked_at: new Date().toISOString(),
|
||||
passed: true,
|
||||
atomic_rollback: true,
|
||||
concurrent_decision_once: true,
|
||||
original_import_preserved: true,
|
||||
new_transfers_executed: false,
|
||||
scenario: final,
|
||||
visual_review: false,
|
||||
},
|
||||
null,
|
||||
2,
|
||||
) + '\n',
|
||||
);
|
||||
}
|
||||
await fs.writeFile('docs/proofs/payable-history-pg.json',JSON.stringify({checked_at:new Date().toISOString(),passed:true,
|
||||
fault_recovery:true,concurrent_recognition:true,original_business_history_unchanged:true,new_transfers_executed:false,
|
||||
scenario:after,visual_review:false},null,2)+'\n');
|
||||
console.log('PostgreSQL historical import passed: gross principal, single deduction, pending/rejected preservation, concurrency, rollback and immutable history.');
|
||||
await fs.writeFile(
|
||||
'docs/proofs/payable-history-pg.json',
|
||||
JSON.stringify(
|
||||
{
|
||||
checked_at: new Date().toISOString(),
|
||||
passed: true,
|
||||
fault_recovery: true,
|
||||
concurrent_recognition: true,
|
||||
original_business_history_unchanged: true,
|
||||
new_transfers_executed: false,
|
||||
scenario: after,
|
||||
visual_review: false,
|
||||
},
|
||||
null,
|
||||
2,
|
||||
) + '\n',
|
||||
);
|
||||
console.log(
|
||||
'PostgreSQL historical import passed: gross principal, single deduction, pending/rejected preservation, concurrency, rollback and immutable history.',
|
||||
);
|
||||
} finally {
|
||||
await run(php,[`${sgf}/scripts/payables-provision.php`,'--cleanup-proof'],{cwd:sgf,windowsHide:true,timeout:90000,maxBuffer:100000});
|
||||
await run(
|
||||
php,
|
||||
[`${sgf}/scripts/payables-provision.php`, '--cleanup-proof'],
|
||||
{ cwd: sgf, windowsHide: true, timeout: 90000, maxBuffer: 100000 },
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user