Files
dflike/server/src/industry/__tests__/itemRegistry.test.ts
T
2026-03-08 22:41:03 +00:00

58 lines
2.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ItemRegistry, type ItemDefinition } from '../itemRegistry.js';
describe('ItemRegistry', () => {
it('registers and retrieves an item', () => {
const registry = new ItemRegistry();
const item: ItemDefinition = {
id: 'log',
name: 'Log',
description: 'A wooden log',
category: 'resource',
source: 'seed',
};
registry.register(item);
expect(registry.get('log')).toEqual(item);
});
it('returns undefined for unknown items', () => {
const registry = new ItemRegistry();
expect(registry.get('nonexistent')).toBeUndefined();
});
it('prevents duplicate registration', () => {
const registry = new ItemRegistry();
const item: ItemDefinition = {
id: 'log',
name: 'Log',
description: 'A wooden log',
category: 'resource',
source: 'seed',
};
registry.register(item);
expect(() => registry.register(item)).toThrow('already registered');
});
it('lists all registered items', () => {
const registry = new ItemRegistry();
registry.register({ id: 'log', name: 'Log', description: '', category: 'resource', source: 'seed' });
registry.register({ id: 'stone', name: 'Stone', description: '', category: 'resource', source: 'seed' });
expect(registry.getAll()).toHaveLength(2);
});
it('finds items by category', () => {
const registry = new ItemRegistry();
registry.register({ id: 'log', name: 'Log', description: '', category: 'resource', source: 'seed' });
registry.register({ id: 'axe', name: 'Axe', description: '', category: 'tool', source: 'seed' });
expect(registry.getByCategory('resource')).toHaveLength(1);
expect(registry.getByCategory('resource')[0].id).toBe('log');
});
it('createDefault registers seed resources', () => {
const registry = ItemRegistry.createDefault();
expect(registry.get('log')).toBeDefined();
expect(registry.get('stone')).toBeDefined();
expect(registry.get('water')).toBeDefined();
});
});