public void It_Doesnt_Get_Exceptions_While_Processing_Lots_Of_Events_For_The_Same_Player()
        {
            //--arrange

            //--act
            var playedGameEvent = new PlayedGameCreatedEvent
            {
                //--any playedGame from the integration test base should be sufficient to generate at least one achievement
                TriggerEntityId = testPlayedGames[0].Id
            };
            var taskList        = new List <Task <bool> >();
            var dataContexts    = new List <NemeStatsDataContext>();
            int NUMBER_OF_CALLS = 3;

            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var dataContext = new NemeStatsDataContext();
                dataContexts.Add(dataContext);
            }
            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var achievementsEventHandler = new AchievementsEventHandler(dataContexts[i], MockRepository.GenerateMock <IRollbarClient>());

                var lastTask = new Task <bool>(() => achievementsEventHandler.Handle(playedGameEvent));
                lastTask.Start();
                taskList.Add(lastTask);
            }

            try
            {
                if (taskList.Any(task => !task.Result))
                {
                    throw new AssertionException("There was an exception from one of the tasks.");
                }
            }
            finally
            {
                foreach (var dataContext in dataContexts)
                {
                    try
                    {
                        dataContext.Dispose();
                    }
                    catch (Exception)
                    {
                        //squish
                    }
                }
            }
        }
        public void It_Doesnt_Get_Exceptions_While_Processing_Lots_Of_Events_For_The_Same_Player()
        {
            //--arrange

            //--act
            var playedGameEvent = new PlayedGameCreatedEvent
            {
                //--any playedGame from the integration test base should be sufficient to generate at least one achievement
                TriggerEntityId = testPlayedGames[0].Id
            };
            var taskList = new List<Task<bool>>();
            var dataContexts = new List<NemeStatsDataContext>();
            int NUMBER_OF_CALLS = 3;
            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var dataContext = new NemeStatsDataContext();
                dataContexts.Add(dataContext);
            }
            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var achievementsEventHandler = new AchievementsEventHandler(dataContexts[i], MockRepository.GenerateMock<IRollbarClient>());

                var lastTask = new Task<bool>(() => achievementsEventHandler.Handle(playedGameEvent));
                lastTask.Start();
                taskList.Add(lastTask);
            }

            try
            {
                if (taskList.Any(task => !task.Result))
                {
                    throw new AssertionException("There was an exception from one of the tasks.");
                }
            }
            finally
            {
                foreach (var dataContext in dataContexts)
                {
                    try
                    {
                        dataContext.Dispose();
                    }
                    catch (Exception)
                    {
                        //squish
                    }
                }
            }
        }
