Beispiel #1
0
        public async Task SetProficiencyAsync_SetFalse_ReturnSuccess()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();

            var statOptions = new StatisticOptions
            {
                InitialAttributeMin         = 1,
                InitialAttributeMax         = 10,
                InitialAttributePoints      = 40,
                InitialAttributesAtMax      = 7,
                InitialAttributesProficient = 0
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));
            var character  = await charProvider.GetActiveCharacterAsync(1);

            await controller.SetStatisticAsync(1, "strength", 10);

            // Act
            var result = await controller.SetProficiencyAsync(1, "strength", false);

            // Assert
            Assert.Equal(StatisticResult.StatisticSetSucessfully(), result);
        }
        /// <inheritdoc />
        public async Task <VmGoalCompletionStatistic> GetGoalCompletion(
            ApplicationUser currentUser,
            StatisticOptions options)
        {
            IQueryable <Goal> query;

            try
            {
                query = _goalsRepository.GetPerformerGoals(_dataContext.Goals, options.UserIds);
                query = _goalsRepository.GetGoalsForProjects(query, options.ProjectIds);
                query = _goalsRepository.GetGoalsForPeriod(query, options.DateBegin, options.DateEnd);
            }
            catch (ArgumentException)
            {
                throw new HttpResponseException(BadRequest, "Wrong options");
            }

            var goalsArray = await query
                             .Select(g => new Goal
            {
                PerformerId           = g.PerformerId,
                State                 = g.State,
                StateChangedDate      = g.StateChangedDate,
                ExpectedCompletedDate = g.ExpectedCompletedDate
            })
                             .ToArrayAsync();

            var usersGoals = goalsArray
                             .GroupBy(g => g.PerformerId)
                             .ToDictionary(g => g.Key, g => g.ToArray());

            return(GetGoalCompletion(usersGoals));
        }
Beispiel #3
0
        public async Task SetProficiencyAsync_ValidInput_ReturnSuccess()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();

            var statOptions = new StatisticOptions
            {
                InitialAttributeMin         = 1,
                InitialAttributeMax         = 10,
                InitialAttributePoints      = 40,
                InitialAttributesAtMax      = 7,
                InitialAttributesProficient = 1
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));
            var character  = await charProvider.GetActiveCharacterAsync(1);

            Statistic str = await statProvider.GetStatisticAsync("strength");

            await controller.SetStatisticAsync(1, "strength", 10);

            // Act
            await controller.SetProficiencyAsync(1, "strength", true);

            // Assert
            Assert.True(character.GetStatistic(str).IsProficient);
        }
Beispiel #4
0
        public async Task <ActionResult <VmProjectStatistic> > GetProjectStatistic(string userId, int projectId,
                                                                                   [FromBody] StatisticOptions options)
        {
            var statistic = await _statisticService.GetStatisticForUserAndProject(userId, projectId, options);

            return(Ok(statistic));
        }
Beispiel #5
0
        public async Task SetStatisticAsync_LevelTooHighButAttributesUnset_ReturnSuccess()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var character    = await charProvider.CreateCharacterAsync(100, "TooHigh");

            // the important bit
            character.Experience = 50000;

            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMin    = 1,
                InitialAttributeMax    = 10,
                InitialAttributePoints = 10,
                InitialSetupMaxLevel   = 1
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            var result = await controller.SetStatisticAsync(100, "strength", 3);

            // Assert
            Assert.Equal(StatisticResult.StatisticSetSucessfully(), result);
        }
Beispiel #6
0
        public async Task <VmProjectStatistic> GetStatisticForProject(int projectId, StatisticOptions options)
        {
            var query = _dataContext.Goals
                        .Where(g => g.ProjectId == projectId &&
                               !g.IsRemoved);

            return(await GetStatistic(query, options));
        }
Beispiel #7
0
        public async Task <VmProjectStatistic> GetStatisticForUser(string userId, StatisticOptions options)
        {
            var query = _dataContext.Goals
                        .Include(g => g.Project)
                        .Where(g => g.PerformerId == userId &&
                               !g.IsRemoved);

            return(await GetStatistic(query, options));
        }
