コード例 #1
0
        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);
        }
コード例 #2
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);
        }
コード例 #3
0
 private static void ValidateNotNull(CreateGameDefinitionRequest createGameDefinitionRequest)
 {
     if (createGameDefinitionRequest == null)
     {
         throw new ArgumentNullException("createGameDefinitionRequest");
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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."));
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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));
        }
コード例 #9
0
        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));
        }
コード例 #10
0
        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));
        }
コード例 #11
0
        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));
        }
コード例 #12
0
        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));
        }