refactor
This commit is contained in:
184
core/racing/domain/entities/LiveryTemplate.test.ts
Normal file
184
core/racing/domain/entities/LiveryTemplate.test.ts
Normal file
@@ -0,0 +1,184 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { LiveryTemplate } from './LiveryTemplate';
|
||||
import { LiveryDecal } from '../value-objects/LiveryDecal';
|
||||
|
||||
describe('LiveryTemplate', () => {
|
||||
const validProps = {
|
||||
id: 'template1',
|
||||
leagueId: 'league1',
|
||||
seasonId: 'season1',
|
||||
carId: 'car1',
|
||||
baseImageUrl: 'https://example.com/image.png',
|
||||
};
|
||||
|
||||
it('should create a livery template', () => {
|
||||
const template = LiveryTemplate.create(validProps);
|
||||
expect(template.id.toString()).toBe('template1');
|
||||
expect(template.leagueId.toString()).toBe('league1');
|
||||
expect(template.seasonId.toString()).toBe('season1');
|
||||
expect(template.carId.toString()).toBe('car1');
|
||||
expect(template.baseImageUrl.toString()).toBe('https://example.com/image.png');
|
||||
expect(template.adminDecals).toEqual([]);
|
||||
});
|
||||
|
||||
it('should throw on empty id', () => {
|
||||
expect(() => LiveryTemplate.create({ ...validProps, id: '' })).toThrow('LiveryTemplate ID is required');
|
||||
});
|
||||
|
||||
it('should throw on empty leagueId', () => {
|
||||
expect(() => LiveryTemplate.create({ ...validProps, leagueId: '' })).toThrow('LiveryTemplate leagueId is required');
|
||||
});
|
||||
|
||||
it('should throw on empty seasonId', () => {
|
||||
expect(() => LiveryTemplate.create({ ...validProps, seasonId: '' })).toThrow('LiveryTemplate seasonId is required');
|
||||
});
|
||||
|
||||
it('should throw on empty carId', () => {
|
||||
expect(() => LiveryTemplate.create({ ...validProps, carId: '' })).toThrow('LiveryTemplate carId is required');
|
||||
});
|
||||
|
||||
it('should throw on empty baseImageUrl', () => {
|
||||
expect(() => LiveryTemplate.create({ ...validProps, baseImageUrl: '' })).toThrow('LiveryTemplate baseImageUrl is required');
|
||||
});
|
||||
|
||||
it('should add a sponsor decal', () => {
|
||||
const template = LiveryTemplate.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const updated = template.addDecal(decal);
|
||||
expect(updated.adminDecals).toHaveLength(1);
|
||||
expect(updated.adminDecals[0]).toBe(decal);
|
||||
expect(updated.updatedAt).toBeDefined();
|
||||
});
|
||||
|
||||
it('should throw when adding non-sponsor decal', () => {
|
||||
const template = LiveryTemplate.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
expect(() => template.addDecal(decal)).toThrow('Only sponsor decals can be added to admin template');
|
||||
});
|
||||
|
||||
it('should remove a decal', () => {
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const template = LiveryTemplate.create({ ...validProps, adminDecals: [decal] });
|
||||
const updated = template.removeDecal('decal1');
|
||||
expect(updated.adminDecals).toHaveLength(0);
|
||||
expect(updated.updatedAt).toBeDefined();
|
||||
});
|
||||
|
||||
it('should throw when removing non-existent decal', () => {
|
||||
const template = LiveryTemplate.create(validProps);
|
||||
expect(() => template.removeDecal('nonexistent')).toThrow('Decal not found in template');
|
||||
});
|
||||
|
||||
it('should update a decal', () => {
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const template = LiveryTemplate.create({ ...validProps, adminDecals: [decal] });
|
||||
const updatedDecal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.6,
|
||||
y: 0.6,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const updated = template.updateDecal('decal1', updatedDecal);
|
||||
expect(updated.adminDecals[0]).toBe(updatedDecal);
|
||||
expect(updated.updatedAt).toBeDefined();
|
||||
});
|
||||
|
||||
it('should throw when updating non-existent decal', () => {
|
||||
const template = LiveryTemplate.create(validProps);
|
||||
const decal = LiveryDecal.create({
|
||||
id: 'decal1',
|
||||
imageUrl: 'https://example.com/decal.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
expect(() => template.updateDecal('nonexistent', decal)).toThrow('Decal not found in template');
|
||||
});
|
||||
|
||||
it('should get sponsor decals', () => {
|
||||
const sponsorDecal = LiveryDecal.create({
|
||||
id: 'sponsor1',
|
||||
imageUrl: 'https://example.com/sponsor.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const userDecal = LiveryDecal.create({
|
||||
id: 'user1',
|
||||
imageUrl: 'https://example.com/user.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'user',
|
||||
});
|
||||
const template = LiveryTemplate.create({ ...validProps, adminDecals: [sponsorDecal, userDecal] });
|
||||
const sponsors = template.getSponsorDecals();
|
||||
expect(sponsors).toHaveLength(1);
|
||||
expect(sponsors[0]).toBe(sponsorDecal);
|
||||
});
|
||||
|
||||
it('should check if has sponsor decals', () => {
|
||||
const sponsorDecal = LiveryDecal.create({
|
||||
id: 'sponsor1',
|
||||
imageUrl: 'https://example.com/sponsor.png',
|
||||
x: 0.5,
|
||||
y: 0.5,
|
||||
width: 0.1,
|
||||
height: 0.1,
|
||||
zIndex: 1,
|
||||
type: 'sponsor',
|
||||
});
|
||||
const templateWithSponsor = LiveryTemplate.create({ ...validProps, adminDecals: [sponsorDecal] });
|
||||
const templateWithout = LiveryTemplate.create(validProps);
|
||||
expect(templateWithSponsor.hasSponsorDecals()).toBe(true);
|
||||
expect(templateWithout.hasSponsorDecals()).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user