Beispiel #8
0
        public async Task SetStatisticAsync_ValidInput_ReturnSuccess()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();

            var statOptions = new StatisticOptions
            {
                InitialAttributeMin    = 1,
                InitialAttributeMax    = 10,
                InitialAttributePoints = 40,
                InitialAttributesAtMax = 7
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));
            var character  = await charProvider.GetActiveCharacterAsync(1);

            // Act
            await controller.SetStatisticAsync(1, "strength", 10);

            await controller.SetStatisticAsync(1, "perception", 2);

            await controller.SetStatisticAsync(1, "endurance", 6);

            await controller.SetStatisticAsync(1, "charisma", 6);

            await controller.SetStatisticAsync(1, "intelligence", 6);

            await controller.SetStatisticAsync(1, "agility", 5);

            await controller.SetStatisticAsync(1, "luck", 5);

            // Assert
            Statistic str  = await statProvider.GetStatisticAsync("strength"),
                      per  = await statProvider.GetStatisticAsync("perception"),
                      end  = await statProvider.GetStatisticAsync("endurance"),
                      cha  = await statProvider.GetStatisticAsync("charisma"),
                      inte = await statProvider.GetStatisticAsync("intelligence"),
                      agi  = await statProvider.GetStatisticAsync("agility"),
                      lck  = await statProvider.GetStatisticAsync("luck");

            Assert.True(character.GetStatistic(str).Value.Equals(10) &&
                        character.GetStatistic(per).Value.Equals(2) &&
                        character.GetStatistic(end).Value.Equals(6) &&
                        character.GetStatistic(cha).Value.Equals(6) &&
                        character.GetStatistic(inte).Value.Equals(6) &&
                        character.GetStatistic(agi).Value.Equals(5) &&
                        character.GetStatistic(lck).Value.Equals(5));
        }
Beispiel #9
0
        public async Task SetStatisticAsync_InvalidCharacterId_ReturnCharacterNotFound()
        {
            // Arrange
            var charProvider             = new MockCharacterProvider();
            var statProvider             = new MockStatisticProvider();
            StatisticOptions statOptions = new StatisticOptions();

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            var result = await controller.SetStatisticAsync(ulong.MaxValue, "strength", 5);

            // Assert
            Assert.Equal(CharacterResult.CharacterNotFound(), result);
        }
Beispiel #10
0
        public async Task SetStatisticAsync_InvalidStatisticName_ReturnStatisticNotFound()
        {
            // Arrange
            var charProvider             = new MockCharacterProvider();
            var statProvider             = new MockStatisticProvider();
            StatisticOptions statOptions = new StatisticOptions();

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            var result = await controller.SetStatisticAsync(1, "invalid", 5);

            // Assert
            Assert.Equal(StatisticResult.StatisticNotFound(), result);
        }
Beispiel #11
0
        public async Task SetStatisticAsync_LevelTooHigh_ReturnLevelTooHigh()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var character    = await charProvider.CreateCharacterAsync(100, "TooHigh");

            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMin      = 1,
                InitialAttributeMax      = 10,
                InitialAttributePoints   = 40,
                InitialSkillPoints       = 1,
                InitialSetupMaxLevel     = 1,
                AttributePointsOnLevelUp = 0
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act

            // Set initial special
            await controller.SetStatisticAsync(100, "strength", 10);

            await controller.SetStatisticAsync(100, "perception", 2);

            await controller.SetStatisticAsync(100, "endurance", 6);

            await controller.SetStatisticAsync(100, "charisma", 6);

            await controller.SetStatisticAsync(100, "intelligence", 6);

            await controller.SetStatisticAsync(100, "agility", 5);

            await controller.SetStatisticAsync(100, "luck", 5);

            character.Experience = 50000;
            await charProvider.UpdateCharacterAsync(character);

            // Attempt to set initial special again after going past InitialSetupMaxLevel
            var result = await controller.SetStatisticAsync(100, "strength", 4);

            // Assert
            Assert.Equal(CharacterResult.LevelTooHigh(), result);
        }
Beispiel #12
0
        public async Task GiveExperienceAsync_NotInEnabledChannel_ExperienceEqualsZero()
        {
            var provider     = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                ExpEnabledChannels      = new ulong[] { 1 },
                ExpMessageLengthDivisor = 1
            };
            var strategy   = new GenericProgressionStrategy(statProvider, statOptions);
            var controller = new CharacterController(provider, strategy, new GeneralOptions());

            await controller.GiveExperienceAsync(1, 2, "12345");

            var character = await provider.GetActiveCharacterAsync(1);

            Assert.True(character.Experience == 0);
        }
Beispiel #13
0
        public async Task SetStatisticAsync_AboveMaximum_ReturnTooHigh()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMax    = 10,
                InitialAttributePoints = 12,
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            var result = await controller.SetStatisticAsync(1, "strength", 11);

            // Assert
            Assert.Equal(GenericResult.ValueTooHigh(), result);
        }