Пример #3
0
        public void It_Wraps_Updates_In_A_Transaction_Implicitly()
        {
            var dataContext               = new NemeStatsDataContext(new NemeStatsDbContext(), new SecuredEntityValidatorFactory());
            var firstPlayedGame           = dataContext.GetQueryable <PlayedGame>().First();
            var applicationUserWhoCanSave = new ApplicationUser
            {
                CurrentGamingGroupId = firstPlayedGame.GamingGroupId
            };

            firstPlayedGame.Notes = "Integration test note: " + DateTime.UtcNow;
            dataContext.Save(firstPlayedGame, applicationUserWhoCanSave);

            var firstGameDefinition           = dataContext.GetQueryable <GameDefinition>().First(x => x.GamingGroupId == applicationUserWhoCanSave.CurrentGamingGroupId);
            int numberOfCharactersToSubstring = firstGameDefinition.Name.Length > 100 ? 100 : firstGameDefinition.Name.Length;

            firstGameDefinition.Name = (Guid.NewGuid() + firstGameDefinition.Name).Substring(0, numberOfCharactersToSubstring);
            dataContext.Save(firstGameDefinition, applicationUserWhoCanSave);

            dataContext.Dispose();

            #region See The Sql

            /*
             *
             * Opened connection at 3/24/2017 12:46:07 PM -04:00
             *
             * SELECT TOP (1)
             *  [c].[Id] AS [Id],
             *  [c].[GamingGroupId] AS [GamingGroupId],
             *  [c].[GameDefinitionId] AS [GameDefinitionId],
             *  [c].[WinnerType] AS [WinnerType],
             *  [c].[NumberOfPlayers] AS [NumberOfPlayers],
             *  [c].[DatePlayed] AS [DatePlayed],
             *  [c].[DateCreated] AS [DateCreated],
             *  [c].[DateUpdated] AS [DateUpdated],
             *  [c].[CreatedByApplicationUserId] AS [CreatedByApplicationUserId],
             *  [c].[Notes] AS [Notes]
             *  FROM [dbo].[PlayedGame] AS [c]
             *
             *
             * -- Executing at 3/24/2017 12:46:07 PM -04:00
             *
             * -- Completed in 0 ms with result: SqlDataReader
             *
             *
             *
             * Closed connection at 3/24/2017 12:46:07 PM -04:00
             *
             * Opened connection at 3/24/2017 12:46:10 PM -04:00
             *
             * SELECT TOP (2)
             *  [Extent1].[Id] AS [Id],
             *  [Extent1].[GamingGroupId] AS [GamingGroupId],
             *  [Extent1].[GameDefinitionId] AS [GameDefinitionId],
             *  [Extent1].[WinnerType] AS [WinnerType],
             *  [Extent1].[NumberOfPlayers] AS [NumberOfPlayers],
             *  [Extent1].[DatePlayed] AS [DatePlayed],
             *  [Extent1].[DateCreated] AS [DateCreated],
             *  [Extent1].[DateUpdated] AS [DateUpdated],
             *  [Extent1].[CreatedByApplicationUserId] AS [CreatedByApplicationUserId],
             *  [Extent1].[Notes] AS [Notes]
             *  FROM [dbo].[PlayedGame] AS [Extent1]
             *  WHERE 4 = [Extent1].[Id]
             *
             *
             * -- Executing at 3/24/2017 12:46:10 PM -04:00
             *
             * -- Completed in 0 ms with result: SqlDataReader
             *
             *
             *
             * Closed connection at 3/24/2017 12:46:10 PM -04:00
             *
             * Opened connection at 3/24/2017 12:46:10 PM -04:00
             *
             * Started transaction at 3/24/2017 12:46:10 PM -04:00
             *
             * UPDATE [dbo].[PlayedGame]
             * SET [Notes] = @0
             * WHERE ([Id] = @1)
             *
             * -- @0: 'Integration test note: 3/24/2017 4:46:09 PM' (Type = String, Size = -1)
             *
             * -- @1: '4' (Type = Int32)
             *
             * -- Executing at 3/24/2017 12:46:10 PM -04:00
             *
             * -- Completed in 5 ms with result: 1
             *
             *
             *
             * Committed transaction at 3/24/2017 12:46:10 PM -04:00
             *
             * Closed connection at 3/24/2017 12:46:10 PM -04:00
             *
             * Opened connection at 3/24/2017 12:46:11 PM -04:00
             *
             * SELECT TOP (1)
             *  [Extent1].[Id] AS [Id],
             *  [Extent1].[GamingGroupId] AS [GamingGroupId],
             *  [Extent1].[Name] AS [Name],
             *  [Extent1].[Description] AS [Description],
             *  [Extent1].[Active] AS [Active],
             *  [Extent1].[DateCreated] AS [DateCreated],
             *  [Extent1].[ChampionId] AS [ChampionId],
             *  [Extent1].[PreviousChampionId] AS [PreviousChampionId],
             *  [Extent1].[BoardGameGeekGameDefinitionId] AS [BoardGameGeekGameDefinitionId]
             *  FROM [dbo].[GameDefinition] AS [Extent1]
             *  WHERE [Extent1].[GamingGroupId] = @p__linq__0
             *
             *
             * -- p__linq__0: '1' (Type = Int32, IsNullable = false)
             *
             * -- Executing at 3/24/2017 12:46:11 PM -04:00
             *
             * -- Completed in 0 ms with result: SqlDataReader
             *
             *
             *
             * Closed connection at 3/24/2017 12:46:11 PM -04:00
             *
             * Opened connection at 3/24/2017 12:46:13 PM -04:00
             *
             * SELECT TOP (2)
             *  [Extent1].[Id] AS [Id],
             *  [Extent1].[GamingGroupId] AS [GamingGroupId],
             *  [Extent1].[Name] AS [Name],
             *  [Extent1].[Description] AS [Description],
             *  [Extent1].[Active] AS [Active],
             *  [Extent1].[DateCreated] AS [DateCreated],
             *  [Extent1].[ChampionId] AS [ChampionId],
             *  [Extent1].[PreviousChampionId] AS [PreviousChampionId],
             *  [Extent1].[BoardGameGeekGameDefinitionId] AS [BoardGameGeekGameDefinitionId]
             *  FROM [dbo].[GameDefinition] AS [Extent1]
             *  WHERE 27458 = [Extent1].[Id]
             *
             *
             * -- Executing at 3/24/2017 12:46:13 PM -04:00
             *
             * -- Completed in 1 ms with result: SqlDataReader
             *
             *
             *
             * Closed connection at 3/24/2017 12:46:13 PM -04:00
             *
             * Opened connection at 3/24/2017 12:46:13 PM -04:00
             *
             * Started transaction at 3/24/2017 12:46:13 PM -04:00
             *
             * UPDATE [dbo].[GameDefinition]
             * SET [Name] = @0
             * WHERE ([Id] = @1)
             *
             * -- @0: '01b16aaa-faf1-4c9a-9798-161bddf9dde' (Type = String, Size = 255)
             *
             * -- @1: '27458' (Type = Int32)
             *
             * -- Executing at 3/24/2017 12:46:13 PM -04:00
             *
             * -- Completed in 1 ms with result: 1
             *
             *
             *
             * Committed transaction at 3/24/2017 12:46:13 PM -04:00
             *
             * Closed connection at 3/24/2017 12:46:13 PM -04:00
             *
             *
             */

            #endregion
        }
