public void ItSavesANewGameDefinitionOnTheCurrentUsersGamingGroupIfNoneIsSpecified() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "game definition name", Active = true, BoardGameGeekGameDefinitionId = 12, Description = "some description" }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(new List <GameDefinition>().AsQueryable()); _autoMocker.Get <IBoardGameGeekGameDefinitionCreator>().Expect( mock => mock.CreateBoardGameGeekGameDefinition(Arg <int> .Is.Anything)) .Return(null); _autoMocker.ClassUnderTest.Execute(createGameDefinitionRequest, _currentUser, _dataContextMock); var args = _dataContextMock.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 = _gamingGroupId }; var gameDefinitionQueryable = new List <GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(gameDefinitionQueryable); _autoMocker.ClassUnderTest.Execute(newGameDefinition, _currentUser, _dataContextMock); var gameDefinitionThatWasSaved = (GameDefinition)_dataContextMock.GetArgumentsForCallsMadeOn(mock => mock.Save(Arg <GameDefinition> .Is.Anything, Arg <ApplicationUser> .Is.Anything))[0][0]; Assert.That(gameDefinitionThatWasSaved.Description, Is.EqualTo(existingGameDefinition.Description)); }
public void ReactivatingAnExistingGameDefinitionTakesTheNewDescriptionIfItIsNotBlank() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", Active = false, GamingGroupId = currentUser.CurrentGamingGroupId }; var gameDefinitionQueryable = new List <GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name, Description = "new description" }; 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(newGameDefinition.Description)); }
private static void ValidateNotNull(CreateGameDefinitionRequest createGameDefinitionRequest) { if (createGameDefinitionRequest == null) { throw new ArgumentNullException("createGameDefinitionRequest"); } }
public void ItAttachesToABoardGameGeekGameDefinitionIfItHasABoardGameGeekGameDefinitionId() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "some new game name", BoardGameGeekGameDefinitionId = 1 }; _dataContextMock.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)) .Return(expectedBoardGameGeekGameDefinition); _autoMocker.ClassUnderTest.Execute(createGameDefinitionRequest, _currentUser, _dataContextMock); var args = _dataContextMock.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 ItThrowsADuplicateKeyExceptionIfThereIsAnExistingActiveGameDefinitionInTheSpecifiedGamingGroup() { var expectedGamingGroupId = 2; var gameDefinition = new GameDefinition { Name = "existing game definition name", Active = true, GamingGroupId = expectedGamingGroupId }; var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = gameDefinition.Name, GamingGroupId = expectedGamingGroupId }; var gameDefinitionQueryable = new List <GameDefinition> { gameDefinition }.AsQueryable(); _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(gameDefinitionQueryable); Exception exception = Assert.Throws <DuplicateKeyException>( () => _autoMocker.ClassUnderTest.Execute(createGameDefinitionRequest, _currentUser, _dataContextMock)); Assert.That(exception.Message, Is.EqualTo("An active Game Definition with name '" + gameDefinition.Name + "' already exists in this Gaming Group.")); }
public void AnExistingInactiveGameDefinitionIsReactivatedIfSomeoneTriesToAddItAgain() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", GamingGroupId = _gamingGroupId, Active = false }; var gameDefinitionQueryable = new List <GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(gameDefinitionQueryable); _autoMocker.ClassUnderTest.Execute(newGameDefinition, _currentUser, _dataContextMock); var gameDefinitionThatWasSaved = (GameDefinition)_dataContextMock.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)); }
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.Execute(gameDefinition, _currentUser, _dataContextMock)); Assert.AreEqual(expectedException.Message, exception.Message); }
public void zzz_ItRecordsAGameDefinitionCreatedEvent() { var gameDefinition = new CreateGameDefinitionRequest { Name = "some name" }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(new List <GameDefinition>().AsQueryable()); _autoMocker.ClassUnderTest.Execute(gameDefinition, _currentUser, _dataContextMock); _autoMocker.Get <INemeStatsEventTracker>().AssertWasCalled(mock => mock.TrackGameDefinitionCreation(_currentUser, gameDefinition.Name)); }
public void ItThrowsAnArgumentExceptionIfTheNameIsWhitespace() { var gameDefinition = new CreateGameDefinitionRequest { Name = " " }; var expectedException = new ArgumentException("createGameDefinitionRequest.Name cannot be null or whitespace."); Exception exception = Assert.Throws <ArgumentException>( () => autoMocker.ClassUnderTest.CreateGameDefinition(gameDefinition, currentUser)); Assert.AreEqual(expectedException.Message, exception.Message); }
public virtual HttpResponseMessage SaveNewGameDefinition([FromBody] NewGameDefinitionMessage newGameDefinitionMessage, [FromUri] int gamingGroupId) { var createGameDefinitionRequest = new CreateGameDefinitionRequest { BoardGameGeekGameDefinitionId = newGameDefinitionMessage.BoardGameGeekObjectId, Name = newGameDefinitionMessage.GameDefinitionName }; var newGameDefinition = gameDefinitionSaver.CreateGameDefinition(createGameDefinitionRequest, CurrentUser); var newlyCreatedGameDefinitionMessage = new NewlyCreatedGameDefinitionMessage { GameDefinitionId = newGameDefinition.Id }; return(Request.CreateResponse(HttpStatusCode.OK, newlyCreatedGameDefinitionMessage)); }
public void It_Throws_A_NoValidGamingGroupException_If_The_User_Has_No_Gaming_Group_And_There_Is_None_Specified_On_The_Request() { //--arrange _currentUser.CurrentGamingGroupId = null; var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "some name", GamingGroupId = null }; var expectedException = new NoValidGamingGroupException(_currentUser.Id); //--act var actualException = Assert.Throws <NoValidGamingGroupException>( () => _autoMocker.ClassUnderTest.Execute(createGameDefinitionRequest, _currentUser, _dataContextMock)); //--assert actualException.Message.ShouldBe(expectedException.Message); }
public void ItSavesANewGameDefinitionOnTheSpecifiedGamingGroup() { var createGameDefinitionRequest = new CreateGameDefinitionRequest { Name = "game definition name", GamingGroupId = _currentUser.CurrentGamingGroupId - 1 }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(new List <GameDefinition>().AsQueryable()); _autoMocker.Get <IBoardGameGeekGameDefinitionCreator>().Expect( mock => mock.CreateBoardGameGeekGameDefinition(Arg <int> .Is.Anything)) .Return(null); _autoMocker.ClassUnderTest.Execute(createGameDefinitionRequest, _currentUser, _dataContextMock); _dataContextMock.AssertWasCalled(mock => mock.Save( Arg <GameDefinition> .Matches(x => x.GamingGroupId == createGameDefinitionRequest.GamingGroupId), Arg <ApplicationUser> .Is.Anything)); }
public virtual HttpResponseMessage SaveNewGameDefinition([FromBody] NewGameDefinitionMessage newGameDefinitionMessage, [FromUri] int gamingGroupId) { var createGameDefinitionRequest = new CreateGameDefinitionRequest { BoardGameGeekGameDefinitionId = newGameDefinitionMessage.BoardGameGeekObjectId, Name = newGameDefinitionMessage.GameDefinitionName, GamingGroupId = newGameDefinitionMessage.GamingGroupId }; var newGameDefinition = _createGameDefinitionComponent.Execute(createGameDefinitionRequest, CurrentUser); var newlyCreatedGameDefinitionMessage = new NewlyCreatedGameDefinitionMessage { GameDefinitionId = newGameDefinition.Id, GamingGroupId = newGameDefinition.GamingGroupId, NemeStatsUrl = AbsoluteUrlBuilder.GetGameDefinitionUrl(newGameDefinition.Id) }; return(Request.CreateResponse(HttpStatusCode.OK, newlyCreatedGameDefinitionMessage)); }
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)); }
public void ItDoesNotRecordAGameDefinitionCreatedEventIfTheGameDefinitionIsNotNew() { var existingGameDefinition = new GameDefinition { Id = 1, Name = "existing game definition name", GamingGroupId = _gamingGroupId, Active = false }; var gameDefinitionQueryable = new List <GameDefinition> { existingGameDefinition }.AsQueryable(); var newGameDefinition = new CreateGameDefinitionRequest { Name = existingGameDefinition.Name }; _dataContextMock.Expect(mock => mock.GetQueryable <GameDefinition>()).Return(gameDefinitionQueryable);; _autoMocker.ClassUnderTest.Execute(newGameDefinition, _currentUser, _dataContextMock); _autoMocker.Get <INemeStatsEventTracker>().AssertWasNotCalled(mock => mock.TrackGameDefinitionCreation(_currentUser, newGameDefinition.Name)); }
public void ItThrowsADuplicateKeyExceptionIfThereIsAnExistingActiveGameDefinitionWithTheSameName() { var gameDefinition = new GameDefinition { Name = "existing game definition name", Active = true, GamingGroupId = currentUser.CurrentGamingGroupId }; CreateGameDefinitionRequest 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.")); }