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));
        }
Example #3
0
        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));
        }
Example #4
0
 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));
        }
Example #10
0
        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);
        }
Example #11
0
        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));
        }
Example #15
0
        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));
        }
Example #17
0
        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."));
        }