Пример #4
0
        public void It_Doesnt_Get_Exceptions_While_Processing_Lots_Of_Events_For_The_Same_Player()
        {
            //--arrange

            //--act
            //--any playedGame from the integration test base should be sufficient to generate at least one achievement
            var playedGameEvent = new PlayedGameCreatedEvent(
                testPlayedGames[0].Id,
                testPlayedGames[0].GameDefinitionId,
                testPlayedGames[0].PlayerGameResults.Select(x => x.PlayerId).ToList(),
                TransactionSource.RestApi,
                testUserWithDefaultGamingGroup);

            var taskList        = new List <Task <bool> >();
            var dataContexts    = new List <NemeStatsDataContext>();
            int NUMBER_OF_CALLS = 3;

            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var dataContext = new NemeStatsDataContext();
                dataContexts.Add(dataContext);
            }

            for (int i = 0; i < NUMBER_OF_CALLS; i++)
            {
                var achievementsEventHandler = new PlayedGameEventHandler(
                    dataContexts[i],
                    MockRepository.GenerateMock <INemeStatsEventTracker>(),
                    MockRepository.GenerateMock <IAchievementProcessor>(),
                    MockRepository.GenerateMock <IChampionRecalculator>(),
                    MockRepository.GenerateMock <INemesisRecalculator>(),
                    MockRepository.GenerateMock <IGamingGroupChampionRecalculator>(),
                    MockRepository.GenerateMock <IRollbarClient>());

                var lastTask = new Task <bool>(() => achievementsEventHandler.Handle(playedGameEvent));
                lastTask.Start();
                taskList.Add(lastTask);
            }

            try
            {
                if (taskList.Any(task => !task.Result))
                {
                    throw new AssertionException("There was an exception from one of the tasks.");
                }
            }
            finally
            {
                foreach (var dataContext in dataContexts)
                {
                    try
                    {
                        dataContext.Dispose();
                    }
                    catch (Exception)
                    {
                        //squish
                    }
                }
            }
        }
 public void TearDown()
 {
     dataContext.Dispose();
 }