refactor validators
This commit is contained in:
		
							parent
							
								
									c0c486f34a
								
							
						
					
					
						commit
						e2e3bd4407
					
				| 
						 | 
				
			
			@ -13,13 +13,13 @@ import {
 | 
			
		|||
} from 'class-validator';
 | 
			
		||||
import { Frequency } from '../types/frequency.enum';
 | 
			
		||||
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 { ScheduleDTO } from './create.schedule.dto';
 | 
			
		||||
import { AddressRequestDTO } from './create.address.request';
 | 
			
		||||
import { HasProperPassengerSeats } from './utils/has-passenger-seats.validator';
 | 
			
		||||
import { HasProperDriverSeats } from './utils/has-driver-seats.validator';
 | 
			
		||||
import { HasProperPositionIndexes } from './utils/address-position.validator';
 | 
			
		||||
import { HasProperPassengerSeats } from './validators/has-passenger-seats.validator';
 | 
			
		||||
import { HasProperDriverSeats } from './validators/has-driver-seats.validator';
 | 
			
		||||
import { HasProperPositionIndexes } from './validators/address-position.validator';
 | 
			
		||||
 | 
			
		||||
export class CreateAdRequest {
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
| 
						 | 
				
			
			@ -32,13 +32,11 @@ export class CreateAdRequest {
 | 
			
		|||
  userUuid: string;
 | 
			
		||||
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @HasProperDriverSeats()
 | 
			
		||||
  @IsBoolean()
 | 
			
		||||
  @AutoMap()
 | 
			
		||||
  driver?: boolean;
 | 
			
		||||
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @HasProperPassengerSeats()
 | 
			
		||||
  @IsBoolean()
 | 
			
		||||
  @AutoMap()
 | 
			
		||||
  passenger?: boolean;
 | 
			
		||||
| 
						 | 
				
			
			@ -81,12 +79,14 @@ export class CreateAdRequest {
 | 
			
		|||
  @AutoMap()
 | 
			
		||||
  marginDurations?: MarginDTO;
 | 
			
		||||
 | 
			
		||||
  @ValidateIf((ad) => ad.driver)
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @HasProperDriverSeats()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  @AutoMap()
 | 
			
		||||
  seatsDriver?: number;
 | 
			
		||||
 | 
			
		||||
  @IsOptional()
 | 
			
		||||
  @HasProperPassengerSeats()
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  @AutoMap()
 | 
			
		||||
  seatsPassenger?: number;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,11 +5,16 @@ import {
 | 
			
		|||
  buildMessage,
 | 
			
		||||
} from 'class-validator';
 | 
			
		||||
 | 
			
		||||
export function hasProperDriverSeats(value: any, args: ValidationArguments) {
 | 
			
		||||
  if (value === true && typeof args.object['seatsDriver'] === 'number')
 | 
			
		||||
export function hasProperDriverSeats(args: ValidationArguments) {
 | 
			
		||||
  if (
 | 
			
		||||
    args.object['driver'] === true &&
 | 
			
		||||
    typeof args.object['seatsDriver'] === 'number'
 | 
			
		||||
  )
 | 
			
		||||
    return args.object['seatsDriver'] > 0;
 | 
			
		||||
  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'] === null ||
 | 
			
		||||
      args.object['seatsDriver'] === undefined)
 | 
			
		||||
| 
						 | 
				
			
			@ -26,8 +31,8 @@ export function HasProperDriverSeats(
 | 
			
		|||
      name: '',
 | 
			
		||||
      constraints: [],
 | 
			
		||||
      validator: {
 | 
			
		||||
        validate: (value, args: ValidationArguments): boolean =>
 | 
			
		||||
          hasProperDriverSeats(value, args),
 | 
			
		||||
        validate: (value: any, args: ValidationArguments): boolean =>
 | 
			
		||||
          hasProperDriverSeats(args),
 | 
			
		||||
        defaultMessage: buildMessage(
 | 
			
		||||
          () => `driver and driver seats are not correct`,
 | 
			
		||||
          validationOptions,
 | 
			
		||||
| 
						 | 
				
			
			@ -5,11 +5,16 @@ import {
 | 
			
		|||
  buildMessage,
 | 
			
		||||
} from 'class-validator';
 | 
			
		||||
 | 
			
		||||
export function hasProperPassengerSeats(value: any, args: ValidationArguments) {
 | 
			
		||||
  if (value === true && typeof args.object['seatsPassenger'] === 'number')
 | 
			
		||||
export function hasProperPassengerSeats(args: ValidationArguments) {
 | 
			
		||||
  if (
 | 
			
		||||
    args.object['passenger'] === true &&
 | 
			
		||||
    typeof args.object['seatsPassenger'] === 'number'
 | 
			
		||||
  )
 | 
			
		||||
    return args.object['seatsPassenger'] > 0;
 | 
			
		||||
  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'] === null ||
 | 
			
		||||
      args.object['seatsPassenger'] === undefined)
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +32,7 @@ export function HasProperPassengerSeats(
 | 
			
		|||
      constraints: [],
 | 
			
		||||
      validator: {
 | 
			
		||||
        validate: (value, args: ValidationArguments): boolean =>
 | 
			
		||||
          hasProperPassengerSeats(value, args),
 | 
			
		||||
          hasProperPassengerSeats(args),
 | 
			
		||||
        defaultMessage: buildMessage(
 | 
			
		||||
          () => `passenger and passenger seats are not correct`,
 | 
			
		||||
          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';
 | 
			
		||||
 | 
			
		||||
export class ReccurentNormaliser {
 | 
			
		||||
export class RecurrentNormaliser {
 | 
			
		||||
  constructor() {
 | 
			
		||||
    console.log('resolver call');
 | 
			
		||||
  }
 | 
			
		||||
  fromDateResolver(createAdRequest: CreateAdRequest): Date {
 | 
			
		||||
    console.log('resolver call');
 | 
			
		||||
    if (createAdRequest.frequency === Frequency.PUNCTUAL)
 | 
			
		||||
      return createAdRequest.departure;
 | 
			
		||||
    return createAdRequest.fromDate;
 | 
			
		||||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ export class CreateAdUseCase {
 | 
			
		|||
 | 
			
		||||
  async execute(command: CreateAdCommand): Promise<Ad> {
 | 
			
		||||
    console.log('usecase');
 | 
			
		||||
    console.log(command.createAdRequest);
 | 
			
		||||
    this.ad = this._mapper.map(
 | 
			
		||||
      command.createAdRequest,
 | 
			
		||||
      CreateAdRequest,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,11 +5,11 @@ import { Ad } from '../domain/entities/ad';
 | 
			
		|||
import { AdPresenter } from '../adapters/primaries/ad.presenter';
 | 
			
		||||
import { CreateAdRequest } from '../domain/dtos/create-ad.request';
 | 
			
		||||
import { AdCreation } from '../domain/dtos/ad.creation';
 | 
			
		||||
import { ReccurentNormaliser } from '../domain/entities/reccurent-normaliser';
 | 
			
		||||
import { RecurrentNormaliser } from '../domain/entities/recurrent-normaliser';
 | 
			
		||||
 | 
			
		||||
@Injectable()
 | 
			
		||||
export class AdProfile extends AutomapperProfile {
 | 
			
		||||
  reccurentNormaliser = new ReccurentNormaliser();
 | 
			
		||||
  recurrentNormaliser = new RecurrentNormaliser();
 | 
			
		||||
  constructor(@InjectMapper() mapper: Mapper) {
 | 
			
		||||
    super(mapper);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -84,53 +84,53 @@ export class AdProfile extends AutomapperProfile {
 | 
			
		|||
        forMember(
 | 
			
		||||
          (destination) => destination.fromDate,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.fromDateResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.fromDateResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.toDate,
 | 
			
		||||
          mapFrom((source) => this.reccurentNormaliser.toDateResolver(source)),
 | 
			
		||||
          mapFrom((source) => this.recurrentNormaliser.toDateResolver(source)),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.monTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleMonResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleMonResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.tueTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleTueResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleTueResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.wedTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleWedResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleWedResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.thuTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleThuResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleThuResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.friTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleFriResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleFriResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.satTime,
 | 
			
		||||
          mapFrom((source) =>
 | 
			
		||||
            this.reccurentNormaliser.scheduleSatResolver(source),
 | 
			
		||||
            this.recurrentNormaliser.scheduleSatResolver(source),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
        forMember(
 | 
			
		||||
          (destination) => destination.sunTime,
 | 
			
		||||
          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 () => {});
 | 
			
		||||
  });
 | 
			
		||||
  describe('create', () => {
 | 
			
		||||
    it('should create an ad', async () => {
 | 
			
		||||
    it('should create an  punctual ad', async () => {
 | 
			
		||||
      const beforeCount = await prismaService.ad.count();
 | 
			
		||||
      const adToCreate: AdCreation = new AdCreation();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -434,5 +434,39 @@ describe('Ad Repository', () => {
 | 
			
		|||
      expect(afterCount - beforeCount).toBe(1);
 | 
			
		||||
      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',
 | 
			
		||||
  country: 'France',
 | 
			
		||||
};
 | 
			
		||||
const minimalReccurentAdREquest: CreateAdRequest = {
 | 
			
		||||
const minimalRecurrentAdREquest: CreateAdRequest = {
 | 
			
		||||
  userUuid: '224e0000-0000-4000-a000-000000000000',
 | 
			
		||||
  frequency: Frequency.RECURRENT,
 | 
			
		||||
  fromDate: new Date('01-05-2023'),
 | 
			
		||||
| 
						 | 
				
			
			@ -165,14 +165,14 @@ describe('CreateAdUseCase', () => {
 | 
			
		|||
    });
 | 
			
		||||
 | 
			
		||||
    it('should define mimimal ad as 1 passager add', async () => {
 | 
			
		||||
      const newAdCommand = new CreateAdCommand(minimalReccurentAdREquest);
 | 
			
		||||
      const newAdCommand = new CreateAdCommand(minimalRecurrentAdREquest);
 | 
			
		||||
      await createAdUseCase.execute(newAdCommand);
 | 
			
		||||
      const expectedAdCreation = {
 | 
			
		||||
        userUuid: minimalReccurentAdREquest.userUuid,
 | 
			
		||||
        frequency: minimalReccurentAdREquest.frequency,
 | 
			
		||||
        fromDate: minimalReccurentAdREquest.fromDate,
 | 
			
		||||
        toDate: minimalReccurentAdREquest.toDate,
 | 
			
		||||
        monTime: minimalReccurentAdREquest.schedule.mon,
 | 
			
		||||
        userUuid: minimalRecurrentAdREquest.userUuid,
 | 
			
		||||
        frequency: minimalRecurrentAdREquest.frequency,
 | 
			
		||||
        fromDate: minimalRecurrentAdREquest.fromDate,
 | 
			
		||||
        toDate: minimalRecurrentAdREquest.toDate,
 | 
			
		||||
        monTime: minimalRecurrentAdREquest.schedule.mon,
 | 
			
		||||
        tueTime: undefined,
 | 
			
		||||
        wedTime: undefined,
 | 
			
		||||
        thuTime: undefined,
 | 
			
		||||
| 
						 | 
				
			
			@ -192,7 +192,7 @@ describe('CreateAdUseCase', () => {
 | 
			
		|||
        seatsPassenger: mockDefaultParamsProvider.getParams().SEATS_REQUESTED,
 | 
			
		||||
        strict: mockDefaultParamsProvider.getParams().STRICT,
 | 
			
		||||
        addresses: {
 | 
			
		||||
          create: minimalReccurentAdREquest.addresses as Address[],
 | 
			
		||||
          create: minimalRecurrentAdREquest.addresses as Address[],
 | 
			
		||||
        },
 | 
			
		||||
        createdAt: undefined,
 | 
			
		||||
      } 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';
 | 
			
		||||
 | 
			
		||||
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', () => {
 | 
			
		||||
  it('should validate if driver and drivers seats is not provided ', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(undefined, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { driver: undefined },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(false, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { driver: false },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(null, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { driver: null },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
  });
 | 
			
		||||
  it('should not validate if driver is set to true but not the related seats is not provided or 0', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(true, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { driver: true },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(true, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: 0 },
 | 
			
		||||
        object: { driver: true, seatsDriver: 0 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(true, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: undefined },
 | 
			
		||||
        object: { driver: true, seatsDriver: undefined },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(true, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: null },
 | 
			
		||||
        object: { driver: true, seatsDriver: null },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
  it('should not validate if driver seats are provided but driver is not set or set to false ', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(false, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: 1 },
 | 
			
		||||
        object: { driver: false, seatsDriver: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(undefined, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: 1 },
 | 
			
		||||
        object: { driver: undefined, seatsDriver: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperDriverSeats(null, {
 | 
			
		||||
      hasProperDriverSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsDriver: 1 },
 | 
			
		||||
        object: { driver: null, seatsDriver: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).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', () => {
 | 
			
		||||
  it('should validate if passenger and passengers seats is not provided ', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(undefined, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { passenger: undefined },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(false, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { passenger: false },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(null, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { passenger: null },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(true);
 | 
			
		||||
  });
 | 
			
		||||
  it('should not validate if passenger is set to true but not the related seats is not provided or 0', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(true, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: {},
 | 
			
		||||
        object: { passenger: true },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(true, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: 0 },
 | 
			
		||||
        object: { passenger: true, seatsPassenger: 0 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(true, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: undefined },
 | 
			
		||||
        object: { passenger: true, seatsPassenger: undefined },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(true, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: null },
 | 
			
		||||
        object: { passenger: true, seatsPassenger: null },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
  });
 | 
			
		||||
  it('should not validate if passenger seats are provided but passenger is not set or set to false ', () => {
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(false, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: 1 },
 | 
			
		||||
        object: { passenger: false, seatsPassenger: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(undefined, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: 1 },
 | 
			
		||||
        object: { passenger: undefined, seatsPassenger: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
    expect(
 | 
			
		||||
      hasProperPassengerSeats(null, {
 | 
			
		||||
      hasProperPassengerSeats({
 | 
			
		||||
        value: undefined,
 | 
			
		||||
        constraints: [],
 | 
			
		||||
        targetName: '',
 | 
			
		||||
        object: { seatsPassenger: 1 },
 | 
			
		||||
        object: { passenger: null, seatsPassenger: 1 },
 | 
			
		||||
        property: '',
 | 
			
		||||
      }),
 | 
			
		||||
    ).toBe(false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
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', () => {
 | 
			
		||||
  const mockAddress1: AddressRequestDTO = {
 | 
			
		||||
    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