public void ItThrowsAnArgumentExceptionIfTheNameIsNull() { var expectedException = new ArgumentException("createGameDefinitionRequest.Name cannot be null or whitespace."); var gameDefinition = new CreateGameDefinitionRequest { Name = null }; Exception exception = Assert.Throws<ArgumentException>(() => autoMocker.ClassUnderTest.CreateGameDefinition(gameDefinition, currentUser)); Assert.AreEqual(expectedException.Message, exception.Message); }
public GameDefinition CreateGameDefinition(CreateGameDefinitionRequest createGameDefinitionRequest, ApplicationUser currentUser) { ValidateNotNull(createGameDefinitionRequest); ValidateGameDefinitionNameIsNotNullOrWhitespace(createGameDefinitionRequest.Name); int gamingGroupId = createGameDefinitionRequest.GamingGroupId ?? currentUser.CurrentGamingGroupId; var boardGameGeekGameDefinition = CreateBoardGameGeekGameDefinition( createGameDefinitionRequest.BoardGameGeekGameDefinitionId, currentUser); var existingGameDefinition = dataContext.GetQueryable<GameDefinition>() .FirstOrDefault(game => game.GamingGroupId == gamingGroupId && game.Name == createGameDefinitionRequest.Name); if (existingGameDefinition == null) { var newGameDefinition = new GameDefinition { Name = createGameDefinitionRequest.Name, BoardGameGeekGameDefinitionId = boardGameGeekGameDefinition?.Id, Description = createGameDefinitionRequest.Description, GamingGroupId = gamingGroupId }; new Task(() => eventTracker.TrackGameDefinitionCreation(currentUser, createGameDefinitionRequest.Name)).Start(); return dataContext.Save(newGameDefinition, currentUser); } ValidateNotADuplicateGameDefinition(existingGameDefinition); existingGameDefinition.Active = true; existingGameDefinition.BoardGameGeekGameDefinitionId = boardGameGeekGameDefinition?.Id; if (!string.IsNullOrWhiteSpace(createGameDefinitionRequest.Description)) { existingGameDefinition.Description = createGameDefinitionRequest.Description; } return dataContext.Save(existingGameDefinition, currentUser); }
private static void ValidateNotNull(CreateGameDefinitionRequest createGameDefinitionRequest) { if (createGameDefinitionRequest == null) { throw new ArgumentNullException("createGameDefinitionRequest"); } }
public virtual HttpResponseMessage SaveNewGameDefinition([FromBody]NewGameDefinitionMessage newGameDefinitionMessage, [FromUri]int gamingGroupId) { var createGameDefinitionRequest = new CreateGameDefinitionRequest { BoardGameGeekGameDefinitionId = newGameDefinitionMessage.BoardGameGeekObjectId, Name = newGameDefinitionMessage.GameDefinitionName, GamingGroupId = newGameDefinitionMessage.GamingGroupId ?? gamingGroupId }; var newGameDefinition = gameDefinitionSaver.CreateGameDefinition(createGameDefinitionRequest, CurrentUser); var newlyCreatedGameDefinitionMessage = new NewlyCreatedGameDefinitionMessage { GameDefinitionId = newGameDefinition.Id, GamingGroupId = newGameDefinition.GamingGroupId }; return Request.CreateResponse(HttpStatusCode.OK, newlyCreatedGameDefinitionMessage); }
public void ItThrowsADuplicateKeyExceptionIfThereIsAnExistingActiveGameDefinitionWithTheSameNameInTheCurrentUsersGamingGroupAndTheGamingGroupIsNotExplicitlySet() { var gameDefinition = new GameDefinition { Name = "existing game definition name", Active = true, GamingGroupId = currentUser.CurrentGamingGroupId }; var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = gameDefinition.Name }; var gameDefinitionQueryable = new List<GameDefinition> { gameDefinition }.AsQueryable(); autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(gameDefinitionQueryable); Exception exception = Assert.Throws<DuplicateKeyException>( () => autoMocker.ClassUnderTest.CreateGameDefinition(createGameDefinitionRequest, currentUser)); Assert.That(exception.Message, Is.EqualTo("An active Game Definition with name '" + gameDefinition.Name + "' already exists in this Gaming Group.")); }
public void ItDoesNotRecordAGameDefinitionCreatedEventIfTheGameDefinitionIsNotNew() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", GamingGroupId = currentUser.CurrentGamingGroupId, Active = false }; var gameDefinitionQueryable = new List<GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(gameDefinitionQueryable); ; autoMocker.ClassUnderTest.CreateGameDefinition(newGameDefinition, currentUser); autoMocker.Get<INemeStatsEventTracker>().AssertWasNotCalled(mock => mock.TrackGameDefinitionCreation(currentUser, newGameDefinition.Name)); }
public void ItAttachesToABoardGameGeekGameDefinitionIfItHasABoardGameGeekGameDefinitionId() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "some new game name", BoardGameGeekGameDefinitionId = 1 }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(new List<GameDefinition>().AsQueryable()); const int EXPECTED_BGG_ID = 2; var expectedBoardGameGeekGameDefinition = new BoardGameGeekGameDefinition { Id = 2 }; autoMocker.Get<IBoardGameGeekGameDefinitionCreator>().Expect( mock => mock.CreateBoardGameGeekGameDefinition(createGameDefinitionRequest.BoardGameGeekGameDefinitionId.Value, currentUser)) .Return(expectedBoardGameGeekGameDefinition); autoMocker.ClassUnderTest.CreateGameDefinition(createGameDefinitionRequest, currentUser); var args = autoMocker.Get<IDataContext>().GetArgumentsForCallsMadeOn( dataContext => dataContext.Save(Arg<GameDefinition>.Is.Anything, Arg<ApplicationUser>.Is.Anything)); var actualGameDefinition = args[0][0] as GameDefinition; Assert.That(actualGameDefinition, Is.Not.Null); Assert.That(actualGameDefinition.BoardGameGeekGameDefinitionId, Is.EqualTo(EXPECTED_BGG_ID)); }
public void zzz_ItRecordsAGameDefinitionCreatedEvent() { var gameDefinition = new CreateGameDefinitionRequest { Name = "some name" }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(new List<GameDefinition>().AsQueryable()); autoMocker.ClassUnderTest.CreateGameDefinition(gameDefinition, currentUser); autoMocker.Get<INemeStatsEventTracker>().AssertWasCalled(mock => mock.TrackGameDefinitionCreation(currentUser, gameDefinition.Name)); }
public void ItSavesANewGameDefinitionOnTheSpecifiedGamingGroup() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "game definition name", GamingGroupId = currentUser.CurrentGamingGroupId - 1 }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(new List<GameDefinition>().AsQueryable()); autoMocker.Get<IBoardGameGeekGameDefinitionCreator>().Expect( mock => mock.CreateBoardGameGeekGameDefinition(Arg<int>.Is.Anything, Arg<ApplicationUser>.Is.Anything)) .Return(null); autoMocker.ClassUnderTest.CreateGameDefinition(createGameDefinitionRequest, currentUser); autoMocker.Get<IDataContext>().AssertWasCalled(mock => mock.Save( Arg<GameDefinition>.Matches(x => x.GamingGroupId == createGameDefinitionRequest.GamingGroupId), Arg<ApplicationUser>.Is.Anything)); }
public void ItSavesANewGameDefinitionOnTheCurrentUsersGamingGroupIfNoneIsSpecified() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "game definition name", Active = true, BoardGameGeekGameDefinitionId = 12, Description = "some description" }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(new List<GameDefinition>().AsQueryable()); autoMocker.Get<IBoardGameGeekGameDefinitionCreator>().Expect( mock => mock.CreateBoardGameGeekGameDefinition(Arg<int>.Is.Anything, Arg<ApplicationUser>.Is.Anything)) .Return(null); autoMocker.ClassUnderTest.CreateGameDefinition(createGameDefinitionRequest, currentUser); var args = autoMocker.Get<IDataContext>().GetArgumentsForCallsMadeOn(mock => mock.Save( Arg<GameDefinition>.Is.Anything, Arg<ApplicationUser>.Is.Anything)); var actualGameDefinition = args[0][0] as GameDefinition; Assert.That(actualGameDefinition, Is.Not.Null); Assert.That(actualGameDefinition.Name, Is.EqualTo(createGameDefinitionRequest.Name)); Assert.That(actualGameDefinition.GamingGroupId, Is.EqualTo(currentUser.CurrentGamingGroupId)); }
public void ReactivatingAnExistingGameDefinitionTakesTheOldDescriptionIfTheNewOneIsBlank() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", Description = "existing game definition description", Active = false, GamingGroupId = currentUser.CurrentGamingGroupId }; var gameDefinitionQueryable = new List<GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(gameDefinitionQueryable); autoMocker.ClassUnderTest.CreateGameDefinition(newGameDefinition, currentUser); var gameDefinitionThatWasSaved = (GameDefinition)autoMocker.Get<IDataContext>().GetArgumentsForCallsMadeOn(mock => mock.Save(Arg<GameDefinition>.Is.Anything, Arg<ApplicationUser>.Is.Anything))[0][0]; Assert.That(gameDefinitionThatWasSaved.Description, Is.EqualTo(existingGameDefinition.Description)); }
public void AnExistingInactiveGameDefinitionIsReactivatedIfSomeoneTriesToAddItAgain() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", GamingGroupId = currentUser.CurrentGamingGroupId, Active = false }; var gameDefinitionQueryable = new List<GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; autoMocker.Get<IDataContext>().Expect(mock => mock.GetQueryable<GameDefinition>()).Return(gameDefinitionQueryable); autoMocker.ClassUnderTest.CreateGameDefinition(newGameDefinition, currentUser); var gameDefinitionThatWasSaved = (GameDefinition)autoMocker.Get<IDataContext>().GetArgumentsForCallsMadeOn(mock => mock.Save(Arg<GameDefinition>.Is.Anything, Arg<ApplicationUser>.Is.Anything))[0][0]; Assert.That(gameDefinitionThatWasSaved.Id, Is.EqualTo(existingGameDefinition.Id)); Assert.That(gameDefinitionThatWasSaved.BoardGameGeekGameDefinitionId, Is.EqualTo(existingGameDefinition.BoardGameGeekGameDefinitionId)); Assert.That(gameDefinitionThatWasSaved.Active, Is.EqualTo(true)); }