import { Test, TestingModule } from '@nestjs/testing'; import { WechatGameService } from './wechat-game.service'; import { GameConfigRepository } from './repositories/game-config.repository'; import { NotFoundException } from '@nestjs/common'; import { GameConfig } from './entities/game-config.entity'; describe('WechatGameService', () => { let service: WechatGameService; let repository: GameConfigRepository; const mockGameConfig: GameConfig = { id: 'test-uuid', configKey: 'game_speed', configValue: '1.5', description: 'Game speed multiplier', isActive: true, createdAt: new Date(), updatedAt: new Date(), }; const mockRepository = { findActiveConfigs: jest.fn(), findByKey: jest.fn(), }; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ providers: [ WechatGameService, { provide: GameConfigRepository, useValue: mockRepository, }, ], }).compile(); service = module.get(WechatGameService); repository = module.get(GameConfigRepository); }); afterEach(() => { jest.clearAllMocks(); }); describe('getAllConfigs', () => { it('should return all active configs', async () => { mockRepository.findActiveConfigs.mockResolvedValue([mockGameConfig]); const result = await service.getAllConfigs(); expect(result.configs).toHaveLength(1); expect(result.total).toBe(1); expect(result.configs[0].configKey).toBe('game_speed'); expect(mockRepository.findActiveConfigs).toHaveBeenCalled(); }); it('should return empty array when no configs found', async () => { mockRepository.findActiveConfigs.mockResolvedValue([]); const result = await service.getAllConfigs(); expect(result.configs).toHaveLength(0); expect(result.total).toBe(0); }); }); describe('getConfigByKey', () => { it('should return config by key', async () => { mockRepository.findByKey.mockResolvedValue(mockGameConfig); const result = await service.getConfigByKey('game_speed'); expect(result.configKey).toBe('game_speed'); expect(result.configValue).toBe('1.5'); expect(mockRepository.findByKey).toHaveBeenCalledWith('game_speed'); }); it('should throw NotFoundException when config not found', async () => { mockRepository.findByKey.mockResolvedValue(null); await expect(service.getConfigByKey('nonexistent')).rejects.toThrow( NotFoundException, ); }); }); });