Files
Investidor-V2/tests/frontend/investment-field-origin.test.mjs
T

84 lines
2.8 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { inheritCompatibleFields } from '../../resources/js/lib/context-inheritance.ts';
import {
buildProjectDossierRows,
exportProjectDossierCsv,
} from '../../resources/js/lib/project-dossier.ts';
import {
createProjectDossierReport,
createProjectDossierPrintHtml,
} from '../../resources/js/lib/project-dossier-report.ts';
void test('reports distinguish opportunity inheritance, dossier declarations and later edits without rewriting the snapshot', async () => {
const source = {
project_title: 'Título do promotor',
project_summary: 'Resumo da oportunidade',
sector_id: '1',
sector_id_label: 'Agronegócio',
context_applicability_snapshot: JSON.stringify({
version: 1,
field_provenance: {
project_summary: {
kind: 'opportunity',
title: 'Florestas — Corredor da Beira',
version: 2,
},
sector_id: {
kind: 'opportunity',
title: 'Florestas — Corredor da Beira',
version: 2,
},
project_title: {
kind: 'process_declaration',
context_revision: 1,
},
},
}),
};
const inherited = inheritCompatibleFields(
'dossier:A:simulator',
{},
source,
null,
);
const draft = { ...inherited.patch, context_reuse: inherited.metadata };
let rows = buildProjectDossierRows(draft);
assert.match(
rows.find((r) => r[1] === 'Resumo')[3],
/Herdado de oportunidade «Florestas/,
);
assert.match(
rows.find((r) => r[1] === 'Título')[3],
/dados introduzidos pelo utilizador no dossier/,
);
const edited = {
...draft,
project_summary: 'Resumo alterado no simulador',
};
const before = JSON.stringify(edited);
rows = buildProjectDossierRows(edited);
assert.match(
rows.find((r) => r[1] === 'Resumo')[3],
/Alterado posteriormente pelo utilizador; origem anterior: oportunidade/,
);
assert.match(
exportProjectDossierCsv(edited),
/origem anterior: oportunidade/,
);
const report = createProjectDossierReport(edited, {
selectedSections: new Set(['summary', 'project']),
});
assert.match(
await createProjectDossierPrintHtml(report, [], false),
/Resumo alterado no simulador/,
);
assert.equal(JSON.stringify(edited), before);
assert.equal(
buildProjectDossierRows({ project_summary: 'Legado' }).find(
(r) => r[1] === 'Resumo',
)[3],
'Declarado pelo utilizador',
);
});