From d17b153808cb05902a63cb21a1f896f37a532c98 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Wed, 9 Sep 2026 06:59:25 -0300 Subject: [PATCH] test(f5): make runtime DI regression test metadata-stable --- .../test/unit/f5-runtime-di-contract.test.ts | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/api-v3/test/unit/f5-runtime-di-contract.test.ts b/api-v3/test/unit/f5-runtime-di-contract.test.ts index cef877e..462c531 100644 --- a/api-v3/test/unit/f5-runtime-di-contract.test.ts +++ b/api-v3/test/unit/f5-runtime-di-contract.test.ts @@ -1,20 +1,31 @@ import assert from 'node:assert/strict'; +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; import test from 'node:test'; import { MODULE_METADATA } from '@nestjs/common/constants'; import { AssetMasterModule } from '../../src/asset-master/asset-master.module'; import { InventoryFunctionService } from '../../src/asset-master/inventory-function.service'; -import { MergedInventoryDossierService } from '../../src/asset-master/merged-inventory-dossier.service'; -test('F5 AssetMasterModule keeps dossier-only function dependency injectable', () => { +test('F5 AssetMasterModule keeps dossier-only function dependency injectable without reopening its controller', () => { const providers = (Reflect.getMetadata(MODULE_METADATA.PROVIDERS, AssetMasterModule) ?? []) as unknown[]; - const dossierDependencies = (Reflect.getMetadata('design:paramtypes', MergedInventoryDossierService) ?? []) as unknown[]; + const controllers = (Reflect.getMetadata(MODULE_METADATA.CONTROLLERS, AssetMasterModule) ?? []) as Array<{ name?: string }>; + const dossierSource = readFileSync( + resolve(process.cwd(), 'src/asset-master/merged-inventory-dossier.service.ts'), + 'utf8', + ); - assert.ok( - dossierDependencies.includes(InventoryFunctionService), - 'MergedInventoryDossierService must still declare InventoryFunctionService for historical dossier data', + assert.match( + dossierSource, + /private readonly functions: InventoryFunctionService/, + 'MergedInventoryDossierService must still depend on InventoryFunctionService for historical dossier data', ); assert.ok( providers.includes(InventoryFunctionService), 'AssetMasterModule must provide InventoryFunctionService so production Nest bootstrap can resolve the dossier', ); + assert.equal( + controllers.some((controller) => controller?.name === 'InventoryFunctionController'), + false, + 'F5 must not reopen the retired Inventory Function controller', + ); });