From f5ce6ca005d1917aeaacea7ebf1b946035d71c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Chevalier?= Date: Tue, 23 May 2023 15:38:20 +0200 Subject: [PATCH] adding ad default parameters to .env --- .env.dist | 13 +++ .../secondaries/default-params.provider.ts | 23 +++--- .../ad/domain/dtos/create-ad.request.ts | 1 - .../dtos/utils/has-driver-seats.validator.ts | 3 +- .../utils/has-passenger-seats.validator.ts | 3 +- .../ad/domain/entities/ReccurentNormaliser.ts | 2 - .../ad/domain/types/default-params.type.ts | 4 +- .../ad/domain/usecases/create-ad.usecase.ts | 9 +-- .../ad/tests/unit/create-ad.usecase.spec.ts | 80 +++++++++++++------ 9 files changed, 85 insertions(+), 53 deletions(-) diff --git a/.env.dist b/.env.dist index 062c6d0..50f85dd 100644 --- a/.env.dist +++ b/.env.dist @@ -15,3 +15,16 @@ RMQ_EXCHANGE=mobicoop REDIS_HOST=v3-redis REDIS_PASSWORD=redis REDIS_PORT=6379 + +# DEFAULT CARPOOL DEPARTURE MARGIN (in seconds) +DEPARTURE_MARGIN=900 + +# DEFAULT ROLE +ROLE=passenger + +# SEATS PROVIDED AS DRIVER / REQUESTED AS PASSENGER +SEATS_PROVIDED=3 +SEATS_REQUESTED=1 + +# ACCEPT ONLY SAME FREQUENCY REQUESTS +STRICT_FREQUENCY=false \ No newline at end of file diff --git a/src/modules/ad/adapters/secondaries/default-params.provider.ts b/src/modules/ad/adapters/secondaries/default-params.provider.ts index 8c6e256..370888f 100644 --- a/src/modules/ad/adapters/secondaries/default-params.provider.ts +++ b/src/modules/ad/adapters/secondaries/default-params.provider.ts @@ -6,20 +6,19 @@ import { IProvideParams } from '../../domain/interfaces/param-provider.interface @Injectable() export class DefaultParamsProvider implements IProvideParams { constructor(private readonly configService: ConfigService) {} - //TODO adding config service getParams = (): DefaultParams => { return { - MON_MARGIN: 900, - TUE_MARGIN: 900, - WED_MARGIN: 900, - THU_MARGIN: 900, - FRI_MARGIN: 900, - SAT_MARGIN: 900, - SUN_MARGIN: 900, - DRIVER: false, - DRIVER_SEAT: 0, - PASSENGER: true, - PASSENGER_SEATS: 1, + MON_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + TUE_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + WED_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + THU_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + FRI_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + SAT_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + SUN_MARGIN: this.configService.get('DEPARTURE_MARGIN'), + DRIVER: this.configService.get('ROLE') == 'driver' ? true : false, + SEATS_PROVIDED: this.configService.get('SEATS_PROVIDED'), + PASSENGER: this.configService.get('ROLE') == 'passenger' ? true : false, + SEATS_REQUESTED: this.configService.get('SEATS_REQUESTED'), STRICT: false, }; }; diff --git a/src/modules/ad/domain/dtos/create-ad.request.ts b/src/modules/ad/domain/dtos/create-ad.request.ts index 1da5052..b1d0ccd 100644 --- a/src/modules/ad/domain/dtos/create-ad.request.ts +++ b/src/modules/ad/domain/dtos/create-ad.request.ts @@ -50,7 +50,6 @@ export class CreateAdRequest { @AutoMap() frequency: Frequency; - // TODO create a proper validator @ValidateIf((ad) => ad.frequency === 'PUNCTUAL') @Type(() => Date) @IsDate() diff --git a/src/modules/ad/domain/dtos/utils/has-driver-seats.validator.ts b/src/modules/ad/domain/dtos/utils/has-driver-seats.validator.ts index 696e4e0..0ad1316 100644 --- a/src/modules/ad/domain/dtos/utils/has-driver-seats.validator.ts +++ b/src/modules/ad/domain/dtos/utils/has-driver-seats.validator.ts @@ -4,8 +4,7 @@ import { ValidationOptions, buildMessage, } from 'class-validator'; -// TODO refactor ?? -// TODO propely set driver max limit + export function hasProperDriverSeats(value: any, args: ValidationArguments) { if (value === true && typeof args.object['seatsDriver'] === 'number') return args.object['seatsDriver'] > 0; diff --git a/src/modules/ad/domain/dtos/utils/has-passenger-seats.validator.ts b/src/modules/ad/domain/dtos/utils/has-passenger-seats.validator.ts index b443c60..9085016 100644 --- a/src/modules/ad/domain/dtos/utils/has-passenger-seats.validator.ts +++ b/src/modules/ad/domain/dtos/utils/has-passenger-seats.validator.ts @@ -4,8 +4,7 @@ import { ValidationOptions, buildMessage, } from 'class-validator'; -// TODO refactor ?? -// TODO propely set passenger max limit + export function hasProperPassengerSeats(value: any, args: ValidationArguments) { if (value === true && typeof args.object['seatsPassenger'] === 'number') return args.object['seatsPassenger'] > 0; diff --git a/src/modules/ad/domain/entities/ReccurentNormaliser.ts b/src/modules/ad/domain/entities/ReccurentNormaliser.ts index 2a1fcbd..2f9e7a2 100644 --- a/src/modules/ad/domain/entities/ReccurentNormaliser.ts +++ b/src/modules/ad/domain/entities/ReccurentNormaliser.ts @@ -3,8 +3,6 @@ import { CreateAdRequest } from '../dtos/create-ad.request'; import { Frequency } from '../types/frequency.enum'; export class ReccurentNormaliser { - constructor() {} - fromDateResolver(createAdRequest: CreateAdRequest): Date { if (createAdRequest.frequency === Frequency.PUNCTUAL) return createAdRequest.departure; diff --git a/src/modules/ad/domain/types/default-params.type.ts b/src/modules/ad/domain/types/default-params.type.ts index 296fbc6..8fee5e0 100644 --- a/src/modules/ad/domain/types/default-params.type.ts +++ b/src/modules/ad/domain/types/default-params.type.ts @@ -7,8 +7,8 @@ export type DefaultParams = { SAT_MARGIN: number; SUN_MARGIN: number; DRIVER: boolean; - DRIVER_SEAT: number; + SEATS_PROVIDED: number; PASSENGER: boolean; - PASSENGER_SEATS: number; + SEATS_REQUESTED: number; STRICT: boolean; }; diff --git a/src/modules/ad/domain/usecases/create-ad.usecase.ts b/src/modules/ad/domain/usecases/create-ad.usecase.ts index ad80775..b5731da 100644 --- a/src/modules/ad/domain/usecases/create-ad.usecase.ts +++ b/src/modules/ad/domain/usecases/create-ad.usecase.ts @@ -11,7 +11,6 @@ import { IProvideParams } from '../interfaces/param-provider.interface'; import { DefaultParams } from '../types/default-params.type'; import { AdCreation } from '../dtos/ad.creation'; import { Ad } from '../entities/ad'; -import { Frequency } from '../types/frequency.enum'; @CommandHandler(CreateAdCommand) export class CreateAdUseCase { @@ -84,9 +83,9 @@ export class CreateAdUseCase { setDefaultDriverAndPassengerParameters(): void { if (!this.ad.driver && !this.ad.passenger) { this.ad.driver = this.defaultParams.DRIVER; - this.ad.seatsDriver = this.defaultParams.DRIVER_SEAT; + this.ad.seatsDriver = this.defaultParams.SEATS_PROVIDED; this.ad.passenger = this.defaultParams.PASSENGER; - this.ad.seatsPassenger = this.defaultParams.PASSENGER_SEATS; + this.ad.seatsPassenger = this.defaultParams.SEATS_REQUESTED; } else { if (!this.ad.driver) { this.ad.driver = false; @@ -105,8 +104,4 @@ export class CreateAdUseCase { } } } - TransformPunctualToReccurent(): void { - if (this.ad.frequency === Frequency.PUNCTUAL) { - } - } } diff --git a/src/modules/ad/tests/unit/create-ad.usecase.spec.ts b/src/modules/ad/tests/unit/create-ad.usecase.spec.ts index 6db136d..644d8ee 100644 --- a/src/modules/ad/tests/unit/create-ad.usecase.spec.ts +++ b/src/modules/ad/tests/unit/create-ad.usecase.spec.ts @@ -79,25 +79,6 @@ const newAdRequest: CreateAdRequest = { seatsDriver: 2, addresses: [mockAddress1, mockAddress2], }; -const newPunctualPassengerAdRequest: CreateAdRequest = { - userUuid: '113e0000-0000-4000-a000-000000000000', - passenger: true, - frequency: Frequency.PUNCTUAL, - departure: new Date('05-22-2023'), - - marginDurations: { - mon: undefined, - tue: undefined, - wed: undefined, - thu: undefined, - fri: undefined, - sat: undefined, - sun: undefined, - }, - seatsPassenger: 1, - addresses: [mockAddressWithoutPos1, mockAddressWithoutPos2], - schedule: {}, -}; const mockMessager = { publish: jest.fn().mockImplementation(), @@ -113,14 +94,14 @@ const mockDefaultParamsProvider = { SAT_MARGIN: 900, SUN_MARGIN: 900, DRIVER: false, - DRIVER_SEAT: 0, + SEATS_PROVIDED: 0, PASSENGER: true, - PASSENGER_SEATS: 1, + SEATS_REQUESTED: 1, STRICT: false, }; }, }; -let mockAdRepository = { +const mockAdRepository = { create: jest .fn() // eslint-disable-next-line @typescript-eslint/no-unused-vars @@ -134,7 +115,7 @@ let mockAdRepository = { .mockImplementationOnce(() => { throw new Error('Already exists'); }) - .mockImplementation((command?: CreateAdCommand) => {}), + .mockImplementation(), }; describe('CreateAdUseCase', () => { let createAdUseCase: CreateAdUseCase; @@ -206,9 +187,9 @@ describe('CreateAdUseCase', () => { satMargin: mockDefaultParamsProvider.getParams().SAT_MARGIN, sunMargin: mockDefaultParamsProvider.getParams().SUN_MARGIN, driver: mockDefaultParamsProvider.getParams().DRIVER, - seatsDriver: mockDefaultParamsProvider.getParams().DRIVER_SEAT, + seatsDriver: mockDefaultParamsProvider.getParams().SEATS_PROVIDED, passenger: mockDefaultParamsProvider.getParams().PASSENGER, - seatsPassenger: mockDefaultParamsProvider.getParams().PASSENGER_SEATS, + seatsPassenger: mockDefaultParamsProvider.getParams().SEATS_REQUESTED, strict: mockDefaultParamsProvider.getParams().STRICT, addresses: { create: minimalReccurentAdREquest.addresses as AddressCreation[], @@ -219,8 +200,57 @@ describe('CreateAdUseCase', () => { expect(mockAdRepository.create).toBeCalledWith(expectedAdCreation); }); it('should create an passengerAd with addresses without position ', async () => { + const newPunctualPassengerAdRequest: CreateAdRequest = { + userUuid: '113e0000-0000-4000-a000-000000000000', + passenger: true, + frequency: Frequency.PUNCTUAL, + departure: new Date('05-22-2023 09:36'), + + marginDurations: { + mon: undefined, + tue: undefined, + wed: undefined, + thu: undefined, + fri: undefined, + sat: undefined, + sun: undefined, + }, + seatsPassenger: 1, + addresses: [mockAddressWithoutPos1, mockAddressWithoutPos2], + schedule: {}, + }; const newAdCommand = new CreateAdCommand(newPunctualPassengerAdRequest); await createAdUseCase.execute(newAdCommand); + const expectedAdCreation = { + userUuid: newPunctualPassengerAdRequest.userUuid, + frequency: newPunctualPassengerAdRequest.frequency, + fromDate: newPunctualPassengerAdRequest.departure, + toDate: newPunctualPassengerAdRequest.departure, + monTime: '09:36', + tueTime: undefined, + wedTime: undefined, + thuTime: undefined, + friTime: undefined, + satTime: undefined, + sunTime: undefined, + monMargin: mockDefaultParamsProvider.getParams().MON_MARGIN, + tueMargin: mockDefaultParamsProvider.getParams().TUE_MARGIN, + wedMargin: mockDefaultParamsProvider.getParams().WED_MARGIN, + thuMargin: mockDefaultParamsProvider.getParams().THU_MARGIN, + friMargin: mockDefaultParamsProvider.getParams().FRI_MARGIN, + satMargin: mockDefaultParamsProvider.getParams().SAT_MARGIN, + sunMargin: mockDefaultParamsProvider.getParams().SUN_MARGIN, + driver: false, + seatsDriver: 0, + passenger: newPunctualPassengerAdRequest.passenger, + seatsPassenger: newPunctualPassengerAdRequest.seatsPassenger, + strict: mockDefaultParamsProvider.getParams().STRICT, + addresses: { + create: newPunctualPassengerAdRequest.addresses as AddressCreation[], + }, + createdAt: undefined, + } as AdCreation; + expect(mockAdRepository.create).toBeCalledWith(expectedAdCreation); }); }); });