Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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();
            }
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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();
            }
        }