public void PlayersGetsNotificationWhenGameSessionIsReadyToLaunch() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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); // Act & Assert var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilClientsReceiveGameSessionReadyToLaunchMessage); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void WhenNamedClientDropsOutOfGameSessionBeforeLaunchOtherClientsAreNotified() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { var expectedMessageForTestPlayer1 = new PlayerHasLeftGameMessage(); var expectedMessageForTestPlayer2 = new OtherPlayerHasLeftGameMessage(TestPlayer1UserName); var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository(testPlayer1Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .WaitUntilGameSessionManagerHasStarted(); var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager); var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager); var testScript = new TestScript(testPlayer1, testPlayer2); testScript.AllClientsJoinGame(); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlayerDataReceivedMessage), testPlayer1, testPlayer2); // Act testPlayer1.LeaveGame(); // Assert testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer1, testPlayer1); testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer2, testPlayer2); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void AllClientsReceivePlayerCardsForAllClientsInGameSession() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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); // Act var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilClientsReceiveGameSessionReadyToLaunchMessage); // Assert testPlayer1.ContainMessagesInOrder(1, new PlayerDataReceivedMessage(testPlayer2Data), new PlayerDataReceivedMessage(testPlayer3Data), new PlayerDataReceivedMessage(testPlayer4Data)); testPlayer2.ContainMessagesInOrder(1, new PlayerDataReceivedMessage(testPlayer1Data), new PlayerDataReceivedMessage(testPlayer3Data), new PlayerDataReceivedMessage(testPlayer4Data)); testPlayer3.ContainMessagesInOrder(1, new PlayerDataReceivedMessage(testPlayer1Data), new PlayerDataReceivedMessage(testPlayer2Data), new PlayerDataReceivedMessage(testPlayer4Data)); testPlayer4.ContainMessagesInOrder(1, new PlayerDataReceivedMessage(testPlayer1Data), new PlayerDataReceivedMessage(testPlayer2Data), new PlayerDataReceivedMessage(testPlayer3Data)); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
/* * /// <summary> * /// If a client sends the wrong message when the server is waiting for * /// game initialization confirmation messages then the message should be ignored. * /// In this scenario the first client sends the wrong message. * /// </summary> * [Test] * public void WhenWaitingForGameInitializationConfirminationMessagesWrongMessagesAreIgnored() * { * // Arrange * var gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(new GameManagerFactory(), 4); * * var mockClient1 = new MockClient(); * var mockClient2 = new MockClient(); * var mockClient3 = new MockClient(); * var mockClient4 = new MockClient(); * * // Act * gameSessionManager.AddMockClients(mockClient1, mockClient2, mockClient3, mockClient4); * * this.WaitUntilClientsReceiveGameData(mockClient1, mockClient2, mockClient3, mockClient4); * * gameSessionManager.ConfirmTownPlacement(mockClient1.GameToken, mockClient1, 0u); * gameSessionManager.ConfirmGameInitialized(mockClient2.GameToken, mockClient2); * gameSessionManager.ConfirmGameInitialized(mockClient3.GameToken, mockClient3); * gameSessionManager.ConfirmGameInitialized(mockClient4.GameToken, mockClient4); * Thread.Sleep(1000); * * gameSessionManager.WaitUntilGameSessionManagerHasStopped(); * * mockClient1.ChooseTownLocationMessageReceived.ShouldBeFalse(); * mockClient2.ChooseTownLocationMessageReceived.ShouldBeFalse(); * mockClient3.ChooseTownLocationMessageReceived.ShouldBeFalse(); * mockClient4.ChooseTownLocationMessageReceived.ShouldBeFalse(); * } * * [Test] * [TestCase(new UInt32[] { 0u, 1u, 2u, 3u }, new UInt32[] { 1u, 5u, 13u, 27u })] * [TestCase(new UInt32[] { 3u, 0u, 1u, 2u }, new UInt32[] { 7u, 10u, 1u, 19u })] * [TestCase(new UInt32[] { 2u, 3u, 0u, 1u }, new UInt32[] { 13u, 26u, 5u, 9u })] * [TestCase(new UInt32[] { 1u, 2u, 3u, 0u }, new UInt32[] { 26u, 11u, 4u, 15u })] * public void CompleteFirstRoundTownPlacement(UInt32[] setupOrder, UInt32[] locationIndexes) * { * GameSessionManager gameSessionManager = null; * try * { * var board = new Board(BoardSizes.Standard); * var mockGameManager = Substitute.For<IGameManager>(); * mockGameManager.GetFirstSetupPassOrder().Returns(setupOrder); * mockGameManager.Board.Returns(board); * * var mockGameManagerFactory = Substitute.For<IGameManagerFactory>(); * mockGameManagerFactory.Create().Returns(mockGameManager); * * gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(mockGameManagerFactory, 4); * * var mockClients = new[] * { * new MockClient(gameSessionManager), * new MockClient(gameSessionManager), * new MockClient(gameSessionManager), * new MockClient(gameSessionManager) * }; * * var mockClient1 = mockClients[0]; * var mockClient2 = mockClients[1]; * var mockClient3 = mockClients[2]; * var mockClient4 = mockClients[3]; * * var firstMockClient = mockClients[setupOrder[0]]; * var secondMockClient = mockClients[setupOrder[1]]; * var thirdMockClient = mockClients[setupOrder[2]]; * var fourthMockClient = mockClients[setupOrder[3]]; * * // Act * gameSessionManager.AddMockClients(mockClient1, mockClient2, mockClient3, mockClient4); * * this.WaitUntilClientsReceiveGameData(mockClient1, mockClient2, mockClient3, mockClient4); * * this.ConfirmGameInitializedForClients(mockClient1, mockClient2, mockClient3, mockClient4); * * var locationIndex = 0; * var location = locationIndexes[locationIndex]; * * firstMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.PlaceTown(location); * * secondMockClient.WaitUntilClientReceivesPlaceTownMessage(); * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * secondMockClient.PlaceTown(location); * * thirdMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * thirdMockClient.PlaceTown(location); * * fourthMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * fourthMockClient.PlaceTown(location); * * gameSessionManager.WaitUntilGameSessionManagerHasStopped(); * * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * } * finally * { * gameSessionManager.WaitUntilGameSessionManagerHasStopped(); * } * } * * [Test] * [TestCase(new UInt32[] { 0u, 1u, 2u, 3u }, new UInt32[] { 1u, 5u, 13u, 27u, 3u, 7u, 17u, 30u })] * [TestCase(new UInt32[] { 3u, 0u, 1u, 2u }, new UInt32[] { 15u, 3u, 12u, 36u, 11u, 6u, 22u, 30u })] * [TestCase(new UInt32[] { 2u, 3u, 0u, 1u }, new UInt32[] { 10u, 2u, 14u, 23u, 33u, 9u, 21u, 37u })] * [TestCase(new UInt32[] { 1u, 2u, 3u, 0u }, new UInt32[] { 34u, 26u, 16u, 20u, 34u, 8u, 0u, 40u })] * public void CompleteBothRoundsOfTownPlacement(UInt32[] setupOrder, UInt32[] locationIndexes) * { * GameSessionManager gameSessionManager = null; * try * { * var board = new Board(BoardSizes.Standard); * var mockGameManager = Substitute.For<IGameManager>(); * mockGameManager.GetFirstSetupPassOrder().Returns(setupOrder); * var secondSetupOrder = new List<UInt32>(setupOrder); * secondSetupOrder.Reverse(); * * mockGameManager.GetSecondSetupPassOrder().Returns(secondSetupOrder.ToArray()); * mockGameManager.Board.Returns(board); * * var mockGameManagerFactory = Substitute.For<IGameManagerFactory>(); * mockGameManagerFactory.Create().Returns(mockGameManager); * * gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(mockGameManagerFactory, 4); * * var mockClients = new[] * { * new MockClient(gameSessionManager), * new MockClient(gameSessionManager), * new MockClient(gameSessionManager), * new MockClient(gameSessionManager) * }; * * var mockClient1 = mockClients[0]; * var mockClient2 = mockClients[1]; * var mockClient3 = mockClients[2]; * var mockClient4 = mockClients[3]; * * var firstMockClient = mockClients[setupOrder[0]]; * var secondMockClient = mockClients[setupOrder[1]]; * var thirdMockClient = mockClients[setupOrder[2]]; * var fourthMockClient = mockClients[setupOrder[3]]; * * // Act * gameSessionManager.AddMockClients(mockClient1, mockClient2, mockClient3, mockClient4); * * this.WaitUntilClientsReceiveGameData(mockClient1, mockClient2, mockClient3, mockClient4); * * this.ConfirmGameInitializedForClients(mockClient1, mockClient2, mockClient3, mockClient4); * * var locationIndex = 0; * var location = locationIndexes[locationIndex]; * * firstMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.PlaceTown(location); * * secondMockClient.WaitUntilClientReceivesPlaceTownMessage(); * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * secondMockClient.PlaceTown(location); * * thirdMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * thirdMockClient.PlaceTown(location); * * fourthMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * fourthMockClient.PlaceTown(location); * * // Start of round two * fourthMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * fourthMockClient.PlaceTown(location); * * thirdMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * thirdMockClient.PlaceTown(location); * * secondMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * secondMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * secondMockClient.PlaceTown(location); * * firstMockClient.WaitUntilClientReceivesPlaceTownMessage(); * firstMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * * location = locationIndexes[++locationIndex]; * firstMockClient.PlaceTown(location); * * gameSessionManager.WaitUntilGameSessionManagerHasStopped(); * * secondMockClient.NewTownLocation.ShouldBe(location); * thirdMockClient.NewTownLocation.ShouldBe(location); * fourthMockClient.NewTownLocation.ShouldBe(location); * } * finally * { * gameSessionManager.WaitUntilGameSessionManagerHasStopped(); * } * } * * private void ConfirmGameInitializedForClients(params MockClient[] mockClients) * { * foreach (var mockClient in mockClients) * { * mockClient.ConfirmGameInitialized(); * } * } * * private void WaitUntilClientsReceiveGameData(params MockClient[] mockClients) * { * var stopWatch = new Stopwatch(); * stopWatch.Start(); * * var waitingForGameData = new List<MockClient>(mockClients); * * while (waitingForGameData.Count > 0 #if !DEBUG * && stopWatch.ElapsedMilliseconds <= 1000 #endif * ) * { * for (var index = 0; index < waitingForGameData.Count; index++) * { * if (waitingForGameData[index].GameInitialized) * { * waitingForGameData.RemoveAt(index); * index--; * } * } * * Thread.Sleep(50); * } * * stopWatch.Stop(); * * if (waitingForGameData.Count > 0) * { * throw new TimeoutException("Timed out waiting for clients to receive game data."); * } * }*/ private IPlayerCardRepository CreateMockPlayerCardRepository(Jabberwocky.SoC.Service.PlayerData mandatoryPlayerData, params Jabberwocky.SoC.Service.PlayerData[] playerDataList) { var mockPlayerCardRepository = Substitute.For <IPlayerCardRepository>(); mockPlayerCardRepository.GetPlayerData(mandatoryPlayerData.Username).Returns(mandatoryPlayerData); foreach (var playerData in playerDataList) { mockPlayerCardRepository.GetPlayerData(playerData.Username).Returns(playerData); } return(mockPlayerCardRepository); }
public void AllClientsReceiveBoardDataWhenGameSessionIsLaunched() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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 gameInitializationData = GameInitializationDataBuilder.Build(new GameBoardManager(BoardSizes.Standard)); var expectedMessage = new InitializeGameMessage(gameInitializationData); // Act var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilClientsReceiveGameInitializationMessage); // Assert testPlayer1.GetLastMessage().IsSameAs(expectedMessage); testPlayer2.GetLastMessage().IsSameAs(expectedMessage); testPlayer3.GetLastMessage().IsSameAs(expectedMessage); testPlayer4.GetLastMessage().IsSameAs(expectedMessage); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void ClientsReceivePersonalMessageFromClientOnceGameSessionIsLaunched() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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.RunUntilClientsReceiveGameInitializationMessage); var messageText = "Hello There"; var expectedMessage = new PersonalMessage(TestPlayer1UserName, messageText); // Act testPlayer1.SendPersonalMessage(messageText); // Assert testScript.WaitUntilClientsReceiveMessage(expectedMessage, testPlayer2, testPlayer3, testPlayer4); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void AllClientsReceiveSameGameTokenWhenJoinedToSameGame() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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); // Act var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer4); testScript.RunUntil(TestScript.RunPoints.RunUntilClientsReceiveGameSessionReadyToLaunchMessage); // Assert testPlayer1.GameToken.ShouldNotBe(Guid.Empty); (testPlayer1.GameToken == testPlayer2.GameToken && testPlayer2.GameToken == testPlayer3.GameToken && testPlayer3.GameToken == testPlayer4.GameToken).ShouldBeTrue(); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void WhenNamedClientDropsOutOfGameSessionAfterLaunchOtherClientsAreNotified() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { var expectedMessageForTestPlayer1 = new PlayerHasLeftGameMessage(); var expectedMessageForOtherTestPlayers = new OtherPlayerHasLeftGameMessage(TestPlayer1UserName); var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var testPlayer3Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer3UserName); var testPlayer4Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer4UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository(testPlayer1Data, testPlayer2Data, testPlayer3Data, testPlayer4Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .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.RunUntilClientsReceiveGameInitializationMessage); // Act testPlayer1.LeaveGame(); // Assert testScript.WaitUntilClientsReceiveMessage(expectedMessageForTestPlayer1, testPlayer1); testScript.WaitUntilClientsReceiveMessage(expectedMessageForOtherTestPlayers, testPlayer2, testPlayer3, testPlayer4); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void ClientReceivesPersonalMessageFromAnotherClientBeforeGameSessionIsLaunched() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { // Arrange var testPlayer1Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer1UserName); var testPlayer2Data = new Jabberwocky.SoC.Service.PlayerData(TestPlayer2UserName); var mockPlayerCardRepository = this.CreateMockPlayerCardRepository( testPlayer1Data, testPlayer2Data); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddPlayerCardRepository(mockPlayerCardRepository) .WaitUntilGameSessionManagerHasStarted(); var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager); var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager); var testScript = new TestScript(testPlayer1, testPlayer2); testScript.AllClientsJoinGame(); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlayerDataReceivedMessage), testPlayer1, testPlayer2); var messageText = "Hello There"; var expectedMessage = new PersonalMessage(TestPlayer1UserName, messageText); // Act testPlayer1.SendPersonalMessage(messageText); // Assert testScript.WaitUntilClientsReceiveMessage(expectedMessage, testPlayer2); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }