import { NotFoundException } from '@nestjs/common'; import { Repository } from 'typeorm'; import { DEMO_CHARACTER_ID } from '../demo/demo-character.constants'; import { SOUTH_GATE_ID } from '../database/seeds/vertical-slice.constants'; import { Character } from './entities/character.entity'; import { CharactersService } from './characters.service'; describe('CharactersService', () => { it('returns the demo character with its current location summary', async () => { const repository = { findOne: jest.fn().mockResolvedValue({ id: DEMO_CHARACTER_ID, name: 'Aric Duskwalker', level: 1, experience: 0, silver: 0, currentHp: 100, baseHp: 100, baseAttack: 6, currentLocation: { id: SOUTH_GATE_ID, key: 'south-gate', name: 'S\u00fcdtor von Graufurt', }, }), } as unknown as Repository; const service = new CharactersService(repository); await expect(service.getDemoCharacter()).resolves.toEqual({ id: DEMO_CHARACTER_ID, name: 'Aric Duskwalker', level: 1, experience: 0, silver: 0, currentHp: 100, maxHp: 100, attack: 6, currentLocation: { id: SOUTH_GATE_ID, key: 'south-gate', name: 'S\u00fcdtor von Graufurt', }, }); expect(repository.findOne).toHaveBeenCalledWith({ where: { id: DEMO_CHARACTER_ID }, relations: { currentLocation: true }, }); }); it('exposes the persisted silver so the HUD never has to guess', async () => { const repository = { findOne: jest.fn().mockResolvedValue({ id: DEMO_CHARACTER_ID, name: 'Aric Duskwalker', level: 1, experience: 24, silver: 18, currentHp: 100, baseHp: 100, baseAttack: 6, currentLocation: { id: SOUTH_GATE_ID, key: 'south-gate', name: 'Südtor von Graufurt', }, }), } as unknown as Repository; const service = new CharactersService(repository); await expect(service.getDemoCharacter()).resolves.toEqual( expect.objectContaining({ experience: 24, silver: 18 }), ); }); it('reports a missing demo seed as not found', async () => { const repository = { findOne: jest.fn().mockResolvedValue(null), } as unknown as Repository; const service = new CharactersService(repository); await expect(service.getDemoCharacter()).rejects.toBeInstanceOf( NotFoundException, ); }); });