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"); } } }
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(); } }
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(); } }