mirror of
https://github.com/hexastack/hexabot
synced 2025-06-26 18:27:28 +00:00
fix(api): enhance logic
This commit is contained in:
parent
6438ccda3c
commit
f6c6ebfa3f
@ -111,12 +111,12 @@ const getModel = (name: string, suffix = ''): ModelDefinition => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const getNestedModels = (
|
const getNestedModels = (
|
||||||
dynamicProviders: Provider[],
|
extendedProviders: Provider[],
|
||||||
suffix = '',
|
suffix = '',
|
||||||
): ModelDefinition[] =>
|
): ModelDefinition[] =>
|
||||||
dynamicProviders.reduce((acc, dynamicProvider) => {
|
extendedProviders.reduce((acc, extendedProvider) => {
|
||||||
if ('name' in dynamicProvider && dynamicProvider.name.endsWith(suffix)) {
|
if ('name' in extendedProvider && extendedProvider.name.endsWith(suffix)) {
|
||||||
const model = getModel(dynamicProvider.name, suffix);
|
const model = getModel(extendedProvider.name, suffix);
|
||||||
acc.push(model);
|
acc.push(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,19 +126,18 @@ const getNestedModels = (
|
|||||||
const filterNestedDependencies = (dependency: Provider) =>
|
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 = (providers: Provider[]): Provider[] => {
|
||||||
const nestedDependencies = new Set<Provider>();
|
const nestedDependencies = new Set<Provider>();
|
||||||
|
|
||||||
dynamicProviders.filter(filterNestedDependencies).forEach((provider) => {
|
providers.filter(filterNestedDependencies).forEach((provider) => {
|
||||||
getClassDependencies(provider)
|
getClassDependencies(provider)
|
||||||
.filter(filterNestedDependencies)
|
.filter(filterNestedDependencies)
|
||||||
.forEach((dependency) => {
|
.forEach((dependency) => {
|
||||||
if (
|
if (
|
||||||
!dynamicProviders.includes(dependency) &&
|
!providers.includes(dependency) &&
|
||||||
!dynamicProviders.find(
|
!providers.find(
|
||||||
(dynamicProvider) =>
|
(provider) =>
|
||||||
'provide' in dynamicProvider &&
|
'provide' in provider && provider.provide === dependency,
|
||||||
dynamicProvider.provide === dependency,
|
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
nestedDependencies.add(dependency);
|
nestedDependencies.add(dependency);
|
||||||
@ -151,9 +150,7 @@ const getNestedDependencies = (dynamicProviders: Provider[]): Provider[] => {
|
|||||||
|
|
||||||
const canInjectModels = (imports: buildTestingMocksProps['imports']): boolean =>
|
const canInjectModels = (imports: buildTestingMocksProps['imports']): boolean =>
|
||||||
(imports || []).some(
|
(imports || []).some(
|
||||||
(dynamicModule) =>
|
(module) => 'module' in module && module.module.name === 'MongooseModule',
|
||||||
'module' in dynamicModule &&
|
|
||||||
dynamicModule.module.name === 'MongooseModule',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const getModels = (models: TModel[]): ModelDefinition[] =>
|
const getModels = (models: TModel[]): ModelDefinition[] =>
|
||||||
@ -169,23 +166,23 @@ export const buildTestingMocks = async ({
|
|||||||
autoInjectFrom,
|
autoInjectFrom,
|
||||||
...rest
|
...rest
|
||||||
}: buildTestingMocksProps) => {
|
}: buildTestingMocksProps) => {
|
||||||
const nestedProviders = new Set<Provider>();
|
const extendedProviders = new Set<Provider>();
|
||||||
const injectionFrom = autoInjectFrom as ToUnionArray<typeof autoInjectFrom>;
|
const injectionFrom = autoInjectFrom as ToUnionArray<typeof autoInjectFrom>;
|
||||||
const canAutoInjectFromProviders = injectionFrom?.includes('providers');
|
|
||||||
const canAutoInjectFromControllers = injectionFrom?.includes('controllers');
|
|
||||||
|
|
||||||
if (canAutoInjectFromProviders) {
|
if (injectionFrom?.includes('providers')) {
|
||||||
[...providers, ...getNestedDependencies(providers)].forEach((provider) =>
|
[...getNestedDependencies(providers)].forEach((provider) =>
|
||||||
nestedProviders.add(provider),
|
extendedProviders.add(provider),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canAutoInjectFromControllers) {
|
if (injectionFrom?.includes('controllers')) {
|
||||||
[...getNestedDependencies(controllers)].forEach((controller) =>
|
[...getNestedDependencies(controllers)].forEach((controller) =>
|
||||||
nestedProviders.add(controller),
|
extendedProviders.add(controller),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
providers.forEach((provider) => extendedProviders.add(provider));
|
||||||
|
|
||||||
const module = await Test.createTestingModule({
|
const module = await Test.createTestingModule({
|
||||||
imports: [
|
imports: [
|
||||||
...(canInjectModels(imports)
|
...(canInjectModels(imports)
|
||||||
@ -193,7 +190,7 @@ export const buildTestingMocks = async ({
|
|||||||
MongooseModule.forFeature([
|
MongooseModule.forFeature([
|
||||||
...getModels(models),
|
...getModels(models),
|
||||||
...(autoInjectFrom
|
...(autoInjectFrom
|
||||||
? getNestedModels([...nestedProviders], 'Repository')
|
? getNestedModels([...extendedProviders], 'Repository')
|
||||||
: []),
|
: []),
|
||||||
]),
|
]),
|
||||||
]
|
]
|
||||||
@ -211,8 +208,7 @@ export const buildTestingMocks = async ({
|
|||||||
get: jest.fn(),
|
get: jest.fn(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
...(autoInjectFrom ? [...nestedProviders] : []),
|
...extendedProviders,
|
||||||
...providers,
|
|
||||||
],
|
],
|
||||||
controllers,
|
controllers,
|
||||||
...rest,
|
...rest,
|
||||||
|
Loading…
Reference in New Issue
Block a user