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 PlayerReceivesConfirmationOnceJoinedToGameSession() { // Arrange Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .WaitUntilGameSessionManagerHasStarted(); var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager); var testScript = new TestScript(testPlayer1); // Act testScript.AllClientsJoinGame(); testScript.WaitUntilClientsReceiveMessageOfType(typeof(ConfirmGameJoinedMessage), testPlayer1); // Assert var receivedMessage = testPlayer1.GetLastMessage(); receivedMessage.ShouldBeOfType <ConfirmGameJoinedMessage>(); ((ConfirmGameJoinedMessage)receivedMessage).GameState.ShouldBe(Jabberwocky.SoC.Service.GameSessionManager.GameStates.Lobby); } finally { gameSessionManager?.WaitUntilGameSessionManagerHasStopped(); } }
public void SameClientCannotBeAddedAsLastMemberOfGameSession() { Jabberwocky.SoC.Service.GameSessionManager gameSessionManager = null; try { Guid expectedSessionToken = Guid.NewGuid(); Guid otherSessionToken = Guid.NewGuid(); var mockGameSessionTokenFactory = NSubstitute.Substitute.For <IGameSessionTokenFactory>(); mockGameSessionTokenFactory.CreateGameSessionToken().Returns(expectedSessionToken, otherSessionToken); gameSessionManager = GameSessionManagerTestExtensions.CreateGameSessionManagerForTest(4) .AddGameSessionTokenFactory(mockGameSessionTokenFactory) .WaitUntilGameSessionManagerHasStarted(); var testPlayer1 = new TestClient(TestPlayer1UserName, gameSessionManager); var testPlayer2 = new TestClient(TestPlayer2UserName, gameSessionManager); var testPlayer3 = new TestClient(TestPlayer3UserName, gameSessionManager); // Act - Attempt to add the same client as the last member to the game session. var testScript = new TestScript(testPlayer1, testPlayer2, testPlayer3, testPlayer1); testScript.AllClientsJoinGame(); testScript.WaitUntilClientsReceiveMessageOfType(typeof(PlayerDataReceivedMessage), testPlayer1, testPlayer2, testPlayer3); // Assert testPlayer1.GameToken.ShouldBe(expectedSessionToken); testPlayer2.GameToken.ShouldBe(expectedSessionToken); testPlayer3.GameToken.ShouldBe(expectedSessionToken); } 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(); } }