Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
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();
            }
        }
Esempio n. 3
0
        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();
            }
        }
Esempio n. 4
0
        /*
         * /// <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);
        }
Esempio n. 5
0
        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();
            }
        }
Esempio n. 6
0
        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();
            }
        }
Esempio n. 7
0
        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();
            }
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 9
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();
            }
        }