public void GameManagerReceivesCorrectMessagesWhenPlacingFirstTown(UInt32[] townLocations) { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { var board = new GameBoardManager(BoardSizes.Standard); var mockGameManager = Substitute.For <IGameSession>(); mockGameManager.GetFirstSetupPassOrder().Returns(new UInt32[] { 0u, 1u, 2u, 3u }); mockGameManager.Board.Returns(board); var mockGameManagerFactory = Substitute.For <IGameSessionManager>(); mockGameManagerFactory.Create().Returns(mockGameManager); var mockLogger = Substitute.For <ILogger>(); var mockLoggerFactory = Substitute.For <ILoggerFactory>(); mockLoggerFactory.Create(Arg.Any <String>()).Returns(mockLogger); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddGameManagerFactory(mockGameManagerFactory) .AddLoggerFactory(mockLoggerFactory) .WaitUntilGameSessionManagerHasStarted(); var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager); var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager); var testPlayer3 = new TestClient(TestPlayer3UserName, gameSessionManager); var testPlayer4 = new TestClient(TestPlayer4UserName, gameSessionManager); var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilEnd); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer1); testScript.SendTownPlacementFromClient(testPlayer1, townLocations[0]); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer2); mockGameManager.Received().PlaceTown(townLocations[0]); testScript.SendTownPlacementFromClient(testPlayer2, townLocations[1]); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer3); mockGameManager.Received().PlaceTown(townLocations[1]); testScript.SendTownPlacementFromClient(testPlayer3, townLocations[2]); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), testPlayer4); mockGameManager.Received().PlaceTown(townLocations[2]); testScript.SendTownPlacementFromClient(testPlayer4, townLocations[3]); testScript.WaitUntilClientsReceiveMessageOfType(typeof(GameOverMessage), testPlayer1, testPlayer2, testPlayer3, testPlayer4); mockGameManager.Received().PlaceTown(townLocations[3]); mockLogger.DidNotReceive().Exception(Arg.Any <String>()); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void ClientsReceivePlaceTownMessageInCorrectOrder(UInt32[] firstSetupPassOrder) { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { var board = new GameBoardManager(BoardSizes.Standard); var mockGameManager = Substitute.For <IGameSession>(); mockGameManager.GetFirstSetupPassOrder().Returns(firstSetupPassOrder); mockGameManager.Board.Returns(board); var mockGameManagerFactory = Substitute.For <IGameSessionManager>(); mockGameManagerFactory.Create().Returns(mockGameManager); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddGameManagerFactory(mockGameManagerFactory) .WaitUntilGameSessionManagerHasStarted(); var testPlayers = new[] { new TestClient(TestPlayer1UserName, gameSessionManager), new TestClient(TestPlayer2UserName, gameSessionManager), new TestClient(TestPlayer3UserName, gameSessionManager), new TestClient(TestPlayer4UserName, gameSessionManager) }; var testPlayer1 = testPlayers[0]; var testPlayer2 = testPlayers[1]; var testPlayer3 = testPlayers[2]; var testPlayer4 = testPlayers[3]; var firstTestPlayer = testPlayers[firstSetupPassOrder[0]]; var secondTestPlayer = testPlayers[firstSetupPassOrder[1]]; var thirdTestPlayer = testPlayers[firstSetupPassOrder[2]]; var fourthTestPlayer = testPlayers[firstSetupPassOrder[3]]; var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilEnd); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), firstTestPlayer); testScript.SendTownPlacementFromClient(firstTestPlayer, 0u); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), secondTestPlayer); testScript.SendTownPlacementFromClient(secondTestPlayer, 10u); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), thirdTestPlayer); testScript.SendTownPlacementFromClient(thirdTestPlayer, 20u); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlaceTownMessage), fourthTestPlayer); } finally { gameSessionManager.WaitUntilGameSessionManagerHasStopped(); } }