Files
gridpilot.gg/adapters/bootstrap/racing/RacingDriverFactory.test.ts
2025-12-31 15:39:28 +01:00

82 lines
3.0 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { RacingDriverFactory } from './RacingDriverFactory';
import { MediaReference } from '@core/domain/media/MediaReference';
describe('RacingDriverFactory', () => {
describe('getDriverAvatarRef', () => {
it('should return deterministic MediaReference based on driver ID', () => {
const factory = new RacingDriverFactory(10, new Date(), 'inmemory');
// Test deterministic behavior
const ref1 = factory.getDriverAvatarRef('driver-1');
const ref2 = factory.getDriverAvatarRef('driver-1');
expect(ref1.equals(ref2)).toBe(true);
expect(ref1.type).toBe('system-default');
expect(ref1.variant).toBe('avatar');
});
it('should produce different refs for different IDs', () => {
const factory = new RacingDriverFactory(10, new Date(), 'inmemory');
const ref1 = factory.getDriverAvatarRef('driver-1');
const ref2 = factory.getDriverAvatarRef('driver-2');
// They should be different refs (though both are system-default avatar)
// The hash will be different
expect(ref1.hash()).not.toBe(ref2.hash());
});
it('should use hash % 3 for variant selection', () => {
const factory = new RacingDriverFactory(10, new Date(), 'inmemory');
// Test multiple IDs to ensure distribution
const refs = [
factory.getDriverAvatarRef('driver-1'),
factory.getDriverAvatarRef('driver-2'),
factory.getDriverAvatarRef('driver-3'),
factory.getDriverAvatarRef('driver-4'),
factory.getDriverAvatarRef('driver-5'),
];
// All should be system-default avatar
refs.forEach(ref => {
expect(ref.type).toBe('system-default');
expect(ref.variant).toBe('avatar');
});
});
});
describe('create', () => {
it('should create drivers with avatarRef set', () => {
const factory = new RacingDriverFactory(5, new Date(), 'inmemory');
const drivers = factory.create();
expect(drivers.length).toBe(5);
drivers.forEach(driver => {
expect(driver.avatarRef).toBeDefined();
expect(driver.avatarRef instanceof MediaReference).toBe(true);
expect(driver.avatarRef.type).toBe('system-default');
expect(driver.avatarRef.variant).toBe('avatar');
});
});
it('should create deterministic drivers', () => {
const factory1 = new RacingDriverFactory(3, new Date('2024-01-01'), 'inmemory');
const factory2 = new RacingDriverFactory(3, new Date('2024-01-01'), 'inmemory');
const drivers1 = factory1.create();
const drivers2 = factory2.create();
expect(drivers1.length).toBe(drivers2.length);
for (let i = 0; i < drivers1.length; i++) {
const driver1 = drivers1[i]!;
const driver2 = drivers2[i]!;
expect(driver1.id).toBe(driver2.id);
expect(driver1.avatarRef.equals(driver2.avatarRef)).toBe(true);
}
});
});
});