コード例 #1
0
        public AddGroupDelegateViewModel(
            SearchSortFilterPaginationResult <DelegateUserCard> result,
            IEnumerable <FilterModel> availableFilters,
            List <CentreRegistrationPrompt> customPrompts,
            int groupId,
            string groupName
            ) : base(
                result,
                true,
                availableFilters
                )
        {
            GroupId   = groupId;
            GroupName = groupName;
            var promptsWithOptions = customPrompts.Where(customPrompt => customPrompt.Options.Count > 0);

            Delegates = result.ItemsToDisplay.Select(
                delegateUser =>
            {
                var customFields = PromptsService.GetDelegateRegistrationPrompts(delegateUser, customPrompts);
                return(new SearchableDelegateViewModel(
                           delegateUser,
                           customFields,
                           promptsWithOptions,
                           null
                           ));
            }
                );
        }
        public void SearchFilterSortAndPaginate_with_filter_only_returns_expected_result()
        {
            // Given
            var availableFilters = new List <FilterModel>
            {
                new FilterModel(
                    "Name",
                    "Name",
                    new List <FilterOptionModel> {
                    new FilterOptionModel("A", "Name|Name|A", FilterStatus.Default)
                }
                    ),
            };
            var options = new SearchSortFilterAndPaginateOptions(
                null,
                null,
                new FilterOptions("Name|Name|A", availableFilters),
                null
                );

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(new[] { new SortableItem("A", 10) }, 1, 1, int.MaxValue, 1, true),
                null,
                null,
                null,
                "Name|Name|A"
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
コード例 #3
0
        public CurrentPageViewModel(
            SearchSortFilterPaginationResult <CurrentLearningItem> result,
            bool apiIsAccessible,
            string?bannerText
            ) : base(result, false, searchLabel: "Search your current courses")
        {
            ApiIsAccessible = apiIsAccessible;
            BannerText      = bannerText;

            CurrentActivities = result.ItemsToDisplay.Select <BaseLearningItem, CurrentLearningItemViewModel>(
                activity =>
            {
                return(activity switch
                {
                    CurrentCourse currentCourse => new CurrentCourseViewModel(
                        currentCourse,
                        result.GetReturnPageQuery($"{currentCourse.Id}-course-card")
                        ),
                    SelfAssessment selfAssessment => new SelfAssessmentCardViewModel(
                        selfAssessment,
                        result.GetReturnPageQuery($"{selfAssessment.Id}-sa-card")
                        ),
                    _ => new CurrentLearningResourceViewModel(
                        (ActionPlanResource)activity,
                        result.GetReturnPageQuery($"{activity.Id}-lhr-card")
                        ),
                });
            }
コード例 #4
0
        public AllDelegatesViewModel(
            SearchSortFilterPaginationResult <DelegateUserCard> result,
            IReadOnlyCollection <CentreRegistrationPrompt> centreRegistrationPrompts,
            IEnumerable <FilterModel> availableFilters
            ) : base(
                result,
                true,
                availableFilters,
                "Search delegates"
                )
        {
            var promptsWithOptions =
                centreRegistrationPrompts.Where(registrationPrompt => registrationPrompt.Options.Count > 0);

            Delegates = result.ItemsToDisplay.Select(
                delegateUser =>
            {
                var delegateRegistrationPrompts =
                    PromptsService.GetDelegateRegistrationPrompts(delegateUser, centreRegistrationPrompts);
                return(new SearchableDelegateViewModel(
                           delegateUser,
                           delegateRegistrationPrompts,
                           promptsWithOptions,
                           result.GetReturnPageQuery($"{delegateUser.Id}-card")
                           ));
            }
                );
        }
        public void SearchFilterSortAndPaginate_with_low_configured_item_limit_returns_javascript_enabled_false()
        {
            // Given
            var options = new SearchSortFilterAndPaginateOptions(
                null,
                null,
                null,
                new PaginationOptions(1, 8)
                );

            A.CallTo(() => configuration["JavascriptSearchSortFilterPaginateItemLimit"]).Returns("2");

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(allItems.Take(8), 1, 2, 8, 10, false),
                null,
                null,
                null,
                null
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
コード例 #6
0
        public CourseDelegatesViewModel(
            CourseDelegatesData courseDelegatesData,
            SearchSortFilterPaginationResult <CourseDelegate> result,
            IEnumerable <FilterModel> availableFilters,
            string customisationIdQueryParameterName
            )
        {
            CustomisationId = courseDelegatesData.CustomisationId;

            var courseOptions = courseDelegatesData.Courses
                                .Select(c => (c.CustomisationId, c.CourseNameWithInactiveFlag));

            Courses = SelectListHelper.MapOptionsToSelectListItems(courseOptions, courseDelegatesData.CustomisationId);

            CourseDetails = courseDelegatesData.CustomisationId.HasValue
                ? new SelectedCourseDetailsViewModel(
                result,
                availableFilters,
                courseDelegatesData,
                new Dictionary <string, string>
            {
                { customisationIdQueryParameterName, courseDelegatesData.CustomisationId.Value.ToString() }
            }
                )
                : null;
        }
コード例 #7
0
 public RefactoredFindYourCentreViewModel(
     SearchSortFilterPaginationResult <CentreSummaryForFindYourCentre> centreSummaries,
     IEnumerable <FilterModel> availableFilters
     ) :
     base(centreSummaries, true, availableFilters, "Search Centres")
 {
     CentreSummaries = centreSummaries.ItemsToDisplay;
 }
コード例 #8
0
 public AvailablePageViewModel(
     SearchSortFilterPaginationResult <AvailableCourse> result,
     string?bannerText
     ) : base(result, false, searchLabel: "Search courses")
 {
     BannerText       = bannerText;
     AvailableCourses = result.ItemsToDisplay.Select(c => new AvailableCourseViewModel(c));
 }
コード例 #9
0
 public MyFrameworksViewModel(
     SearchSortFilterPaginationResult <BrandedFramework> result,
     bool isFrameworkDeveloper
     ) : base(result, false)
 {
     BrandedFrameworks    = result.ItemsToDisplay;
     IsFrameworkDeveloper = isFrameworkDeveloper;
 }
コード例 #10
0
 public MyStaffListViewModel(
     AdminUser adminUser,
     SearchSortFilterPaginationResult <SupervisorDelegateDetailViewModel> result,
     CentreRegistrationPrompts centreRegistrationPrompts
     ) : base(result, false, searchLabel: "Search administrators")
 {
     AdminUser = adminUser;
     CentreRegistrationPrompts         = centreRegistrationPrompts;
     SuperviseDelegateDetailViewModels = result.ItemsToDisplay;
 }
コード例 #11
0
 public EmailDelegatesViewModel(
     SearchSortFilterPaginationResult <DelegateUserCard> result,
     IEnumerable <FilterModel> availableFilters,
     EmailDelegatesFormData formData
     ) : this(result, availableFilters)
 {
     SelectedDelegateIds = formData.SelectedDelegateIds;
     Day   = formData.Day;
     Month = formData.Month;
     Year  = formData.Year;
 }
コード例 #12
0
 public DelegateCoursesViewModel(
     SearchSortFilterPaginationResult <CourseStatisticsWithAdminFieldResponseCounts> result,
     IEnumerable <FilterModel> availableFilters
     ) : base(
         result,
         true,
         availableFilters,
         "Search courses"
         )
 {
     Courses = result.ItemsToDisplay.Select(c => new SearchableDelegateCourseStatisticsViewModel(c));
 }
コード例 #13
0
 public DelegateGroupsViewModel(
     SearchSortFilterPaginationResult <Group> result,
     IEnumerable <FilterModel> availableFilters
     ) : base(result, true, availableFilters)
 {
     DelegateGroups = result.ItemsToDisplay.Select(g =>
     {
         var cardId = $"{g.GroupId}-card";
         return(new SearchableDelegateGroupViewModel(g, result.GetReturnPageQuery(cardId)));
     }
                                                   );
 }
コード例 #14
0
        public FaqsPageViewModel(
            DlsSubApplication dlsSubApplication,
            SupportPage currentPage,
            string currentSystemBaseUrl,
            SearchSortFilterPaginationResult <SearchableFaq> result
            ) : base(result, false, searchLabel: "Search faqs")
        {
            CurrentPage          = currentPage;
            DlsSubApplication    = dlsSubApplication;
            CurrentSystemBaseUrl = currentSystemBaseUrl;

            Faqs = result.ItemsToDisplay.Select(f => new SearchableFaqViewModel(DlsSubApplication, f));
        }
コード例 #15
0
 public LearningContentViewModel(
     SearchSortFilterPaginationResult <ApplicationWithSections> result,
     IEnumerable <FilterModel> availableFilters,
     BrandDetail brand,
     IEnumerable <TutorialSummary> tutorials
     ) : base(result, true, availableFilters)
 {
     BrandId      = brand.BrandID;
     Name         = brand.BrandName;
     Description  = brand.BrandDescription;
     Tutorials    = tutorials.Select(t => new BrandTutorialSummaryViewModel(t));
     Applications = result.ItemsToDisplay.Select(app => new BrandCourseViewModel(app));
 }
コード例 #16
0
        public LearningLogViewModel(
            DelegateAccessRoute accessedVia,
            LearningLog learningLog,
            SearchSortFilterPaginationResult <LearningLogEntry> result
            ) : base(result, false)
        {
            AccessedVia       = accessedVia;
            ProgressId        = learningLog.DelegateCourseInfo.ProgressId;
            CustomisationId   = learningLog.DelegateCourseInfo.CustomisationId;
            CourseName        = learningLog.DelegateCourseInfo.CourseName;
            DelegateId        = learningLog.DelegateCourseInfo.DelegateId;
            DelegateFirstName = learningLog.DelegateCourseInfo.DelegateFirstName;
            DelegateLastName  = learningLog.DelegateCourseInfo.DelegateLastName;
            DelegateEmail     = learningLog.DelegateCourseInfo.DelegateEmail;

            Entries = result.ItemsToDisplay.Select(entry => new LearningLogEntryViewModel(entry));
        }
コード例 #17
0
        public SelectCourseViewModel(
            SearchSortFilterPaginationResult <ApplicationDetails> result,
            IEnumerable <FilterModel> availableFilters,
            string?categoryFilterString,
            string?topicFilterString,
            int?selectedApplicationId = null
            ) : base(
                result,
                true,
                availableFilters
                )
        {
            ApplicationOptions = result.ItemsToDisplay.Select(a => new FilterableApplicationSelectListItemViewModel(a, selectedApplicationId));

            CategoryFilterString = categoryFilterString;
            TopicFilterString    = topicFilterString;
            ApplicationId        = selectedApplicationId;
        }
コード例 #18
0
 public EmailDelegatesViewModel(
     SearchSortFilterPaginationResult <DelegateUserCard> result,
     IEnumerable <FilterModel> availableFilters,
     bool selectAll = false
     ) : base(result, true, availableFilters)
 {
     Day       = DateTime.Today.Day;
     Month     = DateTime.Today.Month;
     Year      = DateTime.Today.Year;
     Delegates = result.ItemsToDisplay.Select(
         delegateUser =>
     {
         var delegateSelected = selectAll ||
                                SelectedDelegateIds != null && SelectedDelegateIds.Contains(delegateUser.Id);
         return(new EmailDelegatesItemViewModel(delegateUser, delegateSelected));
     }
         );
 }
 public AddCourseToGroupCoursesViewModel(
     SearchSortFilterPaginationResult <CourseAssessmentDetails> result,
     IEnumerable <FilterModel> availableFilters,
     int?adminCategoryFilter,
     int groupId,
     string groupName
     ) : base(
         result,
         true,
         availableFilters,
         "Search courses"
         )
 {
     GroupId             = groupId;
     GroupName           = groupName;
     AdminCategoryFilter = adminCategoryFilter;
     Courses             = result.ItemsToDisplay.Select(c => new SearchableCourseViewModel(c, groupId));
 }
コード例 #20
0
        public CompletedPageViewModel(
            SearchSortFilterPaginationResult <CompletedLearningItem> result,
            bool apiIsAccessible,
            IConfiguration config,
            string?bannerText
            ) : base(result, false, searchLabel: "Search your completed courses")
        {
            ApiIsAccessible = apiIsAccessible;
            BannerText      = bannerText;

            CompletedActivities = result.ItemsToDisplay.Select <BaseLearningItem, CompletedLearningItemViewModel>(
                activity =>
            {
                return(activity switch
                {
                    CompletedCourse completedCourse => new CompletedCourseViewModel(completedCourse, config),
                    _ => new CompletedLearningResourceViewModel((CompletedActionPlanResource)activity),
                });
            }
        public void SearchFilterSortAndPaginate_with_search_only_returns_expected_result()
        {
            // Given
            var options = new SearchSortFilterAndPaginateOptions(new SearchOptions("A"), null, null, null);

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(new[] { new SortableItem("A", 10) }, 1, 1, int.MaxValue, 1, true),
                "A",
                null,
                null,
                null
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
コード例 #22
0
 public CentreAdministratorsViewModel(
     int centreId,
     SearchSortFilterPaginationResult <AdminUser> result,
     IEnumerable <FilterModel> availableFilters,
     AdminUser loggedInAdminUser
     ) : base(
         result,
         true,
         availableFilters,
         "Search administrators"
         )
 {
     CentreId = centreId;
     Admins   = result.ItemsToDisplay.Select(
         adminUser => new SearchableAdminViewModel(
             adminUser,
             loggedInAdminUser,
             result.GetReturnPageQuery($"{adminUser.Id}-card")
             )
         );
 }
        public SelectedCourseDetailsViewModel(
            SearchSortFilterPaginationResult <CourseDelegate> result,
            IEnumerable <FilterModel> availableFilters,
            CourseDelegatesData courseDelegatesData,
            Dictionary <string, string> routeData
            ) : base(result, true, availableFilters, routeData: routeData)
        {
            var currentCourse =
                courseDelegatesData.Courses.Single(c => c.CustomisationId == courseDelegatesData.CustomisationId);

            Active    = currentCourse.Active;
            Delegates = result.ItemsToDisplay.Select(
                d => new DelegateCourseInfoViewModel(
                    d,
                    DelegateAccessRoute.CourseDelegates,
                    result.GetReturnPageQuery($"{d.DelegateId}-card")
                    )
                );
            Filters = CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(
                courseDelegatesData.CourseAdminFields
                );
        }
コード例 #24
0
        public RecommendedLearningViewModel(
            CurrentSelfAssessment selfAssessment,
            SearchSortFilterPaginationResult <RecommendedResource> result,
            bool apiIsAccessible
            ) : base(
                result,
                false,
                searchLabel: "Search resources"
                )
        {
            ApiIsAccessible = apiIsAccessible;
            SelfAssessment  = selfAssessment;

            RecommendedResources =
                result.ItemsToDisplay.Select(
                    r => new SearchableRecommendedResourceViewModel(
                        r,
                        selfAssessment.Id,
                        result.GetReturnPageQuery($"{r.LearningHubReferenceId}-card")
                        )
                    );
        }
        public void SearchFilterSortAndPaginate_with_sort_only_returns_expected_result()
        {
            // Given
            var options = new SearchSortFilterAndPaginateOptions(
                null,
                new SortOptions("Number", GenericSortingHelper.Ascending),
                null,
                null
                );

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(allItems.OrderBy(x => x.Number), 1, 1, int.MaxValue, 10, true),
                null,
                "Number",
                GenericSortingHelper.Ascending,
                null
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
        public void SearchFilterSortAndPaginate_with_paginate_only_returns_expected_second_page()
        {
            // Given
            var options = new SearchSortFilterAndPaginateOptions(
                null,
                null,
                null,
                new PaginationOptions(2, 8)
                );

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(allItems.Skip(8), 2, 2, 8, 10, true),
                null,
                null,
                null,
                null
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
        public void SearchFilterSortAndPaginate_with_paginate_only_returns_first_page_with_invalid_page_numbers(int pageNumber)
        {
            // Given
            var options = new SearchSortFilterAndPaginateOptions(
                null,
                null,
                null,
                new PaginationOptions(pageNumber, 5)
                );

            // When
            var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(allItems, options);

            // Then
            var expectedResult = new SearchSortFilterPaginationResult <SortableItem>(
                new PaginationResult <SortableItem>(allItems.Take(5), 1, 2, 5, 10, true),
                null,
                null,
                null,
                null
                );

            result.Should().BeEquivalentTo(expectedResult);
        }
コード例 #28
0
 public AllFrameworksViewModel(
     SearchSortFilterPaginationResult <BrandedFramework> result
     ) : base(result, false)
 {
     BrandedFrameworks = result.ItemsToDisplay;
 }