Beispiel #14
0
        public async Task SetStatisticAsync_NewValueLowerThanCurrent_ReturnInvalidInput()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var character    = await charProvider.CreateCharacterAsync(100, "TooHigh");

            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMin      = 1,
                InitialAttributeMax      = 10,
                InitialAttributePoints   = 40,
                InitialSetupMaxLevel     = 1,
                AttributePointsOnLevelUp = 0
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            // Set initial special
            await controller.SetStatisticAsync(100, "strength", 10);

            await controller.SetStatisticAsync(100, "perception", 2);

            await controller.SetStatisticAsync(100, "endurance", 6);

            await controller.SetStatisticAsync(100, "charisma", 6);

            await controller.SetStatisticAsync(100, "intelligence", 6);

            await controller.SetStatisticAsync(100, "agility", 5);

            await controller.SetStatisticAsync(100, "luck", 5);

            character.Experience = 50000;
            await charProvider.UpdateCharacterAsync(character);

            // Attempt to set special lower than current value
            var result = await controller.SetStatisticAsync(100, "strength", 4);

            // Assert
            Assert.Equal(Messages.INVALID_INPUT, result.Message);
        }
Beispiel #15
0
        public async Task <VmTotalStatistic> GetTotal(
            ApplicationUser currentUser,
            StatisticOptions options)
        {
            IQueryable <Goal> query = _dataContext.Goals;

            try
            {
                query = _goalsRepository.GetPerformerGoals(query, options.UserIds);
                query = _goalsRepository.GetGoalsForProjects(query, options.ProjectIds);
                query = _goalsRepository.GetGoalsForPeriod(query, options.DateBegin, options.DateEnd);
            }
            catch (ArgumentException)
            {
                throw new HttpResponseException(BadRequest, "Wrong options");
            }

            var goalsArray = await query
                             .Select(g => new Goal
            {
                PerformerId              = g.PerformerId,
                ProjectId                = g.ProjectId,
                Project                  = g.Project,
                State                    = g.State,
                StateChangedDate         = g.StateChangedDate,
                ExpectedCompletedDate    = g.ExpectedCompletedDate,
                EstimatedPerformingHours = g.EstimatedPerformingHours,
                ActualPerformingHours    = g.ActualPerformingHours
            })
                             .ToArrayAsync();

            var usersGoals = goalsArray
                             .GroupBy(g => g.PerformerId)
                             .ToDictionary(g => g.Key, g => g.ToArray());

            var result = new VmTotalStatistic
            {
                GoalCompletion     = _goalCompletionStatisticService.GetGoalCompletion(usersGoals),
                WorkloadByProjects = _workloadForProjectStatisticService.GetWorkloadByProject(usersGoals)
            };

            return(result);
        }
Beispiel #16
0
        public async Task GetStatisticForProject()
        {
            //Arrange
            var options = new StatisticOptions
            {
                DateBegin = DateTime.Now - TimeSpan.FromDays(1),
                DateEnd   = DateTime.Now,
                UserIds   = new List <string> {
                    _testData.Users.First().Id
                },
                ProjectIds = new List <int> {
                    _testData.Projects.First().Id
                }
            };

            //Act
            var result = await _service.GetGoalCompletion(_currentUser, options);

            //Assert
            Assert.NotNull(result);
        }
Beispiel #17
0
        public async Task SetStatisticAsync_NotEnoughPoints_ReturnNotEnoughPoints()
        {
            // Arrange
            int points    = 1;
            int luckScore = 2;

            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMax    = 10,
                InitialAttributePoints = points
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            var result = await controller.SetStatisticAsync(1, "luck", 2);

            // Assert
            // TODO: update unit tests to match new result
            Assert.Equal(GenericResult.Failure(
                             string.Format(Messages.STAT_NOT_ENOUGH_POINTS, luckScore, points)), result);
        }
        public async Task <VmWorkloadByProjectsStatistic> GetWorkloadByProject(
            ApplicationUser currentUser,
            StatisticOptions options)
        {
            IQueryable <Goal> query = _dataContext.Goals
                                      .Include(g => g.Project);

            try
            {
                query = _goalsRepository.GetPerformerGoals(query, options.UserIds);
                query = _goalsRepository.GetGoalsForProjects(query, options.ProjectIds);
                query = _goalsRepository.GetGoalsForPeriod(query, options.DateBegin, options.DateEnd);
            }
            catch (ArgumentException)
            {
                throw new HttpResponseException(BadRequest, "Wrong options");
            }

            var goalsArray = await query
                             .Select(g => new Goal
            {
                Project = new Project {
                    Name = g.Project.Name
                },
                PerformerId = g.PerformerId,
                ProjectId   = g.ProjectId,
                EstimatedPerformingHours = g.EstimatedPerformingHours,
            })
                             .ToArrayAsync();

            var usersGoals = goalsArray
                             .GroupBy(g => g.PerformerId)
                             .ToDictionary(g => g.Key, g => g.ToArray());

            return(GetWorkloadByProject(usersGoals));
        }
