From 020e744da1087e85d8c7741980f239c2977437c2 Mon Sep 17 00:00:00 2001 From: alexeh Date: Sun, 3 Mar 2024 12:09:55 +0300 Subject: [PATCH] Mock eudr repository --- api/src/modules/eudr-alerts/alerts.repository.ts | 3 ++- api/src/modules/eudr-alerts/eudr.module.ts | 9 +++++++-- .../modules/eudr-alerts/eudr.repositoty.interface.ts | 3 +++ api/src/modules/eudr-alerts/eudr.service.ts | 11 +++++++---- api/src/modules/eudr/eudr.repositoty.interface.ts | 3 --- .../modules/notifications/notifications.module.ts | 6 ++++-- api/test/utils/application-manager.ts | 10 +++++++--- api/test/utils/service-mocks.ts | 12 ++++++++++++ 8 files changed, 42 insertions(+), 15 deletions(-) create mode 100644 api/src/modules/eudr-alerts/eudr.repositoty.interface.ts delete mode 100644 api/src/modules/eudr/eudr.repositoty.interface.ts diff --git a/api/src/modules/eudr-alerts/alerts.repository.ts b/api/src/modules/eudr-alerts/alerts.repository.ts index ccea70d497..8abb26d9c6 100644 --- a/api/src/modules/eudr-alerts/alerts.repository.ts +++ b/api/src/modules/eudr-alerts/alerts.repository.ts @@ -5,6 +5,7 @@ import { AlertsOutput } from './dto/alerts-output.dto'; import { SA } from './SA'; import { ResourceStream } from '@google-cloud/paginator'; import { RowMetadata } from '@google-cloud/bigquery/build/src/table'; +import { IEUDRAlertsRepository } from './eudr.repositoty.interface'; const projectId: string = 'carto-dw-ac-zk2uhih6'; @@ -15,7 +16,7 @@ const BASE_DATASET: string = 'cartobq.eudr.dev_mock_data_optimized'; const limit: number = 1; @Injectable() -export class AlertsRepository { +export class AlertsRepository implements IEUDRAlertsRepository { bigQueryClient: BigQuery; BASE_DATASET: string = 'cartobq.eudr.dev_mock_data_optimized'; diff --git a/api/src/modules/eudr-alerts/eudr.module.ts b/api/src/modules/eudr-alerts/eudr.module.ts index 85eccb4320..46dc9d5a43 100644 --- a/api/src/modules/eudr-alerts/eudr.module.ts +++ b/api/src/modules/eudr-alerts/eudr.module.ts @@ -6,7 +6,9 @@ import { MaterialsModule } from 'modules/materials/materials.module'; import { SuppliersModule } from 'modules/suppliers/suppliers.module'; import { GeoRegionsModule } from 'modules/geo-regions/geo-regions.module'; import { AdminRegionsModule } from 'modules/admin-regions/admin-regions.module'; -import { AlertsRepository } from './alerts.repository'; +import { AlertsRepository } from 'modules/eudr-alerts/alerts.repository'; + +export const IEUDRAlertsRepositoryToken: string = 'IEUDRAlertsRepository'; @Module({ imports: [ @@ -16,7 +18,10 @@ import { AlertsRepository } from './alerts.repository'; GeoRegionsModule, AdminRegionsModule, ], - providers: [EudrService, AlertsRepository], + providers: [ + EudrService, + { provide: IEUDRAlertsRepositoryToken, useClass: AlertsRepository }, + ], controllers: [EudrController], }) export class EudrModule {} diff --git a/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts b/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts new file mode 100644 index 0000000000..12f3de2727 --- /dev/null +++ b/api/src/modules/eudr-alerts/eudr.repositoty.interface.ts @@ -0,0 +1,3 @@ +export interface IEUDRAlertsRepository { + select(): any; +} diff --git a/api/src/modules/eudr-alerts/eudr.service.ts b/api/src/modules/eudr-alerts/eudr.service.ts index eaab097cfe..1cf5983866 100644 --- a/api/src/modules/eudr-alerts/eudr.service.ts +++ b/api/src/modules/eudr-alerts/eudr.service.ts @@ -1,12 +1,15 @@ -import { Injectable } from '@nestjs/common'; -import { AlertsRepository } from './alerts.repository'; - +import { Inject, Injectable } from '@nestjs/common'; import { ResourceStream } from '@google-cloud/paginator'; import { RowMetadata } from '@google-cloud/bigquery/build/src/table'; +import { IEUDRAlertsRepositoryToken } from './eudr.module'; +import { IEUDRAlertsRepository } from './eudr.repositoty.interface'; @Injectable() export class EudrService { - constructor(private readonly alertsRepository: AlertsRepository) {} + constructor( + @Inject(IEUDRAlertsRepositoryToken) + private readonly alertsRepository: IEUDRAlertsRepository, + ) {} getAlerts(): ResourceStream { return this.alertsRepository.select(); diff --git a/api/src/modules/eudr/eudr.repositoty.interface.ts b/api/src/modules/eudr/eudr.repositoty.interface.ts deleted file mode 100644 index 5281989f2d..0000000000 --- a/api/src/modules/eudr/eudr.repositoty.interface.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IEudrRepository { - select(): Promise; -} diff --git a/api/src/modules/notifications/notifications.module.ts b/api/src/modules/notifications/notifications.module.ts index 4141870973..af3afaeb44 100644 --- a/api/src/modules/notifications/notifications.module.ts +++ b/api/src/modules/notifications/notifications.module.ts @@ -1,8 +1,10 @@ import { Module } from '@nestjs/common'; import { SendgridEmailService } from 'modules/notifications/email/sendgrid.email.service'; +export const IEmailServiceToken: string = 'IEmailService'; + @Module({ - providers: [{ provide: 'IEmailService', useClass: SendgridEmailService }], - exports: ['IEmailService'], + providers: [{ provide: IEmailServiceToken, useClass: SendgridEmailService }], + exports: [IEmailServiceToken], }) export class NotificationsModule {} diff --git a/api/test/utils/application-manager.ts b/api/test/utils/application-manager.ts index 2351df5152..fe2278b1af 100644 --- a/api/test/utils/application-manager.ts +++ b/api/test/utils/application-manager.ts @@ -9,7 +9,9 @@ import { TestingModuleBuilder } from '@nestjs/testing/testing-module.builder'; import { Type } from '@nestjs/common/interfaces'; import { TestingModule } from '@nestjs/testing/testing-module'; import { isUndefined } from 'lodash'; -import { MockEmailService } from './service-mocks'; +import { MockAlertRepository, MockEmailService } from './service-mocks'; +import { IEUDRAlertsRepositoryToken } from '../../src/modules/eudr-alerts/eudr.module'; +import { IEmailServiceToken } from '../../src/modules/notifications/notifications.module'; export default class ApplicationManager { static readonly regenerateResourcesOnEachTest: boolean = false; @@ -43,8 +45,10 @@ export default class ApplicationManager { Test.createTestingModule({ imports: [AppModule], }) - .overrideProvider('IEmailService') - .useClass(MockEmailService); + .overrideProvider(IEmailServiceToken) + .useClass(MockEmailService) + .overrideProvider(IEUDRAlertsRepositoryToken) + .useClass(MockAlertRepository); ApplicationManager.testApplication.moduleFixture = await testingModuleBuilder.compile(); diff --git a/api/test/utils/service-mocks.ts b/api/test/utils/service-mocks.ts index 1cb4351c08..98626b7b81 100644 --- a/api/test/utils/service-mocks.ts +++ b/api/test/utils/service-mocks.ts @@ -3,6 +3,7 @@ import { SendMailDTO, } from '../../src/modules/notifications/email/email.service.interface'; import { Logger } from '@nestjs/common'; +import { IEUDRAlertsRepository } from 'modules/eudr-alerts/eudr.repositoty.interface'; export class MockEmailService implements IEmailService { logger: Logger = new Logger(MockEmailService.name); @@ -12,3 +13,14 @@ export class MockEmailService implements IEmailService { return Promise.resolve(); } } + +export class MockAlertRepository implements IEUDRAlertsRepository { + logger: Logger = new Logger(MockAlertRepository.name); + + select(): any { + this.logger.warn(`Alert Repository Mock called... `); + return new Promise((resolve) => { + resolve([]); + }); + } +}