test(api): cubrir fallo global de actividad
This commit is contained in:
@@ -0,0 +1,47 @@
|
|||||||
|
import 'reflect-metadata';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import test from 'node:test';
|
||||||
|
import { readFileSync } from 'node:fs';
|
||||||
|
import { ActivityDossierService } from '../../src/asset-master/activity-dossier.service';
|
||||||
|
|
||||||
|
test('F7 Actividad no usa DISTINCT con ORDER BY COALESCE en visitas', () => {
|
||||||
|
const source = readFileSync('src/asset-master/activity-dossier.service.ts', 'utf8');
|
||||||
|
assert.doesNotMatch(source, /SELECT\s+DISTINCT\s+visit\.id/i);
|
||||||
|
assert.match(source, /ORDER BY COALESCE\(visit\.actual_started_at, visit\.planned_start_at, visit\.created_at\) DESC/);
|
||||||
|
assert.match(source, /EXISTS \(\s*SELECT 1\s*FROM inspection_visit_assets/s);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('F7 una faceta auxiliar defectuosa no derriba todo el expediente', async () => {
|
||||||
|
const dataSource = {
|
||||||
|
query: async (sql: string) => {
|
||||||
|
if (sql.includes('FROM assets\n WHERE id = $1')) {
|
||||||
|
return [{
|
||||||
|
id: 'bcba740f-cc84-48b3-8d06-88a9c439e25c',
|
||||||
|
code: 'YAC-0005',
|
||||||
|
name: 'Agua Botada',
|
||||||
|
commonName: null,
|
||||||
|
createdAt: new Date('2026-01-01T00:00:00Z'),
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
if (sql.includes('inspection_finding_communications')) {
|
||||||
|
throw new Error('simulated optional facet failure');
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const service = new ActivityDossierService(dataSource as never);
|
||||||
|
const dossier = await service.dossier('bcba740f-cc84-48b3-8d06-88a9c439e25c') as {
|
||||||
|
asset: { code: string; name: string };
|
||||||
|
counters: { inspections: number; findings: number };
|
||||||
|
warnings: string[];
|
||||||
|
timeline: unknown[];
|
||||||
|
};
|
||||||
|
|
||||||
|
assert.equal(dossier.asset.code, 'YAC-0005');
|
||||||
|
assert.equal(dossier.asset.name, 'Agua Botada');
|
||||||
|
assert.equal(dossier.counters.inspections, 0);
|
||||||
|
assert.equal(dossier.counters.findings, 0);
|
||||||
|
assert.deepEqual(dossier.warnings, ['communications']);
|
||||||
|
assert.deepEqual(dossier.timeline, []);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user