public void GetAllCourseDelegatesFilterViewModels_should_return_correct_admin_field_filters()
        {
            // Given
            var(adminFields, expectedFilters) = GetSampleAdminFieldsAndFilters();

            // When
            var result = CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(
                adminFields
                );

            // Then
            expectedFilters.ForEach(expectedFilter => result.Should().ContainEquivalentOf(expectedFilter));
        }
        public IActionResult Index(
            int?customisationId         = null,
            string?searchString         = null,
            string?sortBy               = null,
            string sortDirection        = GenericSortingHelper.Ascending,
            string?existingFilterString = null,
            string?newFilterToAdd       = null,
            bool clearFilters           = false,
            int page = 1
            )
        {
            sortBy ??= DefaultSortByOptions.Name.PropertyName;
            var newFilterString = FilteringHelper.GetFilterString(
                existingFilterString,
                newFilterToAdd,
                clearFilters,
                Request,
                CourseDelegatesFilterCookieName,
                CourseDelegateAccountStatusFilterOptions.Active.FilterValue
                );

            var centreId        = User.GetCentreId();
            var adminCategoryId = User.GetAdminCourseCategoryFilter();

            try
            {
                var courseDelegatesData = courseDelegatesService.GetCoursesAndCourseDelegatesForCentre(
                    centreId,
                    adminCategoryId,
                    customisationId
                    );

                var availableFilters = CourseDelegateViewModelFilterOptions.GetAllCourseDelegatesFilterViewModels(
                    courseDelegatesData.CourseAdminFields
                    );

                var searchSortPaginationOptions = new SearchSortFilterAndPaginateOptions(
                    new SearchOptions(searchString),
                    new SortOptions(sortBy, sortDirection),
                    new FilterOptions(
                        newFilterString,
                        availableFilters,
                        CourseDelegateAccountStatusFilterOptions.Active.FilterValue
                        ),
                    new PaginationOptions(page)
                    );

                var result = searchSortFilterPaginateService.SearchFilterSortAndPaginate(
                    courseDelegatesData.Delegates,
                    searchSortPaginationOptions
                    );

                var model = new CourseDelegatesViewModel(
                    courseDelegatesData,
                    result,
                    availableFilters,
                    "customisationId"
                    );

                Response.UpdateFilterCookie(CourseDelegatesFilterCookieName, result.FilterString);
                return(View(model));
            }
            catch (CourseAccessDeniedException)
            {
                return(NotFound());
            }
        }