create ad usecase tests
This commit is contained in:
parent
17acaa449c
commit
72516037d1
|
@ -56,6 +56,36 @@ export class CreateAdUseCase {
|
||||||
withPoints: true,
|
withPoints: true,
|
||||||
withTime: false,
|
withTime: false,
|
||||||
});
|
});
|
||||||
|
this.setAdGeography(command);
|
||||||
|
this.setAdSchedule(command);
|
||||||
|
return await this.adRepository.createAd(this.ad);
|
||||||
|
} catch (error) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private setTimezone = (coordinates: Coordinate[]): void => {
|
||||||
|
this.timezone = this.defaultParams.DEFAULT_TIMEZONE;
|
||||||
|
try {
|
||||||
|
const timezones = this.timezoneFinder.timezones(
|
||||||
|
coordinates[0].lat,
|
||||||
|
coordinates[0].lon,
|
||||||
|
);
|
||||||
|
if (timezones.length > 0) this.timezone = timezones[0];
|
||||||
|
} catch (e) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
private setRoles = (createAdRequest: CreateAdRequest): void => {
|
||||||
|
this.roles = [];
|
||||||
|
if (createAdRequest.driver) this.roles.push(Role.DRIVER);
|
||||||
|
if (createAdRequest.passenger) this.roles.push(Role.PASSENGER);
|
||||||
|
};
|
||||||
|
|
||||||
|
private setGeography = (coordinates: Coordinate[]): void => {
|
||||||
|
this.geography = new Geography(coordinates);
|
||||||
|
};
|
||||||
|
|
||||||
|
private setAdGeography = (command: CreateAdCommand): void => {
|
||||||
this.ad.driverDistance = this.geography.driverRoute?.distance;
|
this.ad.driverDistance = this.geography.driverRoute?.distance;
|
||||||
this.ad.driverDuration = this.geography.driverRoute?.duration;
|
this.ad.driverDuration = this.geography.driverRoute?.duration;
|
||||||
this.ad.passengerDistance = this.geography.passengerRoute?.distance;
|
this.ad.passengerDistance = this.geography.passengerRoute?.distance;
|
||||||
|
@ -72,6 +102,9 @@ export class CreateAdUseCase {
|
||||||
this.ad.direction = this.geography.driverRoute
|
this.ad.direction = this.geography.driverRoute
|
||||||
? this.directionEncoder.encode(this.geography.driverRoute.points)
|
? this.directionEncoder.encode(this.geography.driverRoute.points)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
};
|
||||||
|
|
||||||
|
private setAdSchedule = (command: CreateAdCommand): void => {
|
||||||
this.ad.monTime = TimeConverter.toUtcDatetime(
|
this.ad.monTime = TimeConverter.toUtcDatetime(
|
||||||
this.ad.fromDate,
|
this.ad.fromDate,
|
||||||
command.createAdRequest.monTime,
|
command.createAdRequest.monTime,
|
||||||
|
@ -107,30 +140,5 @@ export class CreateAdUseCase {
|
||||||
command.createAdRequest.sunTime,
|
command.createAdRequest.sunTime,
|
||||||
this.timezone,
|
this.timezone,
|
||||||
);
|
);
|
||||||
return await this.adRepository.createAd(this.ad);
|
|
||||||
} catch (error) {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private setTimezone = (coordinates: Coordinate[]): void => {
|
|
||||||
this.timezone = this.defaultParams.DEFAULT_TIMEZONE;
|
|
||||||
try {
|
|
||||||
const timezones = this.timezoneFinder.timezones(
|
|
||||||
coordinates[0].lat,
|
|
||||||
coordinates[0].lon,
|
|
||||||
);
|
|
||||||
if (timezones.length > 0) this.timezone = timezones[0];
|
|
||||||
} catch (e) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
private setRoles = (createAdRequest: CreateAdRequest): void => {
|
|
||||||
this.roles = [];
|
|
||||||
if (createAdRequest.driver) this.roles.push(Role.DRIVER);
|
|
||||||
if (createAdRequest.passenger) this.roles.push(Role.PASSENGER);
|
|
||||||
};
|
|
||||||
|
|
||||||
private setGeography = (coordinates: Coordinate[]): void => {
|
|
||||||
this.geography = new Geography(coordinates);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,14 +9,48 @@ import { Ad } from '../../../domain/entities/ad';
|
||||||
import { AdProfile } from '../../../mappers/ad.profile';
|
import { AdProfile } from '../../../mappers/ad.profile';
|
||||||
import { Frequency } from '../../../domain/types/frequency.enum';
|
import { Frequency } from '../../../domain/types/frequency.enum';
|
||||||
import { RouteKey } from '../../../domain/entities/geography';
|
import { RouteKey } from '../../../domain/entities/geography';
|
||||||
|
import { DatabaseException } from '../../../../database/exceptions/database.exception';
|
||||||
|
import { Route } from '../../../../geography/domain/entities/route';
|
||||||
|
|
||||||
const mockAdRepository = {};
|
const mockAdRepository = {
|
||||||
|
createAd: jest.fn().mockImplementation((ad) => {
|
||||||
|
if (ad.uuid == '00000000-0000-0000-0000-000000000000')
|
||||||
|
throw new DatabaseException();
|
||||||
|
return new Ad();
|
||||||
|
}),
|
||||||
|
};
|
||||||
const mockGeorouterCreator = {
|
const mockGeorouterCreator = {
|
||||||
create: jest.fn().mockImplementation(() => ({
|
create: jest.fn().mockImplementation(() => ({
|
||||||
route: jest.fn().mockImplementation(() => [
|
route: jest.fn().mockImplementation(() => [
|
||||||
{
|
{
|
||||||
key: RouteKey.COMMON,
|
key: RouteKey.DRIVER,
|
||||||
|
route: <Route>{
|
||||||
points: [],
|
points: [],
|
||||||
|
fwdAzimuth: 0,
|
||||||
|
backAzimuth: 180,
|
||||||
|
distance: 20000,
|
||||||
|
duration: 1800,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: RouteKey.PASSENGER,
|
||||||
|
route: <Route>{
|
||||||
|
points: [],
|
||||||
|
fwdAzimuth: 0,
|
||||||
|
backAzimuth: 180,
|
||||||
|
distance: 20000,
|
||||||
|
duration: 1800,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: RouteKey.COMMON,
|
||||||
|
route: <Route>{
|
||||||
|
points: [],
|
||||||
|
fwdAzimuth: 0,
|
||||||
|
backAzimuth: 180,
|
||||||
|
distance: 20000,
|
||||||
|
duration: 1800,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
]),
|
]),
|
||||||
})),
|
})),
|
||||||
|
@ -31,7 +65,9 @@ const mockParamsProvider = {
|
||||||
const mockTimezoneFinder = {
|
const mockTimezoneFinder = {
|
||||||
timezones: jest.fn().mockImplementation(() => ['Europe/Paris']),
|
timezones: jest.fn().mockImplementation(() => ['Europe/Paris']),
|
||||||
};
|
};
|
||||||
const mockDirectionEncoder = {};
|
const mockDirectionEncoder = {
|
||||||
|
encode: jest.fn(),
|
||||||
|
};
|
||||||
|
|
||||||
const createAdRequest: CreateAdRequest = {
|
const createAdRequest: CreateAdRequest = {
|
||||||
uuid: '77c55dfc-c28b-4026-942e-f94e95401fb1',
|
uuid: '77c55dfc-c28b-4026-942e-f94e95401fb1',
|
||||||
|
@ -64,6 +100,18 @@ const createAdRequest: CreateAdRequest = {
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const setUuid = async (uuid: string): Promise<void> => {
|
||||||
|
createAdRequest.uuid = uuid;
|
||||||
|
};
|
||||||
|
|
||||||
|
const setIsDriver = async (isDriver: boolean): Promise<void> => {
|
||||||
|
createAdRequest.driver = isDriver;
|
||||||
|
};
|
||||||
|
|
||||||
|
const setIsPassenger = async (isPassenger: boolean): Promise<void> => {
|
||||||
|
createAdRequest.passenger = isPassenger;
|
||||||
|
};
|
||||||
|
|
||||||
describe('CreateAdUseCase', () => {
|
describe('CreateAdUseCase', () => {
|
||||||
let createAdUseCase: CreateAdUseCase;
|
let createAdUseCase: CreateAdUseCase;
|
||||||
|
|
||||||
|
@ -103,12 +151,26 @@ describe('CreateAdUseCase', () => {
|
||||||
expect(createAdUseCase).toBeDefined();
|
expect(createAdUseCase).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
// describe('execute', () => {
|
describe('execute', () => {
|
||||||
// it('should create an ad', async () => {
|
it('should create an ad as driver', async () => {
|
||||||
// const ad = await createAdUseCase.execute(
|
const ad = await createAdUseCase.execute(
|
||||||
// new CreateAdCommand(createAdRequest),
|
new CreateAdCommand(createAdRequest),
|
||||||
// );
|
);
|
||||||
// expect(ad).toBeInstanceOf(Ad);
|
expect(ad).toBeInstanceOf(Ad);
|
||||||
// });
|
});
|
||||||
// });
|
it('should create an ad as passenger', async () => {
|
||||||
|
await setIsDriver(false);
|
||||||
|
await setIsPassenger(true);
|
||||||
|
const ad = await createAdUseCase.execute(
|
||||||
|
new CreateAdCommand(createAdRequest),
|
||||||
|
);
|
||||||
|
expect(ad).toBeInstanceOf(Ad);
|
||||||
|
});
|
||||||
|
it('should throw an exception if repository fails', async () => {
|
||||||
|
await setUuid('00000000-0000-0000-0000-000000000000');
|
||||||
|
await expect(
|
||||||
|
createAdUseCase.execute(new CreateAdCommand(createAdRequest)),
|
||||||
|
).rejects.toBeInstanceOf(DatabaseException);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue