Files
dh-inspeccion-v2/api-v3/test/unit/f6-15-act-map-context.test.ts
T
admin a414d0ed36
DH V2 CI / API · typecheck, tests, build (push) Successful in 36s
Production dependency audit / API · production dependencies (push) Successful in 8s
Production dependency audit / WEB · production dependencies (push) Successful in 9s
DH V2 CI / WEB · typecheck, build (push) Successful in 1m37s
DH V2 CI / Docker / migrations / production images (push) Successful in 1m52s
DH V2 CI / Promote verified main to deploy (push) Successful in 4s
Android CI / RC / Android · lint, tests, debug APK, release compile (push) Successful in 4m11s
fix(web): clarify act context and operational map
2026-09-16 08:29:19 -03:00

61 lines
3.0 KiB
TypeScript

import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
import test from 'node:test';
function api(path: string) { return readFileSync(resolve(process.cwd(), path), 'utf8'); }
function web(path: string) { return readFileSync(resolve(process.cwd(), `../web-v2/src/${path}`), 'utf8'); }
test('F6.15 Acta exposes full territorial and affected-inventory context', () => {
const acts = api('src/inspection-acts/inspection-acts.service.ts');
const findings = api('src/inspection-findings/inspection-findings.service.ts');
const page = web('pages/InspectionActEditorPage.tsx');
const media = web('features/inspections/InspectionActMediaPanel.tsx');
for (const field of ['department', 'area', 'yacimiento', 'company', 'installations', 'subinstallations']) {
assert.match(acts, new RegExp(`'${field}'`));
}
assert.match(acts, /legacyAreaScope/);
assert.match(findings, /'hierarchy'/);
assert.match(findings, /'installation'/);
assert.match(findings, /'subinstallation'/);
assert.match(page, /Ubicación territorial y operativa/);
assert.match(page, /No definido en la Inspección histórica/);
assert.match(media, /Elemento afectado:/);
assert.match(media, /Constatación:/);
});
test('F6.15 Acta uses real report workflow state instead of legacy generated PDF status', () => {
const acts = api('src/inspection-acts/inspection-acts.service.ts');
const page = web('pages/InspectionActEditorPage.tsx');
const list = web('pages/ActsPage.tsx');
assert.match(acts, /'gedoIfIdentifier'/);
assert.match(acts, /'gedoOfficializedAt'/);
assert.match(acts, /'wordStatus'/);
assert.match(page, /act\.report\.status === 'OFFICIALIZED'/);
assert.match(page, /Oficializado en GEDO/);
assert.doesNotMatch(page, /act\.report\.pdfStatus === 'READY'/);
assert.match(list, /act\.report\.status === 'OFFICIALIZED'/);
});
test('F6.15 map exposes filtered operational layers without inventing coordinates', () => {
const controller = api('src/asset-master/asset-geometries.controller.ts');
const service = api('src/asset-master/asset-geometries.service.ts');
const page = web('pages/MapPage.tsx');
const map = web('features/map/DhMap.tsx');
assert.match(controller, /@Controller\('map\/context'\)/);
assert.match(controller, /@Controller\('map\/documents'\)/);
assert.match(service, /WITH RECURSIVE y_tree/);
assert.match(service, /ST_Centroid\(ST_Collect\(geometry\.geometry\)\)/);
assert.match(service, /COALESCE\(finding\.target_geometry,finding\.fallback_geometry\)/);
for (const kind of ['YACIMIENTO', 'COMPANY', 'ACT', 'FINDING']) {
assert.match(service, new RegExp(`'${kind}'::text`));
assert.match(page, new RegExp(`${kind}:`));
}
assert.match(page, /Buscar Yacimiento, Empresa, Acta, Hallazgo/);
assert.match(page, /sourceGeometries/);
assert.match(map, /yacimiento-points/);
assert.match(map, /company-points/);
assert.match(map, /act-points/);
assert.match(map, /finding-points/);
});