From f6c6ebfa3fa567ad8f8e698669ce4ede6696f2c9 Mon Sep 17 00:00:00 2001 From: yassinedorbozgithub Date: Thu, 19 Jun 2025 06:23:36 +0100 Subject: [PATCH] fix(api): enhance logic --- api/src/utils/test/utils.ts | 46 +++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 25 deletions(-) diff --git a/api/src/utils/test/utils.ts b/api/src/utils/test/utils.ts index 5b800d9b..90f59ba6 100644 --- a/api/src/utils/test/utils.ts +++ b/api/src/utils/test/utils.ts @@ -111,12 +111,12 @@ const getModel = (name: string, suffix = ''): ModelDefinition => { }; const getNestedModels = ( - dynamicProviders: Provider[], + extendedProviders: Provider[], suffix = '', ): ModelDefinition[] => - dynamicProviders.reduce((acc, dynamicProvider) => { - if ('name' in dynamicProvider && dynamicProvider.name.endsWith(suffix)) { - const model = getModel(dynamicProvider.name, suffix); + extendedProviders.reduce((acc, extendedProvider) => { + if ('name' in extendedProvider && extendedProvider.name.endsWith(suffix)) { + const model = getModel(extendedProvider.name, suffix); acc.push(model); } @@ -126,19 +126,18 @@ const getNestedModels = ( const filterNestedDependencies = (dependency: Provider) => dependency.valueOf().toString().slice(0, 6) === 'class '; -const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => { +const getNestedDependencies = (providers: Provider[]): Provider[] => { const nestedDependencies = new Set(); - dynamicProviders.filter(filterNestedDependencies).forEach((provider) => { + providers.filter(filterNestedDependencies).forEach((provider) => { getClassDependencies(provider) .filter(filterNestedDependencies) .forEach((dependency) => { if ( - !dynamicProviders.includes(dependency) && - !dynamicProviders.find( - (dynamicProvider) => - 'provide' in dynamicProvider && - dynamicProvider.provide === dependency, + !providers.includes(dependency) && + !providers.find( + (provider) => + 'provide' in provider && provider.provide === dependency, ) ) { nestedDependencies.add(dependency); @@ -151,9 +150,7 @@ const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => { const canInjectModels = (imports: buildTestingMocksProps['imports']): boolean => (imports || []).some( - (dynamicModule) => - 'module' in dynamicModule && - dynamicModule.module.name === 'MongooseModule', + (module) => 'module' in module && module.module.name === 'MongooseModule', ); const getModels = (models: TModel[]): ModelDefinition[] => @@ -169,23 +166,23 @@ export const buildTestingMocks = async ({ autoInjectFrom, ...rest }: buildTestingMocksProps) => { - const nestedProviders = new Set(); + const extendedProviders = new Set(); const injectionFrom = autoInjectFrom as ToUnionArray; - const canAutoInjectFromProviders = injectionFrom?.includes('providers'); - const canAutoInjectFromControllers = injectionFrom?.includes('controllers'); - if (canAutoInjectFromProviders) { - [...providers, ...getNestedDependencies(providers)].forEach((provider) => - nestedProviders.add(provider), + if (injectionFrom?.includes('providers')) { + [...getNestedDependencies(providers)].forEach((provider) => + extendedProviders.add(provider), ); } - if (canAutoInjectFromControllers) { + if (injectionFrom?.includes('controllers')) { [...getNestedDependencies(controllers)].forEach((controller) => - nestedProviders.add(controller), + extendedProviders.add(controller), ); } + providers.forEach((provider) => extendedProviders.add(provider)); + const module = await Test.createTestingModule({ imports: [ ...(canInjectModels(imports) @@ -193,7 +190,7 @@ export const buildTestingMocks = async ({ MongooseModule.forFeature([ ...getModels(models), ...(autoInjectFrom - ? getNestedModels([...nestedProviders], 'Repository') + ? getNestedModels([...extendedProviders], 'Repository') : []), ]), ] @@ -211,8 +208,7 @@ export const buildTestingMocks = async ({ get: jest.fn(), }, }, - ...(autoInjectFrom ? [...nestedProviders] : []), - ...providers, + ...extendedProviders, ], controllers, ...rest,