Files
gridpilot.gg/core/identity/domain/value-objects/GameKey.test.ts
2026-01-16 19:46:49 +01:00

56 lines
1.8 KiB
TypeScript

import { IdentityDomainValidationError } from '../errors/IdentityDomainError';
import { GameKey } from './GameKey';
describe('GameKey', () => {
describe('create', () => {
it('should create valid game keys', () => {
expect(GameKey.create('iracing').value).toBe('iracing');
expect(GameKey.create('acc').value).toBe('acc');
expect(GameKey.create('f1').value).toBe('f1');
});
it('should throw for invalid game key', () => {
expect(() => GameKey.create('')).toThrow(IdentityDomainValidationError);
expect(() => GameKey.create(' ')).toThrow(IdentityDomainValidationError);
expect(() => GameKey.create('invalid game')).toThrow(IdentityDomainValidationError);
});
it('should trim whitespace', () => {
const key = GameKey.create(' iracing ');
expect(key.value).toBe('iracing');
});
it('should accept lowercase', () => {
const key = GameKey.create('iracing');
expect(key.value).toBe('iracing');
});
});
describe('equals', () => {
it('should return true for same value', () => {
const key1 = GameKey.create('iracing');
const key2 = GameKey.create('iracing');
expect(key1.equals(key2)).toBe(true);
});
it('should return false for different values', () => {
const key1 = GameKey.create('iracing');
const key2 = GameKey.create('acc');
expect(key1.equals(key2)).toBe(false);
});
});
describe('props', () => {
it('should expose props correctly', () => {
const key = GameKey.create('iracing');
expect(key.props.value).toBe('iracing');
});
});
describe('toString', () => {
it('should return string representation', () => {
const key = GameKey.create('iracing');
expect(key.toString()).toBe('iracing');
});
});
});