139 lines
3.5 KiB
TypeScript
139 lines
3.5 KiB
TypeScript
|
import { Role } from '../../../domain/types/role.enum';
|
||
|
import { Geography } from '../../../domain/entities/geography';
|
||
|
import { Coordinate } from '../../../../geography/domain/entities/coordinate';
|
||
|
import { IGeorouter } from '../../../../geography/domain/interfaces/georouter.interface';
|
||
|
import { GeorouterSettings } from '../../../../geography/domain/types/georouter-settings.type';
|
||
|
import { Route } from '../../../../geography/domain/entities/route';
|
||
|
import { IGeodesic } from '../../../../geography/domain/interfaces/geodesic.interface';
|
||
|
|
||
|
const simpleCoordinates: Coordinate[] = [
|
||
|
{
|
||
|
lon: 6,
|
||
|
lat: 47,
|
||
|
},
|
||
|
{
|
||
|
lon: 6.1,
|
||
|
lat: 47.1,
|
||
|
},
|
||
|
];
|
||
|
|
||
|
const complexCoordinates: Coordinate[] = [
|
||
|
{
|
||
|
lon: 6,
|
||
|
lat: 47,
|
||
|
},
|
||
|
{
|
||
|
lon: 6.1,
|
||
|
lat: 47.1,
|
||
|
},
|
||
|
{
|
||
|
lon: 6.2,
|
||
|
lat: 47.2,
|
||
|
},
|
||
|
];
|
||
|
|
||
|
const mockGeodesic: IGeodesic = {
|
||
|
inverse: jest.fn(),
|
||
|
};
|
||
|
|
||
|
const driverRoute: Route = new Route(mockGeodesic);
|
||
|
driverRoute.distance = 25000;
|
||
|
|
||
|
const commonRoute: Route = new Route(mockGeodesic);
|
||
|
commonRoute.distance = 20000;
|
||
|
|
||
|
const mockGeorouter: IGeorouter = {
|
||
|
route: jest
|
||
|
.fn()
|
||
|
.mockResolvedValueOnce([
|
||
|
{
|
||
|
key: 'driver',
|
||
|
route: driverRoute,
|
||
|
},
|
||
|
])
|
||
|
.mockResolvedValueOnce([
|
||
|
{
|
||
|
key: 'passenger',
|
||
|
route: commonRoute,
|
||
|
},
|
||
|
])
|
||
|
.mockResolvedValueOnce([
|
||
|
{
|
||
|
key: 'common',
|
||
|
route: commonRoute,
|
||
|
},
|
||
|
])
|
||
|
.mockResolvedValueOnce([
|
||
|
{
|
||
|
key: 'driver',
|
||
|
route: driverRoute,
|
||
|
},
|
||
|
{
|
||
|
key: 'passenger',
|
||
|
route: commonRoute,
|
||
|
},
|
||
|
]),
|
||
|
};
|
||
|
|
||
|
const georouterSettings: GeorouterSettings = {
|
||
|
withDistance: false,
|
||
|
withPoints: true,
|
||
|
withTime: false,
|
||
|
};
|
||
|
|
||
|
describe('Geography entity', () => {
|
||
|
it('should be defined', () => {
|
||
|
expect(new Geography(simpleCoordinates)).toBeDefined();
|
||
|
});
|
||
|
|
||
|
it('should create a route as driver', async () => {
|
||
|
const geography = new Geography(complexCoordinates);
|
||
|
await geography.createRoutes(
|
||
|
[Role.DRIVER],
|
||
|
mockGeorouter,
|
||
|
georouterSettings,
|
||
|
);
|
||
|
expect(geography.driverRoute).toBeDefined();
|
||
|
expect(geography.passengerRoute).toBeUndefined();
|
||
|
expect(geography.driverRoute.distance).toBe(25000);
|
||
|
});
|
||
|
|
||
|
it('should create a route as passenger', async () => {
|
||
|
const geography = new Geography(simpleCoordinates);
|
||
|
await geography.createRoutes(
|
||
|
[Role.PASSENGER],
|
||
|
mockGeorouter,
|
||
|
georouterSettings,
|
||
|
);
|
||
|
expect(geography.driverRoute).toBeUndefined();
|
||
|
expect(geography.passengerRoute).toBeDefined();
|
||
|
expect(geography.passengerRoute.distance).toBe(20000);
|
||
|
});
|
||
|
|
||
|
it('should create routes as driver and passenger with simple coordinates', async () => {
|
||
|
const geography = new Geography(simpleCoordinates);
|
||
|
await geography.createRoutes(
|
||
|
[Role.DRIVER, Role.PASSENGER],
|
||
|
mockGeorouter,
|
||
|
georouterSettings,
|
||
|
);
|
||
|
expect(geography.driverRoute).toBeDefined();
|
||
|
expect(geography.passengerRoute).toBeDefined();
|
||
|
expect(geography.driverRoute.distance).toBe(20000);
|
||
|
expect(geography.passengerRoute.distance).toBe(20000);
|
||
|
});
|
||
|
|
||
|
it('should create routes as driver and passenger with complex coordinates', async () => {
|
||
|
const geography = new Geography(complexCoordinates);
|
||
|
await geography.createRoutes(
|
||
|
[Role.DRIVER, Role.PASSENGER],
|
||
|
mockGeorouter,
|
||
|
georouterSettings,
|
||
|
);
|
||
|
expect(geography.driverRoute).toBeDefined();
|
||
|
expect(geography.passengerRoute).toBeDefined();
|
||
|
expect(geography.driverRoute.distance).toBe(25000);
|
||
|
expect(geography.passengerRoute.distance).toBe(20000);
|
||
|
});
|
||
|
});
|