refactor validators
This commit is contained in:
		
							parent
							
								
									c0c486f34a
								
							
						
					
					
						commit
						e2e3bd4407
					
				| 
						 | 
					@ -13,13 +13,13 @@ import {
 | 
				
			||||||
} from 'class-validator';
 | 
					} from 'class-validator';
 | 
				
			||||||
import { Frequency } from '../types/frequency.enum';
 | 
					import { Frequency } from '../types/frequency.enum';
 | 
				
			||||||
import { Transform, Type } from 'class-transformer';
 | 
					import { Transform, Type } from 'class-transformer';
 | 
				
			||||||
import { mappingKeyToFrequency } from './utils/frequency.mapping';
 | 
					import { mappingKeyToFrequency } from './validators/frequency.mapping';
 | 
				
			||||||
import { MarginDTO } from './create.margin.dto';
 | 
					import { MarginDTO } from './create.margin.dto';
 | 
				
			||||||
import { ScheduleDTO } from './create.schedule.dto';
 | 
					import { ScheduleDTO } from './create.schedule.dto';
 | 
				
			||||||
import { AddressRequestDTO } from './create.address.request';
 | 
					import { AddressRequestDTO } from './create.address.request';
 | 
				
			||||||
import { HasProperPassengerSeats } from './utils/has-passenger-seats.validator';
 | 
					import { HasProperPassengerSeats } from './validators/has-passenger-seats.validator';
 | 
				
			||||||
import { HasProperDriverSeats } from './utils/has-driver-seats.validator';
 | 
					import { HasProperDriverSeats } from './validators/has-driver-seats.validator';
 | 
				
			||||||
import { HasProperPositionIndexes } from './utils/address-position.validator';
 | 
					import { HasProperPositionIndexes } from './validators/address-position.validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class CreateAdRequest {
 | 
					export class CreateAdRequest {
 | 
				
			||||||
  @IsOptional()
 | 
					  @IsOptional()
 | 
				
			||||||
| 
						 | 
					@ -32,13 +32,11 @@ export class CreateAdRequest {
 | 
				
			||||||
  userUuid: string;
 | 
					  userUuid: string;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @IsOptional()
 | 
					  @IsOptional()
 | 
				
			||||||
  @HasProperDriverSeats()
 | 
					 | 
				
			||||||
  @IsBoolean()
 | 
					  @IsBoolean()
 | 
				
			||||||
  @AutoMap()
 | 
					  @AutoMap()
 | 
				
			||||||
  driver?: boolean;
 | 
					  driver?: boolean;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @IsOptional()
 | 
					  @IsOptional()
 | 
				
			||||||
  @HasProperPassengerSeats()
 | 
					 | 
				
			||||||
  @IsBoolean()
 | 
					  @IsBoolean()
 | 
				
			||||||
  @AutoMap()
 | 
					  @AutoMap()
 | 
				
			||||||
  passenger?: boolean;
 | 
					  passenger?: boolean;
 | 
				
			||||||
| 
						 | 
					@ -81,12 +79,14 @@ export class CreateAdRequest {
 | 
				
			||||||
  @AutoMap()
 | 
					  @AutoMap()
 | 
				
			||||||
  marginDurations?: MarginDTO;
 | 
					  marginDurations?: MarginDTO;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @ValidateIf((ad) => ad.driver)
 | 
					  @IsOptional()
 | 
				
			||||||
 | 
					  @HasProperDriverSeats()
 | 
				
			||||||
  @IsInt()
 | 
					  @IsInt()
 | 
				
			||||||
  @AutoMap()
 | 
					  @AutoMap()
 | 
				
			||||||
  seatsDriver?: number;
 | 
					  seatsDriver?: number;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @IsOptional()
 | 
					  @IsOptional()
 | 
				
			||||||
 | 
					  @HasProperPassengerSeats()
 | 
				
			||||||
  @IsInt()
 | 
					  @IsInt()
 | 
				
			||||||
  @AutoMap()
 | 
					  @AutoMap()
 | 
				
			||||||
  seatsPassenger?: number;
 | 
					  seatsPassenger?: number;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,11 +5,16 @@ import {
 | 
				
			||||||
  buildMessage,
 | 
					  buildMessage,
 | 
				
			||||||
} from 'class-validator';
 | 
					} from 'class-validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function hasProperDriverSeats(value: any, args: ValidationArguments) {
 | 
					export function hasProperDriverSeats(args: ValidationArguments) {
 | 
				
			||||||
  if (value === true && typeof args.object['seatsDriver'] === 'number')
 | 
					  if (
 | 
				
			||||||
 | 
					    args.object['driver'] === true &&
 | 
				
			||||||
 | 
					    typeof args.object['seatsDriver'] === 'number'
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
    return args.object['seatsDriver'] > 0;
 | 
					    return args.object['seatsDriver'] > 0;
 | 
				
			||||||
  else if (
 | 
					  else if (
 | 
				
			||||||
    (value === false || value === null || value === undefined) &&
 | 
					    (args.object['driver'] === false ||
 | 
				
			||||||
 | 
					      args.object['driver'] === null ||
 | 
				
			||||||
 | 
					      args.object['driver'] === undefined) &&
 | 
				
			||||||
    (args.object['seatsDriver'] === 0 ||
 | 
					    (args.object['seatsDriver'] === 0 ||
 | 
				
			||||||
      args.object['seatsDriver'] === null ||
 | 
					      args.object['seatsDriver'] === null ||
 | 
				
			||||||
      args.object['seatsDriver'] === undefined)
 | 
					      args.object['seatsDriver'] === undefined)
 | 
				
			||||||
| 
						 | 
					@ -26,8 +31,8 @@ export function HasProperDriverSeats(
 | 
				
			||||||
      name: '',
 | 
					      name: '',
 | 
				
			||||||
      constraints: [],
 | 
					      constraints: [],
 | 
				
			||||||
      validator: {
 | 
					      validator: {
 | 
				
			||||||
        validate: (value, args: ValidationArguments): boolean =>
 | 
					        validate: (value: any, args: ValidationArguments): boolean =>
 | 
				
			||||||
          hasProperDriverSeats(value, args),
 | 
					          hasProperDriverSeats(args),
 | 
				
			||||||
        defaultMessage: buildMessage(
 | 
					        defaultMessage: buildMessage(
 | 
				
			||||||
          () => `driver and driver seats are not correct`,
 | 
					          () => `driver and driver seats are not correct`,
 | 
				
			||||||
          validationOptions,
 | 
					          validationOptions,
 | 
				
			||||||
| 
						 | 
					@ -5,11 +5,16 @@ import {
 | 
				
			||||||
  buildMessage,
 | 
					  buildMessage,
 | 
				
			||||||
} from 'class-validator';
 | 
					} from 'class-validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function hasProperPassengerSeats(value: any, args: ValidationArguments) {
 | 
					export function hasProperPassengerSeats(args: ValidationArguments) {
 | 
				
			||||||
  if (value === true && typeof args.object['seatsPassenger'] === 'number')
 | 
					  if (
 | 
				
			||||||
 | 
					    args.object['passenger'] === true &&
 | 
				
			||||||
 | 
					    typeof args.object['seatsPassenger'] === 'number'
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
    return args.object['seatsPassenger'] > 0;
 | 
					    return args.object['seatsPassenger'] > 0;
 | 
				
			||||||
  else if (
 | 
					  else if (
 | 
				
			||||||
    (value === false || value === null || value === undefined) &&
 | 
					    (args.object['passenger'] === false ||
 | 
				
			||||||
 | 
					      args.object['passenger'] === null ||
 | 
				
			||||||
 | 
					      args.object['passenger'] === undefined) &&
 | 
				
			||||||
    (args.object['seatsPassenger'] === 0 ||
 | 
					    (args.object['seatsPassenger'] === 0 ||
 | 
				
			||||||
      args.object['seatsPassenger'] === null ||
 | 
					      args.object['seatsPassenger'] === null ||
 | 
				
			||||||
      args.object['seatsPassenger'] === undefined)
 | 
					      args.object['seatsPassenger'] === undefined)
 | 
				
			||||||
| 
						 | 
					@ -27,7 +32,7 @@ export function HasProperPassengerSeats(
 | 
				
			||||||
      constraints: [],
 | 
					      constraints: [],
 | 
				
			||||||
      validator: {
 | 
					      validator: {
 | 
				
			||||||
        validate: (value, args: ValidationArguments): boolean =>
 | 
					        validate: (value, args: ValidationArguments): boolean =>
 | 
				
			||||||
          hasProperPassengerSeats(value, args),
 | 
					          hasProperPassengerSeats(args),
 | 
				
			||||||
        defaultMessage: buildMessage(
 | 
					        defaultMessage: buildMessage(
 | 
				
			||||||
          () => `passenger and passenger seats are not correct`,
 | 
					          () => `passenger and passenger seats are not correct`,
 | 
				
			||||||
          validationOptions,
 | 
					          validationOptions,
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  ValidateBy,
 | 
				
			||||||
 | 
					  ValidationArguments,
 | 
				
			||||||
 | 
					  ValidationOptions,
 | 
				
			||||||
 | 
					  buildMessage,
 | 
				
			||||||
 | 
					} from 'class-validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isPunctual(): boolean {
 | 
				
			||||||
 | 
					  throw new Error('Function not implemented.');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function isRecurrent(): boolean {
 | 
				
			||||||
 | 
					  throw new Error('Function not implemented.');
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const isPunctualOrRecurrent = (): boolean => {
 | 
				
			||||||
 | 
					  return isPunctual() || isRecurrent();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					/* istanbul ignore next */
 | 
				
			||||||
 | 
					// export function IsPunctualOrRecurrent(
 | 
				
			||||||
 | 
					//   validationOptions?: ValidationOptions,
 | 
				
			||||||
 | 
					// ): PropertyDecorator {
 | 
				
			||||||
 | 
					//   return ValidateBy(
 | 
				
			||||||
 | 
					//     {
 | 
				
			||||||
 | 
					//       name: '',
 | 
				
			||||||
 | 
					//       constraints: [],
 | 
				
			||||||
 | 
					//       validator: {
 | 
				
			||||||
 | 
					//         validate: (value, args: ValidationArguments): boolean =>
 | 
				
			||||||
 | 
					//           isPunctualOrRecurrent(value, args),
 | 
				
			||||||
 | 
					//         defaultMessage: buildMessage(
 | 
				
			||||||
 | 
					//           () => `driver and driver seats are not correct`,
 | 
				
			||||||
 | 
					//           validationOptions,
 | 
				
			||||||
 | 
					//         ),
 | 
				
			||||||
 | 
					//       },
 | 
				
			||||||
 | 
					//     },
 | 
				
			||||||
 | 
					//     validationOptions,
 | 
				
			||||||
 | 
					//   );
 | 
				
			||||||
 | 
					// }
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,12 @@ import { CreateAdRequest } from '../dtos/create-ad.request';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { Frequency } from '../types/frequency.enum';
 | 
					import { Frequency } from '../types/frequency.enum';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ReccurentNormaliser {
 | 
					export class RecurrentNormaliser {
 | 
				
			||||||
 | 
					  constructor() {
 | 
				
			||||||
 | 
					    console.log('resolver call');
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  fromDateResolver(createAdRequest: CreateAdRequest): Date {
 | 
					  fromDateResolver(createAdRequest: CreateAdRequest): Date {
 | 
				
			||||||
 | 
					    console.log('resolver call');
 | 
				
			||||||
    if (createAdRequest.frequency === Frequency.PUNCTUAL)
 | 
					    if (createAdRequest.frequency === Frequency.PUNCTUAL)
 | 
				
			||||||
      return createAdRequest.departure;
 | 
					      return createAdRequest.departure;
 | 
				
			||||||
    return createAdRequest.fromDate;
 | 
					    return createAdRequest.fromDate;
 | 
				
			||||||
| 
						 | 
					@ -28,6 +28,7 @@ export class CreateAdUseCase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async execute(command: CreateAdCommand): Promise<Ad> {
 | 
					  async execute(command: CreateAdCommand): Promise<Ad> {
 | 
				
			||||||
    console.log('usecase');
 | 
					    console.log('usecase');
 | 
				
			||||||
 | 
					    console.log(command.createAdRequest);
 | 
				
			||||||
    this.ad = this._mapper.map(
 | 
					    this.ad = this._mapper.map(
 | 
				
			||||||
      command.createAdRequest,
 | 
					      command.createAdRequest,
 | 
				
			||||||
      CreateAdRequest,
 | 
					      CreateAdRequest,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,11 +5,11 @@ import { Ad } from '../domain/entities/ad';
 | 
				
			||||||
import { AdPresenter } from '../adapters/primaries/ad.presenter';
 | 
					import { AdPresenter } from '../adapters/primaries/ad.presenter';
 | 
				
			||||||
import { CreateAdRequest } from '../domain/dtos/create-ad.request';
 | 
					import { CreateAdRequest } from '../domain/dtos/create-ad.request';
 | 
				
			||||||
import { AdCreation } from '../domain/dtos/ad.creation';
 | 
					import { AdCreation } from '../domain/dtos/ad.creation';
 | 
				
			||||||
import { ReccurentNormaliser } from '../domain/entities/reccurent-normaliser';
 | 
					import { RecurrentNormaliser } from '../domain/entities/recurrent-normaliser';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@Injectable()
 | 
					@Injectable()
 | 
				
			||||||
export class AdProfile extends AutomapperProfile {
 | 
					export class AdProfile extends AutomapperProfile {
 | 
				
			||||||
  reccurentNormaliser = new ReccurentNormaliser();
 | 
					  recurrentNormaliser = new RecurrentNormaliser();
 | 
				
			||||||
  constructor(@InjectMapper() mapper: Mapper) {
 | 
					  constructor(@InjectMapper() mapper: Mapper) {
 | 
				
			||||||
    super(mapper);
 | 
					    super(mapper);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -84,53 +84,53 @@ export class AdProfile extends AutomapperProfile {
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.fromDate,
 | 
					          (destination) => destination.fromDate,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.fromDateResolver(source),
 | 
					            this.recurrentNormaliser.fromDateResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.toDate,
 | 
					          (destination) => destination.toDate,
 | 
				
			||||||
          mapFrom((source) => this.reccurentNormaliser.toDateResolver(source)),
 | 
					          mapFrom((source) => this.recurrentNormaliser.toDateResolver(source)),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.monTime,
 | 
					          (destination) => destination.monTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleMonResolver(source),
 | 
					            this.recurrentNormaliser.scheduleMonResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.tueTime,
 | 
					          (destination) => destination.tueTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleTueResolver(source),
 | 
					            this.recurrentNormaliser.scheduleTueResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.wedTime,
 | 
					          (destination) => destination.wedTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleWedResolver(source),
 | 
					            this.recurrentNormaliser.scheduleWedResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.thuTime,
 | 
					          (destination) => destination.thuTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleThuResolver(source),
 | 
					            this.recurrentNormaliser.scheduleThuResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.friTime,
 | 
					          (destination) => destination.friTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleFriResolver(source),
 | 
					            this.recurrentNormaliser.scheduleFriResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.satTime,
 | 
					          (destination) => destination.satTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleSatResolver(source),
 | 
					            this.recurrentNormaliser.scheduleSatResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        forMember(
 | 
					        forMember(
 | 
				
			||||||
          (destination) => destination.sunTime,
 | 
					          (destination) => destination.sunTime,
 | 
				
			||||||
          mapFrom((source) =>
 | 
					          mapFrom((source) =>
 | 
				
			||||||
            this.reccurentNormaliser.scheduleSunResolver(source),
 | 
					            this.recurrentNormaliser.scheduleSunResolver(source),
 | 
				
			||||||
          ),
 | 
					          ),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,18 @@
 | 
				
			||||||
 | 
					import { Mapper, createMap } from '@automapper/core';
 | 
				
			||||||
 | 
					import { AutomapperProfile, InjectMapper } from '@automapper/nestjs';
 | 
				
			||||||
 | 
					import { Injectable } from '@nestjs/common';
 | 
				
			||||||
 | 
					import { AddressRequestDTO } from '../domain/dtos/create.address.request';
 | 
				
			||||||
 | 
					import { Address } from '../domain/entities/address';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@Injectable()
 | 
				
			||||||
 | 
					export class AdProfile extends AutomapperProfile {
 | 
				
			||||||
 | 
					  constructor(@InjectMapper() mapper: Mapper) {
 | 
				
			||||||
 | 
					    super(mapper);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  override get profile() {
 | 
				
			||||||
 | 
					    return (mapper) => {
 | 
				
			||||||
 | 
					      createMap(mapper, AddressRequestDTO, Address);
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -402,7 +402,7 @@ describe('Ad Repository', () => {
 | 
				
			||||||
    it('should Create an ad ', async () => {});
 | 
					    it('should Create an ad ', async () => {});
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  describe('create', () => {
 | 
					  describe('create', () => {
 | 
				
			||||||
    it('should create an ad', async () => {
 | 
					    it('should create an  punctual ad', async () => {
 | 
				
			||||||
      const beforeCount = await prismaService.ad.count();
 | 
					      const beforeCount = await prismaService.ad.count();
 | 
				
			||||||
      const adToCreate: AdCreation = new AdCreation();
 | 
					      const adToCreate: AdCreation = new AdCreation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -434,5 +434,39 @@ describe('Ad Repository', () => {
 | 
				
			||||||
      expect(afterCount - beforeCount).toBe(1);
 | 
					      expect(afterCount - beforeCount).toBe(1);
 | 
				
			||||||
      expect(ad.uuid).toBe('be459a29-7a41-4c0b-b371-abe90bfb6f00');
 | 
					      expect(ad.uuid).toBe('be459a29-7a41-4c0b-b371-abe90bfb6f00');
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    it('should create an  recurrent ad', async () => {
 | 
				
			||||||
 | 
					      const beforeCount = await prismaService.ad.count();
 | 
				
			||||||
 | 
					      const adToCreate: AdCreation = new AdCreation();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      adToCreate.uuid = '137a26fa-4b38-48ba-aecf-1a75f6b20f3d';
 | 
				
			||||||
 | 
					      adToCreate.userUuid = '4e52b54d-a729-4dbd-9283-f84a11bb2200';
 | 
				
			||||||
 | 
					      adToCreate.driver = true;
 | 
				
			||||||
 | 
					      adToCreate.passenger = false;
 | 
				
			||||||
 | 
					      adToCreate.frequency = Frequency.RECURRENT;
 | 
				
			||||||
 | 
					      adToCreate.fromDate = new Date('01-15-2023 ');
 | 
				
			||||||
 | 
					      adToCreate.toDate = new Date('10-31-2023');
 | 
				
			||||||
 | 
					      adToCreate.monTime = '07:30';
 | 
				
			||||||
 | 
					      adToCreate.friTime = '07:45';
 | 
				
			||||||
 | 
					      adToCreate.thuTime = '08:00';
 | 
				
			||||||
 | 
					      adToCreate.monMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.tueMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.wedMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.thuMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.friMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.satMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.sunMargin = 900;
 | 
				
			||||||
 | 
					      adToCreate.seatsDriver = 2;
 | 
				
			||||||
 | 
					      adToCreate.seatsPassenger = 0;
 | 
				
			||||||
 | 
					      adToCreate.strict = false;
 | 
				
			||||||
 | 
					      adToCreate.addresses = {
 | 
				
			||||||
 | 
					        create: [address0 as Address, address1 as Address],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      const ad = await adsRepository.create(adToCreate);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const afterCount = await prismaService.ad.count();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(afterCount - beforeCount).toBe(1);
 | 
				
			||||||
 | 
					      expect(ad.uuid).toBe('137a26fa-4b38-48ba-aecf-1a75f6b20f3d');
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,7 +45,7 @@ const mockAddressWithoutPos2: AddressRequestDTO = {
 | 
				
			||||||
  postalCode: '06000',
 | 
					  postalCode: '06000',
 | 
				
			||||||
  country: 'France',
 | 
					  country: 'France',
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
const minimalReccurentAdREquest: CreateAdRequest = {
 | 
					const minimalRecurrentAdREquest: CreateAdRequest = {
 | 
				
			||||||
  userUuid: '224e0000-0000-4000-a000-000000000000',
 | 
					  userUuid: '224e0000-0000-4000-a000-000000000000',
 | 
				
			||||||
  frequency: Frequency.RECURRENT,
 | 
					  frequency: Frequency.RECURRENT,
 | 
				
			||||||
  fromDate: new Date('01-05-2023'),
 | 
					  fromDate: new Date('01-05-2023'),
 | 
				
			||||||
| 
						 | 
					@ -165,14 +165,14 @@ describe('CreateAdUseCase', () => {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('should define mimimal ad as 1 passager add', async () => {
 | 
					    it('should define mimimal ad as 1 passager add', async () => {
 | 
				
			||||||
      const newAdCommand = new CreateAdCommand(minimalReccurentAdREquest);
 | 
					      const newAdCommand = new CreateAdCommand(minimalRecurrentAdREquest);
 | 
				
			||||||
      await createAdUseCase.execute(newAdCommand);
 | 
					      await createAdUseCase.execute(newAdCommand);
 | 
				
			||||||
      const expectedAdCreation = {
 | 
					      const expectedAdCreation = {
 | 
				
			||||||
        userUuid: minimalReccurentAdREquest.userUuid,
 | 
					        userUuid: minimalRecurrentAdREquest.userUuid,
 | 
				
			||||||
        frequency: minimalReccurentAdREquest.frequency,
 | 
					        frequency: minimalRecurrentAdREquest.frequency,
 | 
				
			||||||
        fromDate: minimalReccurentAdREquest.fromDate,
 | 
					        fromDate: minimalRecurrentAdREquest.fromDate,
 | 
				
			||||||
        toDate: minimalReccurentAdREquest.toDate,
 | 
					        toDate: minimalRecurrentAdREquest.toDate,
 | 
				
			||||||
        monTime: minimalReccurentAdREquest.schedule.mon,
 | 
					        monTime: minimalRecurrentAdREquest.schedule.mon,
 | 
				
			||||||
        tueTime: undefined,
 | 
					        tueTime: undefined,
 | 
				
			||||||
        wedTime: undefined,
 | 
					        wedTime: undefined,
 | 
				
			||||||
        thuTime: undefined,
 | 
					        thuTime: undefined,
 | 
				
			||||||
| 
						 | 
					@ -192,7 +192,7 @@ describe('CreateAdUseCase', () => {
 | 
				
			||||||
        seatsPassenger: mockDefaultParamsProvider.getParams().SEATS_REQUESTED,
 | 
					        seatsPassenger: mockDefaultParamsProvider.getParams().SEATS_REQUESTED,
 | 
				
			||||||
        strict: mockDefaultParamsProvider.getParams().STRICT,
 | 
					        strict: mockDefaultParamsProvider.getParams().STRICT,
 | 
				
			||||||
        addresses: {
 | 
					        addresses: {
 | 
				
			||||||
          create: minimalReccurentAdREquest.addresses as Address[],
 | 
					          create: minimalRecurrentAdREquest.addresses as Address[],
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        createdAt: undefined,
 | 
					        createdAt: undefined,
 | 
				
			||||||
      } as AdCreation;
 | 
					      } as AdCreation;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
import { mappingKeyToFrequency } from '../../../domain/dtos/utils/frequency.mapping';
 | 
					import { mappingKeyToFrequency } from '../../../domain/dtos/validators/frequency.mapping';
 | 
				
			||||||
import { Frequency } from '../../../domain/types/frequency.enum';
 | 
					import { Frequency } from '../../../domain/types/frequency.enum';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('frequency mapping function ', () => {
 | 
					describe('frequency mapping function ', () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,98 +1,98 @@
 | 
				
			||||||
import { hasProperDriverSeats } from '../../../domain/dtos/utils/has-driver-seats.validator';
 | 
					import { hasProperDriverSeats } from '../../../domain/dtos/validators/has-driver-seats.validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('driver and/or driver seats validator', () => {
 | 
					describe('driver and/or driver seats validator', () => {
 | 
				
			||||||
  it('should validate if driver and drivers seats is not provided ', () => {
 | 
					  it('should validate if driver and drivers seats is not provided ', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(undefined, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { driver: undefined },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(false, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { driver: false },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(null, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { driver: null },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  it('should not validate if driver is set to true but not the related seats is not provided or 0', () => {
 | 
					  it('should not validate if driver is set to true but not the related seats is not provided or 0', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(true, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { driver: true },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(true, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: 0 },
 | 
					        object: { driver: true, seatsDriver: 0 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(true, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: undefined },
 | 
					        object: { driver: true, seatsDriver: undefined },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(true, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: null },
 | 
					        object: { driver: true, seatsDriver: null },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  it('should not validate if driver seats are provided but driver is not set or set to false ', () => {
 | 
					  it('should not validate if driver seats are provided but driver is not set or set to false ', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(false, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: 1 },
 | 
					        object: { driver: false, seatsDriver: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(undefined, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: 1 },
 | 
					        object: { driver: undefined, seatsDriver: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperDriverSeats(null, {
 | 
					      hasProperDriverSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsDriver: 1 },
 | 
					        object: { driver: null, seatsDriver: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,98 +1,98 @@
 | 
				
			||||||
import { hasProperPassengerSeats } from '../../../domain/dtos/utils/has-passenger-seats.validator';
 | 
					import { hasProperPassengerSeats } from '../../../domain/dtos/validators/has-passenger-seats.validator';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('driver and/or passenger seats validator', () => {
 | 
					describe('driver and/or passenger seats validator', () => {
 | 
				
			||||||
  it('should validate if passenger and passengers seats is not provided ', () => {
 | 
					  it('should validate if passenger and passengers seats is not provided ', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(undefined, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { passenger: undefined },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(false, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { passenger: false },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(null, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { passenger: null },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(true);
 | 
					    ).toBe(true);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  it('should not validate if passenger is set to true but not the related seats is not provided or 0', () => {
 | 
					  it('should not validate if passenger is set to true but not the related seats is not provided or 0', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(true, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: {},
 | 
					        object: { passenger: true },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(true, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: 0 },
 | 
					        object: { passenger: true, seatsPassenger: 0 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(true, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: undefined },
 | 
					        object: { passenger: true, seatsPassenger: undefined },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(true, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: null },
 | 
					        object: { passenger: true, seatsPassenger: null },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
  it('should not validate if passenger seats are provided but passenger is not set or set to false ', () => {
 | 
					  it('should not validate if passenger seats are provided but passenger is not set or set to false ', () => {
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(false, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: 1 },
 | 
					        object: { passenger: false, seatsPassenger: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(undefined, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: 1 },
 | 
					        object: { passenger: undefined, seatsPassenger: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
    expect(
 | 
					    expect(
 | 
				
			||||||
      hasProperPassengerSeats(null, {
 | 
					      hasProperPassengerSeats({
 | 
				
			||||||
        value: undefined,
 | 
					        value: undefined,
 | 
				
			||||||
        constraints: [],
 | 
					        constraints: [],
 | 
				
			||||||
        targetName: '',
 | 
					        targetName: '',
 | 
				
			||||||
        object: { seatsPassenger: 1 },
 | 
					        object: { passenger: null, seatsPassenger: 1 },
 | 
				
			||||||
        property: '',
 | 
					        property: '',
 | 
				
			||||||
      }),
 | 
					      }),
 | 
				
			||||||
    ).toBe(false);
 | 
					    ).toBe(false);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
import { AddressRequestDTO } from '../../../domain/dtos/create.address.request';
 | 
					import { AddressRequestDTO } from '../../../domain/dtos/create.address.request';
 | 
				
			||||||
import { hasProperPositionIndexes } from '../../../domain/dtos/utils/address-position.validator';
 | 
					import { hasProperPositionIndexes } from '../../../domain/dtos/validators/address-position.validator';
 | 
				
			||||||
describe('addresses position validators', () => {
 | 
					describe('addresses position validators', () => {
 | 
				
			||||||
  const mockAddress1: AddressRequestDTO = {
 | 
					  const mockAddress1: AddressRequestDTO = {
 | 
				
			||||||
    lon: 48.68944505415954,
 | 
					    lon: 48.68944505415954,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,92 +0,0 @@
 | 
				
			||||||
import { CreateAdRequest } from '../../../domain/dtos/create-ad.request';
 | 
					 | 
				
			||||||
import { ScheduleDTO } from '../../../domain/dtos/create.schedule.dto';
 | 
					 | 
				
			||||||
import { ReccurentNormaliser } from '../../../domain/entities/reccurent-normaliser';
 | 
					 | 
				
			||||||
import { Frequency } from '../../../domain/types/frequency.enum';
 | 
					 | 
				
			||||||
describe('reccurent normalizer transformer for punctual ad ', () => {
 | 
					 | 
				
			||||||
  const reccurentNormaliser = new ReccurentNormaliser();
 | 
					 | 
				
			||||||
  it('should transform punctual ad into reccurent ad ', () => {
 | 
					 | 
				
			||||||
    const punctualAd: CreateAdRequest = {
 | 
					 | 
				
			||||||
      userUuid: '',
 | 
					 | 
				
			||||||
      frequency: Frequency.PUNCTUAL,
 | 
					 | 
				
			||||||
      departure: new Date('05-03-2023 12:39:39 '),
 | 
					 | 
				
			||||||
      schedule: {} as ScheduleDTO,
 | 
					 | 
				
			||||||
      addresses: [],
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.fromDateResolver(punctualAd)).toBe(
 | 
					 | 
				
			||||||
      punctualAd.departure,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.toDateResolver(punctualAd)).toBe(
 | 
					 | 
				
			||||||
      punctualAd.departure,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleMonResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleTueResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleWedResolver(punctualAd)).toBe('12:39');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleThuResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleFriResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSatResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSunResolver(punctualAd)).toBeUndefined();
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  it('should leave reccurent ad as is', () => {
 | 
					 | 
				
			||||||
    const reccurentAd: CreateAdRequest = {
 | 
					 | 
				
			||||||
      userUuid: '',
 | 
					 | 
				
			||||||
      frequency: Frequency.RECURRENT,
 | 
					 | 
				
			||||||
      schedule: {
 | 
					 | 
				
			||||||
        mon: '08:30',
 | 
					 | 
				
			||||||
        tue: '08:30',
 | 
					 | 
				
			||||||
        wed: '09:00',
 | 
					 | 
				
			||||||
        fri: '09:00',
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      addresses: [],
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.fromDateResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.departure,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.toDateResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.departure,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleMonResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.mon,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleTueResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.tue,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleWedResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.wed,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleThuResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.thu,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleFriResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.fri,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSatResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.sat,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSunResolver(reccurentAd)).toBe(
 | 
					 | 
				
			||||||
      reccurentAd.schedule.sun,
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
  it('should pass for each day of the week of a deprarture ', () => {
 | 
					 | 
				
			||||||
    const punctualAd: CreateAdRequest = {
 | 
					 | 
				
			||||||
      userUuid: '',
 | 
					 | 
				
			||||||
      frequency: Frequency.PUNCTUAL,
 | 
					 | 
				
			||||||
      departure: undefined,
 | 
					 | 
				
			||||||
      schedule: {} as ScheduleDTO,
 | 
					 | 
				
			||||||
      addresses: [],
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-01-2023 ');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleMonResolver(punctualAd)).toBe('00:00');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-02-2023 06:32:45');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleTueResolver(punctualAd)).toBe('06:32');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-03-2023 10:21');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleWedResolver(punctualAd)).toBe('10:21');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-04-2023 11:06:00');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleThuResolver(punctualAd)).toBe('11:06');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-05-2023 05:20');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleFriResolver(punctualAd)).toBe('05:20');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-06-2023');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSatResolver(punctualAd)).toBe('00:00');
 | 
					 | 
				
			||||||
    punctualAd.departure = new Date('05-07-2023');
 | 
					 | 
				
			||||||
    expect(reccurentNormaliser.scheduleSunResolver(punctualAd)).toBe('00:00');
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,92 @@
 | 
				
			||||||
 | 
					import { CreateAdRequest } from '../../../domain/dtos/create-ad.request';
 | 
				
			||||||
 | 
					import { ScheduleDTO } from '../../../domain/dtos/create.schedule.dto';
 | 
				
			||||||
 | 
					import { RecurrentNormaliser } from '../../../domain/entities/recurrent-normaliser';
 | 
				
			||||||
 | 
					import { Frequency } from '../../../domain/types/frequency.enum';
 | 
				
			||||||
 | 
					describe('recurrent normalizer transformer for punctual ad ', () => {
 | 
				
			||||||
 | 
					  const recurrentNormaliser = new RecurrentNormaliser();
 | 
				
			||||||
 | 
					  it('should transform punctual ad into recurrent ad ', () => {
 | 
				
			||||||
 | 
					    const punctualAd: CreateAdRequest = {
 | 
				
			||||||
 | 
					      userUuid: '',
 | 
				
			||||||
 | 
					      frequency: Frequency.PUNCTUAL,
 | 
				
			||||||
 | 
					      departure: new Date('05-03-2023 12:39:39 '),
 | 
				
			||||||
 | 
					      schedule: {} as ScheduleDTO,
 | 
				
			||||||
 | 
					      addresses: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.fromDateResolver(punctualAd)).toBe(
 | 
				
			||||||
 | 
					      punctualAd.departure,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.toDateResolver(punctualAd)).toBe(
 | 
				
			||||||
 | 
					      punctualAd.departure,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleMonResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleTueResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleWedResolver(punctualAd)).toBe('12:39');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleThuResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleFriResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSatResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSunResolver(punctualAd)).toBeUndefined();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should leave recurrent ad as is', () => {
 | 
				
			||||||
 | 
					    const recurrentAd: CreateAdRequest = {
 | 
				
			||||||
 | 
					      userUuid: '',
 | 
				
			||||||
 | 
					      frequency: Frequency.RECURRENT,
 | 
				
			||||||
 | 
					      schedule: {
 | 
				
			||||||
 | 
					        mon: '08:30',
 | 
				
			||||||
 | 
					        tue: '08:30',
 | 
				
			||||||
 | 
					        wed: '09:00',
 | 
				
			||||||
 | 
					        fri: '09:00',
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      addresses: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.fromDateResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.departure,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.toDateResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.departure,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleMonResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.mon,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleTueResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.tue,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleWedResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.wed,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleThuResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.thu,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleFriResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.fri,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSatResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.sat,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSunResolver(recurrentAd)).toBe(
 | 
				
			||||||
 | 
					      recurrentAd.schedule.sun,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should pass for each day of the week of a deprarture ', () => {
 | 
				
			||||||
 | 
					    const punctualAd: CreateAdRequest = {
 | 
				
			||||||
 | 
					      userUuid: '',
 | 
				
			||||||
 | 
					      frequency: Frequency.PUNCTUAL,
 | 
				
			||||||
 | 
					      departure: undefined,
 | 
				
			||||||
 | 
					      schedule: {} as ScheduleDTO,
 | 
				
			||||||
 | 
					      addresses: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-01-2023 ');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleMonResolver(punctualAd)).toBe('00:00');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-02-2023 06:32:45');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleTueResolver(punctualAd)).toBe('06:32');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-03-2023 10:21');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleWedResolver(punctualAd)).toBe('10:21');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-04-2023 11:06:00');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleThuResolver(punctualAd)).toBe('11:06');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-05-2023 05:20');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleFriResolver(punctualAd)).toBe('05:20');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-06-2023');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSatResolver(punctualAd)).toBe('00:00');
 | 
				
			||||||
 | 
					    punctualAd.departure = new Date('05-07-2023');
 | 
				
			||||||
 | 
					    expect(recurrentNormaliser.scheduleSunResolver(punctualAd)).toBe('00:00');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
		Loading…
	
		Reference in New Issue