public void Handle_WhenAppropriateGameDoesNotExist_ShouldThrowNotFoundException()
        {
            // arrange
            int gameId  = 999;
            var command = new CheckAndUpdateGameWinConditionsCommand(gameId);
            var handler = new CheckAndUpdateGameWinConditionsCommandHandler(Context);

            // act
            // assert
            Should.ThrowAsync <NotFoundException>(() => handler.Handle(command, CancellationToken.None));
        }
        public async Task Handle_WhenGameWithTurnNumberLessThanMinimal_ShouldOnlyIncrementTurnNumber()
        {
            // arrange
            int gameId  = 5;
            var command = new CheckAndUpdateGameWinConditionsCommand(gameId);
            var handler = new CheckAndUpdateGameWinConditionsCommandHandler(Context);

            // act
            await handler.Handle(command, CancellationToken.None);

            Domain.Entities.Game entity = Context.Games.Find(command.GameId);

            // assert
            entity.ShouldNotBeNull();
            entity.TurnNumber.ShouldBe((byte)4);
        }
        public async Task Handle_WhenNoneOfThePlayersHaveWinConditionTilesButThereArePossibility_ShouldReturnActive()
        {
            // arrange
            int gameId  = 7;
            var command = new CheckAndUpdateGameWinConditionsCommand(gameId);
            var handler = new CheckAndUpdateGameWinConditionsCommandHandler(Context);

            // act
            GameResult result = await handler.Handle(command, CancellationToken.None);

            Domain.Entities.Game entity = Context.Games.Find(command.GameId);

            // assert
            entity.TurnNumber.ShouldBe((byte)6);
            result.ShouldBe(GameResult.Active);
            entity.Result.ShouldBe(GameResult.Active);
        }
        public async Task Handle_WhenNoughtPlayerHasWinConditionTiles_ShouldReturnLoss()
        {
            // arrange
            int gameId  = 8;
            var command = new CheckAndUpdateGameWinConditionsCommand(gameId);
            var handler = new CheckAndUpdateGameWinConditionsCommandHandler(Context);

            // act
            GameResult result = await handler.Handle(command, CancellationToken.None);

            Domain.Entities.Game entity = Context.Games.Find(command.GameId);

            // assert
            entity.TurnNumber.ShouldBe((byte)7);
            result.ShouldBe(GameResult.Loss);
            entity.Result.ShouldBe(GameResult.Loss);
        }