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(); }
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(); }