From 474e8d43107f2534578701ea9eb0972973e69602 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Fri, 11 Sep 2026 00:59:56 -0300 Subject: [PATCH] test: lock authoritative inventory SQL model --- .../authoritative-inventory-model.test.ts | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 api-v3/test/unit/authoritative-inventory-model.test.ts diff --git a/api-v3/test/unit/authoritative-inventory-model.test.ts b/api-v3/test/unit/authoritative-inventory-model.test.ts new file mode 100644 index 0000000..7379f39 --- /dev/null +++ b/api-v3/test/unit/authoritative-inventory-model.test.ts @@ -0,0 +1,50 @@ +import assert from 'node:assert/strict'; +import test from 'node:test'; +import { + AUTHORITATIVE_INVENTORY_MODEL as model, + AUTHORITATIVE_INVENTORY_MODEL_SOURCES as sources, +} from '../../src/reference-data/authoritative-inventory-model'; + +test('authoritative SQL sources keep their exact cardinalities', () => { + assert.equal(sources.territory.file, 'modelo_yacimientos.sql'); + assert.equal(sources.territory.sha256, '6a1d96bc8af7e755dd0e2fd9faf08335625b9c76865208c3b8413d868aa5eb1a'); + assert.equal(sources.inventory.file, 'modelo_relacional instalaciones y sub.sql'); + assert.equal(sources.inventory.sha256, 'fb513f3909e78db298361a8a6998ca77026748f9b03cbab44c77b884ca862b49'); + assert.equal(model.departments.length, 7); + assert.equal(model.companies.length, 13); + assert.equal(model.concessionTypes.length, 2); + assert.equal(model.areas.length, 64); + assert.equal(model.fields.length, 230); + assert.equal(model.installationFamilies.length, 14); + assert.equal(model.subinstallationFamilies.length, 109); + assert.equal(model.findings.length, 181); + assert.equal(model.installationFindings.length, 48); + assert.equal(model.subinstallationFindings.length, 880); +}); + +test('Area belongs only to Departamento while Yacimiento owns Area Empresa and concession', () => { + for (const area of model.areas) { + assert.ok(model.departments.some((department) => department.id === area.departamento_id)); + assert.deepEqual(Object.keys(area).sort(), ['departamento_id', 'id', 'nombre']); + } + for (const field of model.fields) { + assert.ok(model.areas.some((area) => area.id === field.area_id)); + assert.ok(model.companies.some((company) => company.id === field.empresa_id)); + assert.ok(model.concessionTypes.some((type) => type.id === field.tipo_concesion_id)); + assert.deepEqual(Object.keys(field).sort(), ['area_id', 'empresa_id', 'id', 'nombre', 'tipo_concesion_id']); + } +}); + +test('Subinstalación classifications belong to one installation classification and every mapping resolves', () => { + for (const subinstallation of model.subinstallationFamilies) { + assert.ok(model.installationFamilies.some((installation) => installation.id === subinstallation.instalacion_id)); + } + for (const mapping of model.installationFindings) { + assert.ok(model.installationFamilies.some((installation) => installation.id === mapping.instalacion_id)); + assert.ok(model.findings.some((finding) => finding.id === mapping.hallazgo_id)); + } + for (const mapping of model.subinstallationFindings) { + assert.ok(model.subinstallationFamilies.some((subinstallation) => subinstallation.id === mapping.subinstalacion_id)); + assert.ok(model.findings.some((finding) => finding.id === mapping.hallazgo_id)); + } +});