Example #1
0
        static void Main(string[] args)
        {
            string content = new WebClient().DownloadString(String.Format(urlFormat, numero_scrutin));
            var    htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(content);

            var resultsByGroup = htmlDoc.DocumentNode.SelectNodes("//div").Where(node => node.HasClass("TTgroupe") && node.HasClass("topmargin-lg"));
            Dictionary <string, GroupResults> results = new Dictionary <string, GroupResults>();

            foreach (var group in resultsByGroup)
            {
                string groupName = Decode(group.ChildNodes.Where(c => c.HasClass("agroupe")).First().GetAttributeValue("name", "unknown")).Replace("Groupe de la ", "").Replace("Groupe du ", "").Replace("Groupe ", "");
                if (!results.ContainsKey(groupName))
                {
                    var groupe = new GroupResults(groupName);
                    results.Add(groupName, groupe);
                    groupe.Contre     = ExtractDeputes(group, groupName, "Contre");
                    groupe.NonVotants = ExtractDeputes(group, groupName, "Non-votants");
                    groupe.Pour       = ExtractDeputes(group, groupName, "Pour");
                    groupe.Abstention = ExtractDeputes(group, groupName, "Abstention");
                }
            }

            string json = JsonConvert.SerializeObject(results.Values);
        }
Example #2
0
        private static void SetEnvironmentSummary(this GroupResults result)
        {
            var all = result.Groups.SelectMany(g => g.Services.SelectMany(s => s.Results));
            var groupedByEnvironment = all.GroupBy(r => r.Environment);

            foreach (var e in groupedByEnvironment)
            {
                if (e.Any(x => x.Status == StatusType.Down))
                {
                    result.Environments.Add(
                        new GroupResult
                    {
                        Environment = e.Key,
                        Status      = StatusType.Down
                    });
                }
                else
                {
                    result.Environments.Add(
                        new GroupResult
                    {
                        Environment = e.Key,
                        Status      = StatusType.Up
                    });
                }
            }

            Cleanup(result);
        }
Example #3
0
        public async Task <OperationResult <GroupResults> > GetGroupResults(int testId)
        {
            var scheduledTest = await dbContext.ScheduledTests.Include(x => x.TestTemplate).FirstOrDefaultAsync(x => x.Id == testId);

            if (scheduledTest == null)
            {
                return(new BadRequestError());
            }

            if (scheduledTest.TestTemplate.AuthorId != userContext.UserId)
            {
                return(new AuthorizationError());
            }

            var testEndedResult = await HasTestComeToEnd(testId);

            if (!testEndedResult.Succeeded)
            {
                return(testEndedResult.Error);
            }

            var query = from UserTest in dbContext.UserTests.Where(x => x.ScheduledTestId == testId)
                        from User in dbContext.Users.Where(x => x.Id == UserTest.UserId)
                        from UserAnswer in dbContext.UserAnswers.Where(ua => ua.ScheduledTestId == UserTest.ScheduledTestId && ua.UserId == UserTest.UserId).DefaultIfEmpty()
                        from Answer in dbContext.Answers.Where(an => an.QuestionId == UserAnswer.QuestionId).DefaultIfEmpty()
                        select new { UserTest, UserId = User.Id, User.UserName, UserAnswer, Answer };

            var queryResults = await query.ToArrayAsync();

            var allAnswers = await dbContext.TestItems.Include(x => x.Question).ThenInclude(x => x.Answer)
                             .Where(x => x.TestTemplateId == scheduledTest.TestTemplateId)
                             .Select(x => x.Question.Answer)
                             .ToArrayAsync();

            float maxTestScore = allAnswers.Select(x => x.MaxScore).Aggregate((x, y) => x + y);

            var userIdTestAnswer = new Dictionary <int, TestAnswers>();

            foreach (var queryResult in queryResults)
            {
                var userId = queryResult.UserId;
                if (!userIdTestAnswer.ContainsKey(userId))
                {
                    userIdTestAnswer.Add(userId, new TestAnswers(scheduledTest, queryResult.UserTest, queryResult.UserName, dateTimeProvider));
                }

                userIdTestAnswer[userId].AddAnswerPair(queryResult.UserAnswer, queryResult.Answer);
            }

            var testResults  = userIdTestAnswer.Select(x => x.Value.GetTestResult()).ToList();
            var groupResults = new GroupResults(scheduledTest.Id,
                                                scheduledTest.TestTemplate.Name,
                                                maxTestScore,
                                                testResults,
                                                testEndedResult.Data);

            return(groupResults);
        }
Example #4
0
 public GroupResultsDto MapToGroupResultsDto(GroupResults results)
 {
     return(new GroupResultsDto
     {
         Ended = results.Ended,
         MaxTestScore = results.MaxTestScore,
         TestId = results.ScheduledTestId,
         TestName = results.TestName,
         Results = results.Results.Select(MapToUserTestResultDto).ToList()
     });
 }
Example #5
0
        private static Group GetOrAddGroup(this GroupResults groupResults, string name)
        {
            Group group = groupResults.Groups.FirstOrDefault(g => g.Name == name);

            if (group == null)
            {
                group = new Group {
                    Name = name
                };
                groupResults.Groups.Add(group);
            }
            return(group);
        }
