spacetime VO tests

This commit is contained in:
sbriat 2023-08-22 08:54:35 +02:00
parent 65dd8d64b1
commit 571699a66c
3 changed files with 98 additions and 2 deletions

View File

@ -1,6 +1,6 @@
import { GeorouterPort } from '../application/ports/georouter.port';
import { GeorouterSettings } from '../application/types/georouter-settings.type';
import { SpacetimePointProps } from './value-objects/timepoint.value-object';
import { SpacetimePointProps } from './value-objects/spacetime-point.value-object';
import { WaypointProps } from './value-objects/waypoint.value-object';
// All properties that a Route has

View File

@ -1,4 +1,8 @@
import { ArgumentInvalidException, ValueObject } from '@mobicoop/ddd-library';
import {
ArgumentInvalidException,
ArgumentOutOfRangeException,
ValueObject,
} from '@mobicoop/ddd-library';
/** Note:
* Value Objects with multiple properties can contain
@ -38,5 +42,9 @@ export class SpacetimePoint extends ValueObject<SpacetimePointProps> {
throw new ArgumentInvalidException(
'distance must be greater than or equal to 0',
);
if (props.lon > 180 || props.lon < -180)
throw new ArgumentOutOfRangeException('lon must be between -180 and 180');
if (props.lat > 90 || props.lat < -90)
throw new ArgumentOutOfRangeException('lat must be between -90 and 90');
}
}

View File

@ -0,0 +1,88 @@
import {
ArgumentInvalidException,
ArgumentOutOfRangeException,
} from '@mobicoop/ddd-library';
import { SpacetimePoint } from '@modules/geography/core/domain/value-objects/spacetime-point.value-object';
describe('Timepoint value object', () => {
it('should create a timepoint value object', () => {
const timepointVO = new SpacetimePoint({
lon: 48.689445,
lat: 6.17651,
duration: 150,
distance: 12000,
});
expect(timepointVO.duration).toBe(150);
expect(timepointVO.distance).toBe(12000);
expect(timepointVO.lon).toBe(48.689445);
expect(timepointVO.lat).toBe(6.17651);
});
it('should throw an exception if longitude is invalid', () => {
try {
new SpacetimePoint({
lon: 348.689445,
lat: 6.17651,
duration: 150,
distance: 12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentOutOfRangeException);
}
try {
new SpacetimePoint({
lon: -348.689445,
lat: 6.17651,
duration: 150,
distance: 12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentOutOfRangeException);
}
});
it('should throw an exception if latitude is invalid', () => {
try {
new SpacetimePoint({
lon: 48.689445,
lat: 96.17651,
duration: 150,
distance: 12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentOutOfRangeException);
}
try {
new SpacetimePoint({
lon: 48.689445,
lat: -96.17651,
duration: 150,
distance: 12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentOutOfRangeException);
}
});
it('should throw an exception if distance is invalid', () => {
try {
new SpacetimePoint({
lon: 48.689445,
lat: 6.17651,
duration: 150,
distance: -12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentInvalidException);
}
});
it('should throw an exception if duration is invalid', () => {
try {
new SpacetimePoint({
lon: 48.689445,
lat: 6.17651,
duration: -150,
distance: 12000,
});
} catch (e: any) {
expect(e).toBeInstanceOf(ArgumentInvalidException);
}
});
});