93 lines
3.4 KiB
JavaScript
93 lines
3.4 KiB
JavaScript
// Recalculate actual frozen evidence recovered by HTTP, without UI or database writes.
|
|
import assert from 'node:assert/strict';
|
|
import fs from 'node:fs';
|
|
import { recoverPathResult } from '../resources/js/lib/investor-path.ts';
|
|
const directory = new URL(
|
|
'../storage/app/private/investmoz-v2/portal-audit/',
|
|
import.meta.url,
|
|
);
|
|
const http = JSON.parse(
|
|
fs.readFileSync(new URL('investor-path-http-qa.json', directory), 'utf8'),
|
|
);
|
|
assert.match(http.target.database, /^desk_restore_\d{8}_\d{6}_test$/);
|
|
assert.equal(http.target.port, 55441);
|
|
assert.equal(http.api_persistence_passed, true);
|
|
const results = http.scenarios.map((scenario) => {
|
|
const result = recoverPathResult(scenario.recovered_financial_result);
|
|
assert.equal(
|
|
result.breakEven.value.breakEvenUnits,
|
|
String(scenario.expected_break_even_units),
|
|
);
|
|
assert.equal(
|
|
result.funding.value.gap,
|
|
scenario.expected_funding_gap.toFixed(2),
|
|
);
|
|
return {
|
|
scenario: scenario.scenario,
|
|
case_id: scenario.id,
|
|
result_id: scenario.result_id,
|
|
units: result.breakEven.value.breakEvenUnits,
|
|
funding_gap: result.funding.value.gap,
|
|
ui_verified: false,
|
|
};
|
|
});
|
|
const incompatible = [];
|
|
for (const filename of fs
|
|
.readdirSync(directory)
|
|
.filter((name) => /^investor-path-http-qa-\d.*\.json$/.test(name))) {
|
|
const previous = JSON.parse(
|
|
fs.readFileSync(new URL(filename, directory), 'utf8'),
|
|
);
|
|
for (const scenario of previous.scenarios ?? []) {
|
|
const result = scenario.recovered_financial_result;
|
|
const current = http.scenarios.find((item) => item.id === scenario.id);
|
|
if (
|
|
!result ||
|
|
!current?.prior_result_ids_preserved.includes(result.id) ||
|
|
incompatible.includes(result.id)
|
|
)
|
|
continue;
|
|
const snapshot = JSON.parse(result.financial_snapshot);
|
|
if (snapshot.data.incomes.length || snapshot.data.expenses.length)
|
|
continue;
|
|
assert.throws(
|
|
() => recoverPathResult(result),
|
|
/Entradas incompatíveis/,
|
|
);
|
|
incompatible.push(result.id);
|
|
}
|
|
}
|
|
const proof = {
|
|
captured_at: new Date().toISOString(),
|
|
target: http.target,
|
|
results,
|
|
passed: true,
|
|
source: 'Actual frozen financial result recovered after a new authenticated HTTP session',
|
|
preserved_incompatible_prior_results: incompatible,
|
|
engine: 'financial-calculators:v1',
|
|
interface_observed: false,
|
|
active_writes: 0,
|
|
};
|
|
const mfaFile = new URL('mfa-http-qa.json', directory);
|
|
if (fs.existsSync(mfaFile)) {
|
|
const mfa = JSON.parse(fs.readFileSync(mfaFile, 'utf8'));
|
|
assert.deepEqual(mfa.target, http.target);
|
|
assert.equal(mfa.login_mfa_logout_new_session_passed, true);
|
|
const result = recoverPathResult(mfa.scenario_A.recovered_financial_result);
|
|
assert.equal(result.breakEven.value.breakEvenUnits, '20');
|
|
assert.equal(result.funding.value.gap, '0.00');
|
|
proof.mfa_scenario_A = {
|
|
case_id: mfa.scenario_A.id,
|
|
result_id: mfa.scenario_A.result_id,
|
|
units: '20',
|
|
funding_gap: '0.00',
|
|
source: 'Recovered after a new MFA-authenticated HTTP session',
|
|
ui_verified: false,
|
|
};
|
|
}
|
|
fs.writeFileSync(
|
|
new URL('investor-path-recovered-calculations.json', directory),
|
|
JSON.stringify(proof, null, 2),
|
|
);
|
|
console.log(JSON.stringify(proof));
|