Example #6
0
        public void ShouldReturnEmptyPaginationForNoGroups()
        {
            // Arrange
            var groupResults = new GroupResults()
            {
                Groups = new List <Group>()
            };

            // Act
            _service.DoPagination(groupResults, 0, 0);

            // Assert
            groupResults.Pagination.Should().BeEquivalentTo(new Pagination());
        }
Example #7
0
        public static GroupResults AsGroupResults(this GenericResults results)
        {
            var groupResults = new GroupResults {
                Date = results.Date
            };

            foreach (var genericResult in results.Results)
            {
                groupResults.GetOrAddGroup(genericResult.Group)
                .GetOrAddService(genericResult.Name)
                .GetOrAddResult(genericResult.Environment, genericResult.Status);
            }
            groupResults.SetEnvironmentSummary();
            return(groupResults);
        }
Example #8
0
        private GroupsController SetUpController(int numGroups)
        {
            var listOfGroups = BuildGroupList(numGroups);

            var bigGroupResults = new GroupResults {
                Groups = listOfGroups
            };

            _repository.Setup(o =>
                              o.Get <GroupResults>(
                                  It.IsAny <string>(),
                                  It.IsAny <List <Query> >()))
            .ReturnsAsync(StockportWebapp.Http.HttpResponse.Successful((int)HttpStatusCode.OK, bigGroupResults));

            var mockTime   = new Mock <ITimeProvider>();
            var viewHelper = new ViewHelpers(mockTime.Object);

            return(new GroupsController(_processedRepository.Object, _repository.Object, _groupEmailBuilder.Object, _eventEmailBuilder.Object, _filteredUrl.Object, _logger.Object, _configuration.Object, _markdownWrapper.Object, viewHelper, datetimeCalculator, null, _groupsService.Object, _cookiesHelper.Object, new StockportWebapp.FeatureToggling.FeatureToggles()));
        }
Example #9
0
        public void IfSpecifiedPageNumIsImpossibleThenActualPageNumWillBeAdjustedAccordingly(
            int specifiedPageNumber,
            int numItems,
            int expectedPageNumber)
        {
            var groupResults = new GroupResults();
            var groups       = new List <Group>();

            for (var i = 0; i < numItems; i++)
            {
                groups.Add(new GroupBuilder().Build());
            }

            groupResults.Groups = groups;

            _service.DoPagination(groupResults, specifiedPageNumber, MaxNumberOfItemsPerPage);

            groupResults.Pagination.CurrentPageNumber.Should().Be(expectedPageNumber);
        }
Example #10
0
        public void DoPagination(GroupResults groupResults, int currentPageNumber, int pageSize)
        {
            if ((groupResults != null) && groupResults.Groups.Any())
            {
                var paginatedGroups = PaginationHelper.GetPaginatedItemsForSpecifiedPage(
                    groupResults.Groups,
                    currentPageNumber,
                    "groups",
                    pageSize,
                    _configuration.GetGroupsDefaultPageSize("stockportgov"));

                groupResults.Groups                = paginatedGroups.Items;
                groupResults.Pagination            = paginatedGroups.Pagination;
                groupResults.Pagination.CurrentUrl = groupResults.CurrentUrl;
            }
            else
            {
                groupResults.Pagination = new Pagination();
            }
        }
Example #11
0
        public void PaginationShouldResultInCorrectNumItemsOnPageAndCorrectNumPages(
            int totalNumItems,
            int requestedPageNumber,
            int expectedNumItemsOnPage,
            int expectedNumPages)
        {
            var groupResults = new GroupResults();
            var groups       = new List <Group>();

            for (var i = 0; i < totalNumItems; i++)
            {
                groups.Add(new GroupBuilder().Build());
            }

            groupResults.Groups = groups;

            _service.DoPagination(groupResults, requestedPageNumber, MaxNumberOfItemsPerPage);

            groupResults.Groups.Count.Should().Be(expectedNumItemsOnPage);
            groupResults.Pagination.TotalPages.Should().Be(expectedNumPages);
        }
Example #12
0
        /// <summary>
        /// Adds missing information in per environment in case results are missing due to exceptions
        /// </summary>
        /// <param name="result"></param>
        private static void Cleanup(GroupResults result)
        {
            var allEnvironments = result.Groups
                                  .SelectMany(g => g.Services.SelectMany(s => s.Results.Select(r => r.Environment))).Distinct();

            foreach (var group in result.Groups)
            {
                foreach (var service in group.Services)
                {
                    foreach (var e in allEnvironments)
                    {
                        if (service.Results.All(r => r.Environment != e))
                        {
                            service.Results.Add(new GroupResult()
                            {
                                Environment = e, Status = StatusType.Unknown
                            });
                        }
                    }
                }
            }
        }