Beispiel #19
0
        public async Task SetStatisticAsync_TooManyAtMax_ReturnTooManyAtMax()
        {
            // Arrange
            var charProvider = new MockCharacterProvider();
            var statProvider = new MockStatisticProvider();
            var statOptions  = new StatisticOptions
            {
                InitialAttributeMax    = 2,
                InitialAttributePoints = 6,
                InitialAttributesAtMax = 2
            };

            var controller = new StatisticController(charProvider, statProvider, new GenericProgressionStrategy(statProvider, statOptions));

            // Act
            await controller.SetStatisticAsync(1, "strength", 2);

            await controller.SetStatisticAsync(1, "perception", 2);

            var result = await controller.SetStatisticAsync(1, "endurance", 2);

            // Assert
            Assert.Equal(StatisticResult.TooManyAtMax(2), result);
        }
 public async Task <IDictionary <string, VmWorkloadByDaysStatistic> > GetWorkloadByDays(
     ApplicationUser currentUser,
     StatisticOptions options)
 {
     throw new System.NotImplementedException();
 }
Beispiel #21
0
        private async Task <VmProjectStatistic> GetStatistic(IQueryable <Goal> query, StatisticOptions options)
        {
            if (options != null)
            {
                query = query.Where(g => g.CreationDate >= options.DateBegin &&
                                    g.CreationDate <= options.DateEnd);
            }

            var queryData = await query.ToArrayAsync();

            var commonStatistic = queryData.GroupBy(g => g.State)
                                  .Select(x => new
            {
                State = x.Key,
                Count = x.Count()
            })
                                  .ToArray();

            var byDayStatistic = queryData
                                 .GroupBy(x => (x.StateChangedDate ?? x.CreationDate).Date)
                                 .OrderBy(x => x.Key)
                                 .Select(x => new
            {
                Date      = x.Key,
                Statistic = x.GroupBy(y => y.State).Select(y => new
                {
                    State = y.Key,
                    Count = y.Count()
                })
            })
                                 .ToArray();

            var vm = new VmProjectStatistic
            {
                GoalsCountForState = new[]
                {
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.New)?.Count ?? 0,
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.Perform)?.Count ?? 0,
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.Delay)?.Count ?? 0,
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.Testing)?.Count ?? 0,
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.Succeed)?.Count ?? 0,
                    commonStatistic.FirstOrDefault(s => s.State == GoalState.Rejected)?.Count ?? 0
                },
                ByDateStatistics = byDayStatistic
                                   .Select(x => new ByDateGoalStatistic(x.Date, new[]
                {
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.New)?.Count ?? 0,
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.Perform)?.Count ?? 0,
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.Delay)?.Count ?? 0,
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.Testing)?.Count ?? 0,
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.Succeed)?.Count ?? 0,
                    x.Statistic.FirstOrDefault(s => s.State == GoalState.Rejected)?.Count ?? 0
                }))
                                   .ToArray()
            };

            return(vm);
        }
Beispiel #22
0
 public NewVegasProgressionStrategy(IStatisticProvider statProvider, StatisticOptions statOptions) : base(statProvider, statOptions)
 {
     _statOptions  = statOptions;
     _statProvider = statProvider;
 }
Beispiel #23
0
        public async Task <VmGoalCompletionStatistic> GetGoalCompletion([FromBody] StatisticOptions options)
        {
            var currentUser = await _currentUserService.GetCurrentUser(User);

            return(await _goalCompletionStatisticService.GetGoalCompletion(currentUser, options));
        }
Beispiel #24
0
        public async Task <VmWorkloadByProjectsStatistic> GetWorkloadByProject([FromBody] StatisticOptions options)
        {
            var currentUser = await _currentUserService.GetCurrentUser(User);

            return(await _projectWorkloadStatisticService.GetWorkloadByProject(currentUser, options));
        }
Beispiel #25
0
        public async Task <IDictionary <string, VmWorkloadByDaysStatistic> > GetWorkloadByDays([FromBody] StatisticOptions options)
        {
            var currentUser = await _currentUserService.GetCurrentUser(User);

            return(await _daysWorkloadStatisticService.GetWorkloadByDays(currentUser, options));
        }
Beispiel #26
0
        public async Task <VmTotalStatistic> GetTotal([FromBody] StatisticOptions options)
        {
            var currentUser = await _currentUserService.GetCurrentUser(User);

            return(await _totalStatisticService.GetTotal(currentUser, options));
        }
 public GenericProgressionStrategy(IStatisticProvider statProvider, StatisticOptions statOptions)
 {
     _statProvider = statProvider;
     _statOptions  = statOptions;
 }