Example #1
0
        public void DropPlayer()
        {
            using (var context = DbTestHelper.GetNewContext())
            {
                var            sut            = new GameService(context, new ServiceLayer.Models.GameOptions());
                NewGameDetails newGameDetails = new NewGameDetails()
                {
                    Columns = 4,
                    Rows    = 4,
                    Players = new List <string>()
                    {
                        "Player1", "Player2"
                    }
                };
                var createdGameId = sut.CreateNewGame(newGameDetails);
                createdGameId.Should().NotBeNullOrEmpty();

                // Verify initial players list
                {
                    var details = sut.GetGameDetails(createdGameId);
                    details.Should().NotBeNull();
                    details.Players.Should().BeEquivalentTo(newGameDetails.Players);
                }

                // Make sure an invalid player cannot be removed
                Action act = () => sut.RemovePlayer(createdGameId, "Invalid Player");
                act.Should().Throw <PlayerNotFoundException>();

                {
                    var details = sut.GetGameDetails(createdGameId);
                    details.Should().NotBeNull();
                    details.Players.Should().BeEquivalentTo(newGameDetails.Players);
                }

                // Remove player 2
                {
                    sut.RemovePlayer(createdGameId, "Player2");

                    // Verify
                    var details = sut.GetGameDetails(createdGameId);
                    details.Should().NotBeNull();
                    details.Players.Should().ContainSingle(p => p == "Player1");
                }
            }
        }
Example #2
0
        public void CreateGame()
        {
            using (var context = DbTestHelper.GetNewContext())
            {
                var            sut            = new GameService(context, new ServiceLayer.Models.GameOptions());
                NewGameDetails newGameDetails = new NewGameDetails()
                {
                    Columns = 4,
                    Rows    = 4,
                    Players = new List <string>()
                    {
                        "Player1", "Player2"
                    }
                };
                var createdGameId = sut.CreateNewGame(newGameDetails);
                createdGameId.Should().NotBeNullOrEmpty();

                var details = sut.GetGameDetails(createdGameId);
                details.Should().NotBeNull();
                details.Players.Should().BeEquivalentTo(newGameDetails.Players);
                details.State.Should().Be(Game.GameState.IN_PROGRESS);
                details.Winner.Should().BeNullOrEmpty();
            }
        }
Example #3
0
        public void PlaySimpleGame()
        {
            using (var context = DbTestHelper.GetNewContext())
            {
                var            sut            = new GameService(context, new ServiceLayer.Models.GameOptions());
                NewGameDetails newGameDetails = new NewGameDetails()
                {
                    Columns = 4,
                    Rows    = 4,
                    Players = new List <string>()
                    {
                        "Player1", "Player2"
                    }
                };
                var createdGameId = sut.CreateNewGame(newGameDetails);
                createdGameId.Should().NotBeNullOrEmpty();

                // Each player just plays straight into their own column and fills it except for the last piece.
                for (int i = 0; i < (newGameDetails.Rows - 1) * newGameDetails.Players.Count; i++)
                {
                    var column     = i % newGameDetails.Players.Count;
                    var playerName = $"Player{column + 1}";
                    var move       = sut.PlayMove(createdGameId, new GameMoveDetails()
                    {
                        Player = playerName, Column = column, Type = GameMove.MoveType.MOVE
                    });
                    move.Should().NotBeNull();
                    move.MoveId.Should().Be(i + 1);
                    move.Type.Should().Be(GameMove.MoveType.MOVE);
                    move.Column.Should().Be(column);

                    // Verify the move
                    {
                        var moveDetails = sut.GetMove(createdGameId, i);
                        moveDetails.Should().NotBeNull();
                        moveDetails.Player.Should().Be(playerName);
                        moveDetails.Type.Should().Be(GameMove.MoveType.MOVE);
                        moveDetails.Column.Should().Be(column);
                    }

                    // Verify the game does not yet have a winner
                    {
                        var details = sut.GetGameDetails(createdGameId);
                        details.Should().NotBeNull();
                        details.State.Should().Be(Game.GameState.IN_PROGRESS);
                    }
                }

                // Winning play - Player 1 wins!
                {
                    var move = sut.PlayMove(createdGameId, new GameMoveDetails()
                    {
                        Player = "Player1", Column = 0, Type = GameMove.MoveType.MOVE
                    });
                    move.Should().NotBeNull();
                    move.MoveId.Should().Be((newGameDetails.Rows * newGameDetails.Players.Count) - 1);
                    move.Type.Should().Be(GameMove.MoveType.MOVE);
                    move.Column.Should().Be(0);

                    var details = sut.GetGameDetails(createdGameId);
                    details.Should().NotBeNull();
                    details.State.Should().Be(Game.GameState.DONE);
                    details.Winner.Should().Be("Player1");
                }

                // Get all the moves
                var allMoves = sut.GetMoves(createdGameId);
                allMoves.Should().NotBeNull();
                allMoves.Should().HaveCount((newGameDetails.Rows * newGameDetails.Players.Count) - 1);  // First row is full, second row has all but one
                allMoves.Should().OnlyHaveUniqueItems();
            }
        }