Example #13
0
        //TODO:: look at the Tags lowercase potential issue
        public async Task <HttpResponse> GetGroupResults(GroupSearch groupSearch, string slugs)
        {
            var groupResults = new GroupResults();


            var builder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").Include(1);

            if (groupSearch.Longitude != 0 && groupSearch.Latitude != 0)
            {
                builder = builder.FieldEquals("fields.mapPosition[near]",
                                              groupSearch.Latitude +
                                              "," +
                                              groupSearch.Longitude +
                                              (groupSearch.Location.ToLower() == Defaults.Groups.Location ? ",10" : ",3.2"));
            }

            var subCategoriesArray = groupSearch.SubCategories.Split(',');
            var subCategoriesList  = subCategoriesArray.Where(c => !string.IsNullOrWhiteSpace(c));

            if (!string.IsNullOrEmpty(slugs))
            {
                var slugsList = slugs.Split(',');
                builder = builder.FieldIncludes("fields.slug", slugsList);
            }

            var entries = await GetAllEntriesAsync(_client, builder);

            if (entries == null)
            {
                return(HttpResponse.Failure(HttpStatusCode.NotFound, "No groups found"));
            }

            var groupsWithNoCoordinates = new List <Group>();
            var noCoordinatesEntries    = entries;

            if (groupSearch.Location.ToLower() == Defaults.Groups.Location)
            {
                var noCoordinatesBuilder = new QueryBuilder <ContentfulGroup>().ContentTypeIs("group").Include(1);
                if (!string.IsNullOrEmpty(slugs))
                {
                    noCoordinatesEntries = entries;
                }
                else
                {
                    noCoordinatesEntries = await GetAllEntriesAsync(_client, noCoordinatesBuilder);
                }

                groupsWithNoCoordinates = noCoordinatesEntries.Select(g => _groupFactory.ToModel(g))
                                          .Where(_ => _.MapPosition.Lat == 0 && _.MapPosition.Lon == 0)
                                          .Where(g => g.CategoriesReference.Any(c =>
                                                                                string.IsNullOrEmpty(groupSearch.Category) || c.Slug.ToLower() == groupSearch.Category.ToLower()))
                                          .Where(g => string.IsNullOrWhiteSpace(groupSearch.Tags) || g.Tags.Contains(groupSearch.Tags.ToLower()))
                                          .Where(g => _dateComparer.DateNowIsNotBetweenHiddenRange(g.DateHiddenFrom, g.DateHiddenTo))
                                          .Where(g => groupSearch.GetInvolved == string.Empty || (g.Volunteering && groupSearch.GetInvolved == "yes"))
                                          .Where(g => groupSearch.Organisation == string.Empty ||
                                                 (g.Organisation != null && g.Organisation.Slug == groupSearch.Organisation))
                                          .Where(g => !subCategoriesList.Any() ||
                                                 g.SubCategories.Any(c => subCategoriesList.Contains(c.Slug)))
                                          .ToList();

                groupsWithNoCoordinates = groupsWithNoCoordinates.OrderBy(g => g.Name).Distinct().ToList();
            }

            var groups =
                entries.Select(g => _groupFactory.ToModel(g))
                .Where(g => g.CategoriesReference.Any(c => string.IsNullOrEmpty(groupSearch.Category) || c.Slug.ToLower() == groupSearch.Category.ToLower()))
                .Where(g => string.IsNullOrWhiteSpace(groupSearch.Tags) || g.Tags.Contains(groupSearch.Tags.ToLower()))
                .Where(g => _dateComparer.DateNowIsNotBetweenHiddenRange(g.DateHiddenFrom, g.DateHiddenTo))
                .Where(g => groupSearch.GetInvolved == string.Empty || (g.Volunteering && groupSearch.GetInvolved == "yes"))
                .Where(g => groupSearch.Organisation == string.Empty || (g.Organisation != null && g.Organisation.Slug == groupSearch.Organisation))
                .Where(g => !subCategoriesList.Any() || g.SubCategories.Any(c => subCategoriesList.Contains(c.Slug)))
                .Where(_ => _.MapPosition.Lat != 0 && _.MapPosition.Lon != 0)
                .ToList();

            if (groupsWithNoCoordinates.Count > 0)
            {
                groups.AddRange(groupsWithNoCoordinates);
            }
            switch (!string.IsNullOrEmpty(groupSearch.Order) ? groupSearch.Order.ToLower() : "name a-z")
            {
            case "name a-z":
                groups = groups.OrderBy(g => g.Name).ToList();
                break;

            case "name z-a":
                groups = groups.OrderByDescending(g => g.Name).ToList();
                break;

            case "nearest":
                break;

            default:
                groups = groups.OrderBy(g => g.Name).ToList();
                break;
            }
            //if(!string.IsNullOrEmpty(category))
            groupResults.Groups = groups;

            groupResults.AvailableSubCategories = groups.SelectMany(g => g.SubCategories ?? new List <GroupSubCategory>()).ToList();

            var groupCategoryResults = await GetGroupCategories();

            if (!string.IsNullOrEmpty(groupSearch.Category) && groupCategoryResults.All(g => !string.Equals(g.Slug, groupSearch.Category, StringComparison.CurrentCultureIgnoreCase)))
            {
                return(HttpResponse.Failure(HttpStatusCode.NotFound, "No categories found"));
            }

            groupResults.Categories = groupCategoryResults;

            return(HttpResponse.Successful(groupResults));
        }