improve test coverage
This commit is contained in:
		
							parent
							
								
									b7bb656f10
								
							
						
					
					
						commit
						d22de7c448
					
				| 
						 | 
					@ -112,8 +112,8 @@ The app exposes the following [gRPC](https://grpc.io/) services :
 | 
				
			||||||
        "waypoints": [
 | 
					        "waypoints": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "position": 0,
 | 
					                "position": 0,
 | 
				
			||||||
                "lon": 48.68944505415954,
 | 
					                "lon": 48.689445,
 | 
				
			||||||
                "lat": 6.176510296462267,
 | 
					                "lat": 6.17651,
 | 
				
			||||||
                "houseNumber": "5",
 | 
					                "houseNumber": "5",
 | 
				
			||||||
                "street": "Avenue Foch",
 | 
					                "street": "Avenue Foch",
 | 
				
			||||||
                "locality": "Nancy",
 | 
					                "locality": "Nancy",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,8 +16,8 @@ const originWaypointProps: WaypointProps = {
 | 
				
			||||||
    postalCode: '54000',
 | 
					    postalCode: '54000',
 | 
				
			||||||
    country: 'France',
 | 
					    country: 'France',
 | 
				
			||||||
    coordinates: {
 | 
					    coordinates: {
 | 
				
			||||||
      lon: 48.68944505415954,
 | 
					      lon: 48.689445,
 | 
				
			||||||
      lat: 6.176510296462267,
 | 
					      lat: 6.17651,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -364,8 +364,8 @@ describe('Ad entity create', () => {
 | 
				
			||||||
              postalCode: '54000',
 | 
					              postalCode: '54000',
 | 
				
			||||||
              country: 'France',
 | 
					              country: 'France',
 | 
				
			||||||
              coordinates: {
 | 
					              coordinates: {
 | 
				
			||||||
                lon: 48.68944505415954,
 | 
					                lon: 48.689445,
 | 
				
			||||||
                lat: 6.176510296462267,
 | 
					                lat: 6.17651,
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					import { Address } from '@modules/ad/core/value-objects/address.value-object';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Address value object', () => {
 | 
				
			||||||
 | 
					  it('should create an address value object', () => {
 | 
				
			||||||
 | 
					    const addressVO = new Address({
 | 
				
			||||||
 | 
					      houseNumber: '5',
 | 
				
			||||||
 | 
					      street: 'rue de la monnaie',
 | 
				
			||||||
 | 
					      locality: 'Nancy',
 | 
				
			||||||
 | 
					      postalCode: '54000',
 | 
				
			||||||
 | 
					      country: 'France',
 | 
				
			||||||
 | 
					      coordinates: {
 | 
				
			||||||
 | 
					        lon: 48.689445,
 | 
				
			||||||
 | 
					        lat: 6.17651,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    expect(addressVO.houseNumber).toBe('5');
 | 
				
			||||||
 | 
					    expect(addressVO.street).toBe('rue de la monnaie');
 | 
				
			||||||
 | 
					    expect(addressVO.locality).toBe('Nancy');
 | 
				
			||||||
 | 
					    expect(addressVO.postalCode).toBe('54000');
 | 
				
			||||||
 | 
					    expect(addressVO.country).toBe('France');
 | 
				
			||||||
 | 
					    expect(addressVO.coordinates.lon).toBe(48.689445);
 | 
				
			||||||
 | 
					    expect(addressVO.name).toBeUndefined();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					import { Coordinates } from '@modules/ad/core/value-objects/coordinates.value-object';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Coordinates value object', () => {
 | 
				
			||||||
 | 
					  it('should create a coordinates value object', () => {
 | 
				
			||||||
 | 
					    const coordinatesVO = new Coordinates({
 | 
				
			||||||
 | 
					      lon: 48.689445,
 | 
				
			||||||
 | 
					      lat: 6.17651,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    expect(coordinatesVO.lon).toBe(48.689445);
 | 
				
			||||||
 | 
					    expect(coordinatesVO.lat).toBe(6.17651);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -14,8 +14,8 @@ import { ConflictException } from '@libs/exceptions';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const originWaypoint: WaypointDto = {
 | 
					const originWaypoint: WaypointDto = {
 | 
				
			||||||
  position: 0,
 | 
					  position: 0,
 | 
				
			||||||
  lon: 48.68944505415954,
 | 
					  lon: 48.689445,
 | 
				
			||||||
  lat: 6.176510296462267,
 | 
					  lat: 6.17651,
 | 
				
			||||||
  houseNumber: '5',
 | 
					  houseNumber: '5',
 | 
				
			||||||
  street: 'Avenue Foch',
 | 
					  street: 'Avenue Foch',
 | 
				
			||||||
  locality: 'Nancy',
 | 
					  locality: 'Nancy',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,8 +20,8 @@ const originWaypointProps: WaypointProps = {
 | 
				
			||||||
    postalCode: '54000',
 | 
					    postalCode: '54000',
 | 
				
			||||||
    country: 'France',
 | 
					    country: 'France',
 | 
				
			||||||
    coordinates: {
 | 
					    coordinates: {
 | 
				
			||||||
      lon: 48.68944505415954,
 | 
					      lon: 48.689445,
 | 
				
			||||||
      lat: 6.176510296462267,
 | 
					      lat: 6.17651,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					import { MarginDurations } from '@modules/ad/core/value-objects/margin-durations.value-object';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Margin durations value object', () => {
 | 
				
			||||||
 | 
					  it('should create a margin durations value object', () => {
 | 
				
			||||||
 | 
					    const marginDurationsVO = new MarginDurations({
 | 
				
			||||||
 | 
					      mon: 600,
 | 
				
			||||||
 | 
					      tue: 610,
 | 
				
			||||||
 | 
					      wed: 620,
 | 
				
			||||||
 | 
					      thu: 630,
 | 
				
			||||||
 | 
					      fri: 640,
 | 
				
			||||||
 | 
					      sat: 650,
 | 
				
			||||||
 | 
					      sun: 660,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.mon).toBe(600);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.tue).toBe(610);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.wed).toBe(620);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.thu).toBe(630);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.fri).toBe(640);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.sat).toBe(650);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.sun).toBe(660);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should update margin durations value object values', () => {
 | 
				
			||||||
 | 
					    const marginDurationsVO = new MarginDurations({
 | 
				
			||||||
 | 
					      mon: 600,
 | 
				
			||||||
 | 
					      tue: 610,
 | 
				
			||||||
 | 
					      wed: 620,
 | 
				
			||||||
 | 
					      thu: 630,
 | 
				
			||||||
 | 
					      fri: 640,
 | 
				
			||||||
 | 
					      sat: 650,
 | 
				
			||||||
 | 
					      sun: 660,
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    marginDurationsVO.mon = 700;
 | 
				
			||||||
 | 
					    marginDurationsVO.tue = 710;
 | 
				
			||||||
 | 
					    marginDurationsVO.wed = 720;
 | 
				
			||||||
 | 
					    marginDurationsVO.thu = 730;
 | 
				
			||||||
 | 
					    marginDurationsVO.fri = 740;
 | 
				
			||||||
 | 
					    marginDurationsVO.sat = 750;
 | 
				
			||||||
 | 
					    marginDurationsVO.sun = 760;
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.mon).toBe(700);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.tue).toBe(710);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.wed).toBe(720);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.thu).toBe(730);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.fri).toBe(740);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.sat).toBe(750);
 | 
				
			||||||
 | 
					    expect(marginDurationsVO.sun).toBe(760);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					import { Schedule } from '@modules/ad/core/value-objects/schedule.value-object';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Schedule value object', () => {
 | 
				
			||||||
 | 
					  it('should create a schedule value object', () => {
 | 
				
			||||||
 | 
					    const scheduleVO = new Schedule({
 | 
				
			||||||
 | 
					      mon: '07:00',
 | 
				
			||||||
 | 
					      tue: '07:05',
 | 
				
			||||||
 | 
					      wed: '07:10',
 | 
				
			||||||
 | 
					      thu: '07:15',
 | 
				
			||||||
 | 
					      fri: '07:20',
 | 
				
			||||||
 | 
					      sat: '07:25',
 | 
				
			||||||
 | 
					      sun: '07:30',
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    expect(scheduleVO.mon).toBe('07:00');
 | 
				
			||||||
 | 
					    expect(scheduleVO.tue).toBe('07:05');
 | 
				
			||||||
 | 
					    expect(scheduleVO.wed).toBe('07:10');
 | 
				
			||||||
 | 
					    expect(scheduleVO.thu).toBe('07:15');
 | 
				
			||||||
 | 
					    expect(scheduleVO.fri).toBe('07:20');
 | 
				
			||||||
 | 
					    expect(scheduleVO.sat).toBe('07:25');
 | 
				
			||||||
 | 
					    expect(scheduleVO.sun).toBe('07:30');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					import { Waypoint } from '@modules/ad/core/value-objects/waypoint.value-object';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Waypoint value object', () => {
 | 
				
			||||||
 | 
					  it('should create a waypoint value object', () => {
 | 
				
			||||||
 | 
					    const waypointVO = new Waypoint({
 | 
				
			||||||
 | 
					      position: 0,
 | 
				
			||||||
 | 
					      address: {
 | 
				
			||||||
 | 
					        houseNumber: '5',
 | 
				
			||||||
 | 
					        street: 'rue de la monnaie',
 | 
				
			||||||
 | 
					        locality: 'Nancy',
 | 
				
			||||||
 | 
					        postalCode: '54000',
 | 
				
			||||||
 | 
					        country: 'France',
 | 
				
			||||||
 | 
					        coordinates: {
 | 
				
			||||||
 | 
					          lon: 48.689445,
 | 
				
			||||||
 | 
					          lat: 6.17651,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    expect(waypointVO.position).toBe(0);
 | 
				
			||||||
 | 
					    expect(waypointVO.address.country).toBe('France');
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,88 @@
 | 
				
			||||||
 | 
					import { PrismaService } from '@libs/db/prisma.service';
 | 
				
			||||||
 | 
					import {
 | 
				
			||||||
 | 
					  PARAMS_PROVIDER,
 | 
				
			||||||
 | 
					  TIMEZONE_FINDER,
 | 
				
			||||||
 | 
					  TIME_CONVERTER,
 | 
				
			||||||
 | 
					} from '@modules/ad/ad.di-tokens';
 | 
				
			||||||
 | 
					import { AdMapper } from '@modules/ad/ad.mapper';
 | 
				
			||||||
 | 
					import { DefaultParamsProviderPort } from '@modules/ad/core/ports/default-params-provider.port';
 | 
				
			||||||
 | 
					import { TimeConverterPort } from '@modules/ad/core/ports/time-converter.port';
 | 
				
			||||||
 | 
					import { TimezoneFinderPort } from '@modules/ad/core/ports/timezone-finder.port';
 | 
				
			||||||
 | 
					import { AdRepository } from '@modules/ad/infrastructure/ad.repository';
 | 
				
			||||||
 | 
					import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';
 | 
				
			||||||
 | 
					import { Test, TestingModule } from '@nestjs/testing';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const mockDefaultParamsProvider: DefaultParamsProviderPort = {
 | 
				
			||||||
 | 
					  getParams: () => {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      MON_MARGIN: 900,
 | 
				
			||||||
 | 
					      TUE_MARGIN: 900,
 | 
				
			||||||
 | 
					      WED_MARGIN: 900,
 | 
				
			||||||
 | 
					      THU_MARGIN: 900,
 | 
				
			||||||
 | 
					      FRI_MARGIN: 900,
 | 
				
			||||||
 | 
					      SAT_MARGIN: 900,
 | 
				
			||||||
 | 
					      SUN_MARGIN: 900,
 | 
				
			||||||
 | 
					      DRIVER: false,
 | 
				
			||||||
 | 
					      SEATS_PROPOSED: 3,
 | 
				
			||||||
 | 
					      PASSENGER: true,
 | 
				
			||||||
 | 
					      SEATS_REQUESTED: 1,
 | 
				
			||||||
 | 
					      STRICT: false,
 | 
				
			||||||
 | 
					      DEFAULT_TIMEZONE: 'Europe/Paris',
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const mockTimezoneFinder: TimezoneFinderPort = {
 | 
				
			||||||
 | 
					  // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
				
			||||||
 | 
					  timezones: jest.fn().mockImplementation((lon: number, lat: number) => {
 | 
				
			||||||
 | 
					    if (lon < 60) return 'Europe/Paris';
 | 
				
			||||||
 | 
					    return 'America/New_York';
 | 
				
			||||||
 | 
					  }),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const mockTimeConverter: TimeConverterPort = {
 | 
				
			||||||
 | 
					  localDateTimeToUtc: jest
 | 
				
			||||||
 | 
					    .fn()
 | 
				
			||||||
 | 
					    // eslint-disable-next-line @typescript-eslint/no-unused-vars
 | 
				
			||||||
 | 
					    .mockImplementation((datetime: Date, timezone: string, dst?: boolean) => {
 | 
				
			||||||
 | 
					      return datetime;
 | 
				
			||||||
 | 
					    }),
 | 
				
			||||||
 | 
					  utcDatetimeToLocalTime: jest.fn(),
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe('Ad repository', () => {
 | 
				
			||||||
 | 
					  let prismaService: PrismaService;
 | 
				
			||||||
 | 
					  let adMapper: AdMapper;
 | 
				
			||||||
 | 
					  let eventEmitter: EventEmitter2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  beforeAll(async () => {
 | 
				
			||||||
 | 
					    const module: TestingModule = await Test.createTestingModule({
 | 
				
			||||||
 | 
					      imports: [EventEmitterModule.forRoot()],
 | 
				
			||||||
 | 
					      providers: [
 | 
				
			||||||
 | 
					        PrismaService,
 | 
				
			||||||
 | 
					        AdMapper,
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          provide: PARAMS_PROVIDER,
 | 
				
			||||||
 | 
					          useValue: mockDefaultParamsProvider,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          provide: TIMEZONE_FINDER,
 | 
				
			||||||
 | 
					          useValue: mockTimezoneFinder,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          provide: TIME_CONVERTER,
 | 
				
			||||||
 | 
					          useValue: mockTimeConverter,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					    }).compile();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    prismaService = module.get<PrismaService>(PrismaService);
 | 
				
			||||||
 | 
					    adMapper = module.get<AdMapper>(AdMapper);
 | 
				
			||||||
 | 
					    eventEmitter = module.get<EventEmitter2>(EventEmitter2);
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  it('should be defined', () => {
 | 
				
			||||||
 | 
					    expect(
 | 
				
			||||||
 | 
					      new AdRepository(prismaService, adMapper, eventEmitter),
 | 
				
			||||||
 | 
					    ).toBeDefined();
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
| 
						 | 
					@ -51,6 +51,17 @@ describe('Time Converter', () => {
 | 
				
			||||||
      );
 | 
					      );
 | 
				
			||||||
      expect(utcDatetime).toBeUndefined();
 | 
					      expect(utcDatetime).toBeUndefined();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					    it('should return undefined if date is undefined', () => {
 | 
				
			||||||
 | 
					      const timeConverter: TimeConverter = new TimeConverter();
 | 
				
			||||||
 | 
					      const parisDate = undefined;
 | 
				
			||||||
 | 
					      const parisTime = '08:00';
 | 
				
			||||||
 | 
					      const utcDatetime = timeConverter.localDateTimeToUtc(
 | 
				
			||||||
 | 
					        parisDate,
 | 
				
			||||||
 | 
					        parisTime,
 | 
				
			||||||
 | 
					        'Europe/Paris',
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					      expect(utcDatetime).toBeUndefined();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe('utcDatetimeToLocalTime', () => {
 | 
					  describe('utcDatetimeToLocalTime', () => {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,8 +3,8 @@ import { WaypointDto } from '@modules/ad/interface/grpc-controllers/dtos/waypoin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe('addresses position validator', () => {
 | 
					describe('addresses position validator', () => {
 | 
				
			||||||
  const mockAddress1: WaypointDto = {
 | 
					  const mockAddress1: WaypointDto = {
 | 
				
			||||||
    lon: 48.68944505415954,
 | 
					    lon: 48.689445,
 | 
				
			||||||
    lat: 6.176510296462267,
 | 
					    lat: 6.17651,
 | 
				
			||||||
    houseNumber: '5',
 | 
					    houseNumber: '5',
 | 
				
			||||||
    street: 'Avenue Foch',
 | 
					    street: 'Avenue Foch',
 | 
				
			||||||
    locality: 'Nancy',
 | 
					    locality: 'Nancy',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue