fix(api): apply feedback

This commit is contained in:
yassinedorbozgithub 2025-06-16 17:33:45 +01:00
parent d2b9c1248c
commit 91f1368206

View File

@ -104,7 +104,7 @@ const getModel = (name: string, suffix = ''): ModelDefinition => {
const model = LifecycleHookManager.getModel(modelName); const model = LifecycleHookManager.getModel(modelName);
if (!model) { if (!model) {
throw new Error(`Unable to find '${modelName}' model!`); throw new Error(`Unable to find model for name '${modelName}!`);
} }
return model; return model;
@ -127,7 +127,7 @@ const filterNestedDependencies = (dependency: Provider) =>
dependency.valueOf().toString().slice(0, 6) === 'class '; dependency.valueOf().toString().slice(0, 6) === 'class ';
const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => { const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => {
const nestedDependencies: Provider[] = []; const nestedDependencies = new Set<Provider>();
dynamicProviders.filter(filterNestedDependencies).forEach((provider) => { dynamicProviders.filter(filterNestedDependencies).forEach((provider) => {
getClassDependencies(provider) getClassDependencies(provider)
@ -141,20 +141,20 @@ const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => {
dynamicProvider.provide === dependency, dynamicProvider.provide === dependency,
) )
) { ) {
nestedDependencies.push(dependency); nestedDependencies.add(dependency);
} }
}); });
}); });
return nestedDependencies; return [...nestedDependencies];
}; };
const canInjectModels = (imports: buildTestingMocksProps['imports']): boolean => const canInjectModels = (imports: buildTestingMocksProps['imports']): boolean =>
(imports || []).findIndex( (imports || []).some(
(dynamicModule) => (dynamicModule) =>
'module' in dynamicModule && 'module' in dynamicModule &&
dynamicModule.module.name === 'MongooseModule', dynamicModule.module.name === 'MongooseModule',
) > -1; );
const getModels = (models: TModel[]): ModelDefinition[] => const getModels = (models: TModel[]): ModelDefinition[] =>
models.map((model) => models.map((model) =>
@ -169,16 +169,22 @@ export const buildTestingMocks = async ({
autoInjectFrom, autoInjectFrom,
...rest ...rest
}: buildTestingMocksProps) => { }: buildTestingMocksProps) => {
const nestedProviders: Provider[] = []; const nestedProviders = new Set<Provider>();
const injectionFrom = autoInjectFrom as ToUnionArray<typeof autoInjectFrom>; const injectionFrom = autoInjectFrom as ToUnionArray<typeof autoInjectFrom>;
const canAutoInjectFromAll = injectionFrom?.includes('all'); const canAutoInjectFromAll = injectionFrom?.includes('all');
const canAutoInjectFromProviders = injectionFrom?.includes('providers');
const canAutoInjectFromControllers = injectionFrom?.includes('controllers');
if (canAutoInjectFromAll || injectionFrom?.includes('providers')) { if (canAutoInjectFromAll || canAutoInjectFromProviders) {
nestedProviders.push(...providers, ...getNestedDependencies(providers)); [...providers, ...getNestedDependencies(providers)].forEach((provider) =>
nestedProviders.add(provider),
);
} }
if (canAutoInjectFromAll || injectionFrom?.includes('controllers')) { if (canAutoInjectFromAll || canAutoInjectFromControllers) {
nestedProviders.push(...controllers, ...getNestedDependencies(controllers)); [...getNestedDependencies(controllers)].forEach((controller) =>
nestedProviders.add(controller),
);
} }
const module = await Test.createTestingModule({ const module = await Test.createTestingModule({
@ -188,7 +194,7 @@ export const buildTestingMocks = async ({
MongooseModule.forFeature([ MongooseModule.forFeature([
...getModels(models), ...getModels(models),
...(autoInjectFrom ...(autoInjectFrom
? getNestedModels(nestedProviders, 'Repository') ? getNestedModels([...nestedProviders], 'Repository')
: []), : []),
]), ]),
] ]
@ -206,7 +212,7 @@ export const buildTestingMocks = async ({
get: jest.fn(), get: jest.fn(),
}, },
}, },
...(autoInjectFrom ? nestedProviders : []), ...(autoInjectFrom ? [...nestedProviders] : []),
...providers, ...providers,
], ],
controllers, controllers,