refactor
This commit is contained in:
245
core/racing/domain/entities/DriverLivery.test.ts
Normal file
245
core/racing/domain/entities/DriverLivery.test.ts
Normal file
@@ -0,0 +1,245 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { DriverLivery } from './DriverLivery';
|
||||
import { LiveryDecal } from '../value-objects/LiveryDecal';
|
||||
import { DecalOverride } from '../value-objects/DecalOverride';
|
||||
import { RacingDomainValidationError, RacingDomainInvariantError } from '../errors/RacingDomainError';
|
||||
|
||||
describe('DriverLivery', () => {
|
||||
const validProps = {
|
||||
id: 'livery-1',
|
||||
driverId: 'driver-1',
|
||||
gameId: 'game-1',
|
||||
carId: 'car-1',
|
||||
uploadedImageUrl: 'https://example.com/image.png',
|
||||
};
|
||||
|
||||
describe('create', () => {
|
||||
it('should create a valid DriverLivery', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
|
||||
expect(livery.id).toBe('livery-1');
|
||||
expect(livery.driverId.toString()).toBe('driver-1');
|
||||
expect(livery.gameId.toString()).toBe('game-1');
|
||||
expect(livery.carId.toString()).toBe('car-1');
|
||||
expect(livery.uploadedImageUrl.toString()).toBe('https://example.com/image.png');
|
||||
expect(livery.userDecals).toEqual([]);
|
||||
expect(livery.leagueOverrides).toEqual([]);
|
||||
expect(livery.isValidated()).toBe(false);
|
||||
});
|
||||
|
||||
it('should throw error for invalid id', () => {
|
||||
expect(() => DriverLivery.create({ ...validProps, id: '' })).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('should throw error for invalid driverId', () => {
|
||||
expect(() => DriverLivery.create({ ...validProps, driverId: '' })).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('should throw error for invalid gameId', () => {
|
||||
expect(() => DriverLivery.create({ ...validProps, gameId: '' })).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('should throw error for invalid carId', () => {
|
||||
expect(() => DriverLivery.create({ ...validProps, carId: '' })).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
|
||||
it('should throw error for invalid uploadedImageUrl', () => {
|
||||
expect(() => DriverLivery.create({ ...validProps, uploadedImageUrl: '' })).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('addDecal', () => {
|
||||
it('should add a user decal', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal-1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
|
||||
const updatedLivery = livery.addDecal(decal);
|
||||
|
||||
expect(updatedLivery.userDecals).toHaveLength(1);
|
||||
expect(updatedLivery.userDecals[0]).toBe(decal);
|
||||
expect(updatedLivery.updatedAt).toBeInstanceOf(Date);
|
||||
});
|
||||
|
||||
it('should throw error for non-user decal', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal-1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
|
||||
expect(() => livery.addDecal(decal)).toThrow(RacingDomainInvariantError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('removeDecal', () => {
|
||||
it('should remove a decal', () => {
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal-1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
const livery = DriverLivery.create({ ...validProps, userDecals: [decal] });
|
||||
|
||||
const updatedLivery = livery.removeDecal('decal-1');
|
||||
|
||||
expect(updatedLivery.userDecals).toHaveLength(0);
|
||||
});
|
||||
|
||||
it('should throw error if decal not found', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
|
||||
expect(() => livery.removeDecal('nonexistent')).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('updateDecal', () => {
|
||||
it('should update a decal', () => {
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal-1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
const livery = DriverLivery.create({ ...validProps, userDecals: [decal] });
|
||||
const updatedDecal = decal.moveTo(0.6, 0.6);
|
||||
|
||||
const updatedLivery = livery.updateDecal('decal-1', updatedDecal);
|
||||
|
||||
expect(updatedLivery.userDecals[0]).toBe(updatedDecal);
|
||||
});
|
||||
|
||||
it('should throw error if decal not found', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal-1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
|
||||
expect(() => livery.updateDecal('nonexistent', decal)).toThrow(RacingDomainValidationError);
|
||||
});
|
||||
});
|
||||
|
||||
describe('setLeagueOverride', () => {
|
||||
it('should add a league override', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
|
||||
const updatedLivery = livery.setLeagueOverride('league-1', 'season-1', 'decal-1', 0.5, 0.5);
|
||||
|
||||
expect(updatedLivery.leagueOverrides).toHaveLength(1);
|
||||
expect(updatedLivery.leagueOverrides[0].leagueId).toBe('league-1');
|
||||
});
|
||||
|
||||
it('should update existing override', () => {
|
||||
const override = DecalOverride.create({
|
||||
leagueId: 'league-1',
|
||||
seasonId: 'season-1',
|
||||
decalId: 'decal-1',
|
||||
newX: 0.5,
|
||||
newY: 0.5,
|
||||
});
|
||||
const livery = DriverLivery.create({ ...validProps, leagueOverrides: [override] });
|
||||
|
||||
const updatedLivery = livery.setLeagueOverride('league-1', 'season-1', 'decal-1', 0.6, 0.6);
|
||||
|
||||
expect(updatedLivery.leagueOverrides).toHaveLength(1);
|
||||
expect(updatedLivery.leagueOverrides[0].newX).toBe(0.6);
|
||||
});
|
||||
});
|
||||
|
||||
describe('removeLeagueOverride', () => {
|
||||
it('should remove a league override', () => {
|
||||
const override = DecalOverride.create({
|
||||
leagueId: 'league-1',
|
||||
seasonId: 'season-1',
|
||||
decalId: 'decal-1',
|
||||
newX: 0.5,
|
||||
newY: 0.5,
|
||||
});
|
||||
const livery = DriverLivery.create({ ...validProps, leagueOverrides: [override] });
|
||||
|
||||
const updatedLivery = livery.removeLeagueOverride('league-1', 'season-1', 'decal-1');
|
||||
|
||||
expect(updatedLivery.leagueOverrides).toHaveLength(0);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getOverridesFor', () => {
|
||||
it('should return overrides for league and season', () => {
|
||||
const override1 = DecalOverride.create({
|
||||
leagueId: 'league-1',
|
||||
seasonId: 'season-1',
|
||||
decalId: 'decal-1',
|
||||
newX: 0.5,
|
||||
newY: 0.5,
|
||||
});
|
||||
const override2 = DecalOverride.create({
|
||||
leagueId: 'league-1',
|
||||
seasonId: 'season-2',
|
||||
decalId: 'decal-2',
|
||||
newX: 0.6,
|
||||
newY: 0.6,
|
||||
});
|
||||
const livery = DriverLivery.create({ ...validProps, leagueOverrides: [override1, override2] });
|
||||
|
||||
const overrides = livery.getOverridesFor('league-1', 'season-1');
|
||||
|
||||
expect(overrides).toHaveLength(1);
|
||||
expect(overrides[0]).toBe(override1);
|
||||
});
|
||||
});
|
||||
|
||||
describe('markAsValidated', () => {
|
||||
it('should mark livery as validated', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
|
||||
const validatedLivery = livery.markAsValidated();
|
||||
|
||||
expect(validatedLivery.isValidated()).toBe(true);
|
||||
expect(validatedLivery.validatedAt).toBeInstanceOf(Date);
|
||||
});
|
||||
});
|
||||
|
||||
describe('isValidated', () => {
|
||||
it('should return false when not validated', () => {
|
||||
const livery = DriverLivery.create(validProps);
|
||||
|
||||
expect(livery.isValidated()).toBe(false);
|
||||
});
|
||||
|
||||
it('should return true when validated', () => {
|
||||
const livery = DriverLivery.create(validProps).markAsValidated();
|
||||
|
||||
expect(livery.isValidated()).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user