public void AddUsersToCompleteAnExistingSkirmishGameTest()
        {
            var maxNumberOfPlayersPerGame = 3;
            var startingDateTime = DateTime.Parse("01/01/2001 00:00:00");
            var testUserId1 = Guid.NewGuid().ToString();
            var testUserId2 = Guid.NewGuid().ToString();
            var testUserId3 = Guid.NewGuid().ToString();
            var testGameQueue = new GameQueue
            {
                Id = Guid.NewGuid(),
                Users = new List<GameUser> { new GameUser { UserId = testUserId1 } },
                Status = QueueStatus.Waiting,
                CreationTime = startingDateTime
            };

            var workerContext = new Mock<IWorkerContext>();
            var testContext = new ConcurrentDictionary<string, object>();
            testContext.GetOrAdd("currentGameQueueId", testGameQueue.Id);
            workerContext.SetupGet(p => p.Context).Returns(testContext);

            var gameRepository = new Mock<IGameRepository>();
            gameRepository.Setup(m => m.GetGameQueue(It.Is<Guid>(g => g == testGameQueue.Id)))
                          .Returns(testGameQueue)
                          .Verifiable();

            gameRepository.Setup(m => m.AddOrUpdateGameQueue(It.Is<GameQueue>(g => g.Id == testGameQueue.Id && g.Status == QueueStatus.Waiting && g.Users.Count == 2 && g.Users.First().UserId == testUserId1 && g.Users.Last().UserId == testUserId2)))
                          .Verifiable();

            gameRepository.Setup(m => m.AddOrUpdateGameQueue(It.Is<GameQueue>(g => g.Id == testGameQueue.Id && g.Status == QueueStatus.Ready && g.Users.Count == 3 && g.Users.ElementAt(0).UserId == testUserId1 && g.Users.ElementAt(1).UserId == testUserId2 && g.Users.ElementAt(2).UserId == testUserId3)))
                          .Verifiable();

            var userRepository = new Mock<IUserRepository>();
            userRepository.Setup(m => m.GetUser(It.Is<string>(u => u == testUserId2)))
                          .Returns(new UserProfile { Id = testUserId2 })
                          .Verifiable();
            userRepository.Setup(m => m.GetUser(It.Is<string>(u => u == testUserId3)))
                          .Returns(new UserProfile { Id = testUserId3 })
                          .Verifiable();
            userRepository.Setup(m => m.AddOrUpdateUserSession(It.Is<UserSession>(s => s.UserId == testUserId2 && s.ActiveGameQueueId == testGameQueue.Id)))
                          .Verifiable();

            var command = new SkirmishGameQueueCommand(userRepository.Object, gameRepository.Object, workerContext.Object, maxNumberOfPlayersPerGame, TimeSpan.FromSeconds(60));
            var context = new Dictionary<string, object>
            {
                { "userId", testUserId2 }
            };

            command.Do(context);

            context["userId"] = testUserId3;
            command.Do(context);

            gameRepository.VerifyAll();
            userRepository.VerifyAll();
        }
