84 lines
2.8 KiB
JavaScript
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',
|
|
);
|
|
});
|