UNPKG

the-game-domain

Version:

Complete domain layer for 'The Game' card game with rich business entities, automatic persistence, action tracking, and advanced game mechanics. Features Game, Player, Card, Deck, Pile entities with repository pattern, turn management, victory/defeat dete

72 lines 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GameRepositoryManager_1 = require("./GameRepositoryManager"); const Game_1 = require("../entities/Game"); describe('GameRepositoryManager', () => { let manager; beforeEach(() => { GameRepositoryManager_1.GameRepositoryManager._instance = undefined; manager = GameRepositoryManager_1.GameRepositoryManager.getInstance(); }); describe('getInstance', () => { it('should return the same instance when called multiple times', () => { const instance1 = GameRepositoryManager_1.GameRepositoryManager.getInstance(); const instance2 = GameRepositoryManager_1.GameRepositoryManager.getInstance(); expect(instance1).toBe(instance2); }); }); describe('getDefaultRepository', () => { it('should return a repository instance', () => { const repository = manager.getDefaultRepository(); expect(repository).toBeDefined(); }); it('should return the same repository instance', () => { const repository1 = manager.getDefaultRepository(); const repository2 = manager.getDefaultRepository(); expect(repository1).toBe(repository2); }); }); describe('clearDefaultRepository', () => { it('should clear all games from the default repository', async () => { const repository = manager.getDefaultRepository(); const game = new Game_1.Game(2); await repository.save(game); expect(manager.getDefaultRepositorySize()).toBe(1); manager.clearDefaultRepository(); expect(manager.getDefaultRepositorySize()).toBe(0); }); }); describe('getDefaultRepositorySize', () => { it('should return 0 for empty repository', () => { expect(manager.getDefaultRepositorySize()).toBe(0); }); it('should return correct size when games are added', async () => { const repository = manager.getDefaultRepository(); const game = new Game_1.Game(2); await repository.save(game); expect(manager.getDefaultRepositorySize()).toBe(1); }); }); describe('integration with Game', () => { it('should automatically persist games when no repository is provided', async () => { const game = new Game_1.Game(2); await game.persist(); expect(manager.getDefaultRepositorySize()).toBe(1); const savedGame = await manager.getDefaultRepository().findById(game.id); expect(savedGame).toBeDefined(); expect(savedGame?.id).toBe(game.id); }); it('should work with multiple games', async () => { const game1 = new Game_1.Game(2); const game2 = new Game_1.Game(3); await game1.persist(); await game2.persist(); expect(manager.getDefaultRepositorySize()).toBe(2); const allGames = await manager.getDefaultRepository().findAll(); expect(allGames).toHaveLength(2); expect(allGames.map(g => g.id)).toContain(game1.id); expect(allGames.map(g => g.id)).toContain(game2.id); }); }); }); //# sourceMappingURL=GameRepositoryManager.test.js.map