Exemplo n.º 2
0
        public void AddOrUpdateGameQueue(GameQueue gameQueue)
        {
            if (gameQueue == null)
            {
                throw new ArgumentNullException("gameQueue");
            }

            if (gameQueue.Id == Guid.Empty)
            {
                throw new ArgumentException("GameQueue Id cannot be empty");
            }

            this.gameQueueContainer.Save(gameQueue.Id.ToString(), gameQueue);
        }
        public void LeaveGameQueueTest()
        {
            var testUserId = Guid.NewGuid().ToString();
            var testGameQueue = new GameQueue
            {
                Id = Guid.NewGuid(),
                Users = new List<GameUser>
                {
                    new GameUser { UserId = Guid.NewGuid().ToString() },
                    new GameUser { UserId = testUserId },
                    new GameUser { UserId = Guid.NewGuid().ToString() }
                }
            };

            var gameRepository = new Mock<IGameRepository>();
            gameRepository.Setup(m => m.GetGame(It.Is<Guid>(g => g == testGameQueue.Id)))
                          .Returns((Game)null)
                          .Verifiable();
            gameRepository.Setup(m => m.GetGameQueue(It.Is<Guid>(g => g == testGameQueue.Id)))
                          .Returns(testGameQueue)
                          .Verifiable();

            gameRepository.Setup(m => m.AddOrUpdateGameQueue(It.Is<GameQueue>(g => g.Id == testGameQueue.Id && g.Users.Count == 2 && !g.Users.Any(u => u.UserId == testUserId))))
                          .Verifiable();

            var userRepository = new Mock<IUserRepository>();
            userRepository.Setup(m => m.AddOrUpdateUserSession(It.Is<UserSession>(s => s.UserId == testUserId && s.ActiveGameQueueId == Guid.Empty)))
                          .Verifiable();

            var command = new LeaveGameCommand(userRepository.Object, gameRepository.Object);
            var context = new Dictionary<string, object>
            {
                { "gameId", testGameQueue.Id },
                { "userId", testUserId }
            };

            command.Do(context);

            gameRepository.VerifyAll();
            userRepository.VerifyAll();
        }
        public string Create()
        {
            Guid gameQueueId = Guid.NewGuid();
            string userId = this.CurrentUserId;

            if (string.IsNullOrEmpty(userId))
            {
                throw new ServiceException("User does not exist. User Id: " + userId);
            }

            UserProfile profile = this.userRepository.GetUser(CurrentUserId);

            if (profile == null)
            {
                throw new ServiceException("User does not exist. User Id: " + userId);
            }

            GameUser user = new GameUser()
            {
                UserId = profile.Id,
                UserName = profile.DisplayName,
                Weapons = new List<Guid>()
            };

            GameQueue gameQueue = new GameQueue()
            {
                Id = gameQueueId,
                CreationTime = DateTime.UtcNow,
                Status = QueueStatus.Waiting,
                Users = new List<GameUser>() { user }
            };

            this.gameRepository.AddOrUpdateGameQueue(gameQueue);

            return gameQueueId.ToString();
        }
        public void AddUserToNewSkirmishGameWhenCurrentGameIsReadyTest()
        {
            var startingDateTime = DateTime.Parse("01/01/2001 00:00:00");
            var testUserId = Guid.NewGuid().ToString();
            var testGameId2 = Guid.Empty;
            var testGameQueue1 = new GameQueue
            {
                Id = Guid.NewGuid(),
                Users = new List<GameUser> { new GameUser { UserId = testUserId } },
                Status = QueueStatus.Ready,
                CreationTime = startingDateTime
            };

            var workerContext = new Mock<IWorkerContext>();
            var testContext = new ConcurrentDictionary<string, object>();
            testContext.GetOrAdd("currentGameQueueId", testGameQueue1.Id);
            workerContext.SetupGet(p => p.Context).Returns(testContext);

            var gameRepository = new Mock<IGameRepository>();
            gameRepository.Setup(m => m.GetGameQueue(It.Is<Guid>(g => g == testGameQueue1.Id)))
                          .Returns(testGameQueue1)
                          .Verifiable();

            gameRepository.Setup(m => m.AddOrUpdateGameQueue(It.Is<GameQueue>(g => g.Id != Guid.Empty && g.Id != testGameQueue1.Id && g.Status == QueueStatus.Waiting && g.Users.Count == 1 && g.Users.First().UserId == testUserId)))
                          .Callback(() => { testGameId2 = new Guid(workerContext.Object.Context["currentGameQueueId"].ToString()); })
                          .Verifiable();

            var userRepository = new Mock<IUserRepository>();
            userRepository.Setup(m => m.GetUser(It.Is<string>(u => u == testUserId)))
                          .Returns(new UserProfile { Id = testUserId })
                          .Verifiable();
            userRepository.Setup(m => m.AddOrUpdateUserSession(It.Is<UserSession>(s => s.UserId == testUserId && s.ActiveGameQueueId == testGameId2)))
                          .Verifiable();

            var command = new SkirmishGameQueueCommand(userRepository.Object, gameRepository.Object, workerContext.Object);
            var context = new Dictionary<string, object>
            {
                { "userId", testUserId }
            };

            command.Do(context);

            gameRepository.VerifyAll();
            userRepository.VerifyAll();
        }