public void And_PageNumber_1_And_0_Records_Found_Then_Should_Be_0(ManageReservationsFilterModel filterModel)
        {
            filterModel.PageNumber           = 1;
            filterModel.NumberOfRecordsFound = 0;

            filterModel.PagedRecordsFrom.Should().Be(0);
        }
        public void And_PageNumber_3_Then_Should_Be_Triple_PageSize(ManageReservationsFilterModel filterModel)
        {
            filterModel.PageNumber           = 3;
            filterModel.NumberOfRecordsFound = 20 * ManageReservationsFilterModel.PageSize;

            filterModel.PagedRecordsTo.Should().Be(3 * ManageReservationsFilterModel.PageSize);
        }
        public void Then_Adds_PageLink_For_Every_Page()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SearchTerm           = "asedfas",
                SelectedCourse       = "iknjso",
                SelectedEmployer     = "asdsad",
                SelectedStartDate    = "asdva",
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 3
            };

            var pageLinks = filterModel.PageLinks.Where(link =>
                                                        link.Label.ToUpper() != "PREVIOUS" &&
                                                        link.Label.ToUpper() != "NEXT").ToList();

            for (var i = 0; i < 3; i++)
            {
                pageLinks[i].Label.Should().Be($"{i+1}");
                pageLinks[i].AriaLabel.Should().Be($"Page {i+1}");
                pageLinks[i].RouteData.Should().BeEquivalentTo(new Dictionary <string, string>
                {
                    { "searchTerm", filterModel.SearchTerm },
                    { "selectedCourse", filterModel.SelectedCourse },
                    { "selectedEmployer", filterModel.SelectedEmployer },
                    { "selectedStartDate", filterModel.SelectedStartDate },
                    { "pageNumber", (i + 1).ToString() }
                });
            }
        }
Beispiel #4
0
        public async Task Then_The_Cached_Search_Is_Loaded_If_From_BackLink(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            ManageReservationsFilterModelBase baseFilterModel,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <ISessionStorageService <ManageReservationsFilterModelBase> > sessionStorageService,
            ManageReservationsController controller)
        {
            routeModel.IsFromManage = true;
            mockMediator
            .Setup(mediator => mediator.Send(It.Is <SearchReservationsQuery>(c => c.Filter.SearchTerm.Equals(baseFilterModel.SearchTerm)), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);
            sessionStorageService.Setup(x => x.Get()).Returns(baseFilterModel);
            filterModel.SearchTerm = string.Empty;

            await controller.ProviderManage(routeModel, filterModel);

            mockMediator.Verify(x => x.Send(It.Is <SearchReservationsQuery>(
                                                c =>
                                                c.Filter.SearchTerm.Equals(baseFilterModel.SearchTerm) &&
                                                c.Filter.SelectedCourse.Equals(baseFilterModel.SelectedCourse) &&
                                                c.Filter.SelectedEmployer.Equals(baseFilterModel.SelectedEmployer) &&
                                                c.Filter.SelectedStartDate.Equals(baseFilterModel.SelectedStartDate) &&
                                                c.Filter.PageNumber.Equals(baseFilterModel.PageNumber)
                                                ), It.IsAny <CancellationToken>()), Times.Once);
            routeModel.IsFromManage = false;
        }
Beispiel #5
0
        public async Task Then_The_Cached_Search_Is_Not_Saved_If_It_Is_Empty_But_The_Cache_Is_Still_Cleared(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <ISessionStorageService <ManageReservationsFilterModelBase> > sessionStorageService,
            ManageReservationsController controller)
        {
            routeModel.IsFromManage       = false;
            filterModel.SearchTerm        = string.Empty;
            filterModel.PageNumber        = 1;
            filterModel.SelectedCourse    = string.Empty;
            filterModel.SelectedEmployer  = string.Empty;
            filterModel.SelectedStartDate = string.Empty;
            mockMediator
            .Setup(mediator => mediator.Send(It.Is <SearchReservationsQuery>(c => c.Filter.SearchTerm.Equals(filterModel.SearchTerm)), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);

            await controller.ProviderManage(routeModel, filterModel);

            mockMediator.Verify(x => x.Send(It.Is <SearchReservationsQuery>(
                                                c => c.Filter.SearchTerm.Equals(filterModel.SearchTerm)), It.IsAny <CancellationToken>()), Times.Once);
            sessionStorageService.Verify(x => x.Delete(), Times.Once);
            sessionStorageService.Verify(x => x.Store(It.IsAny <ManageReservationsFilterModelBase>()), Times.Never);
        }
        public void And_Has_SearchTerm_Then_True()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SearchTerm = "asedfas"
            };

            filterModel.SearchOrFiltersApplied.Should().BeTrue();
        }
Beispiel #7
0
        public void And_Search_And_No_Filters_Then_Quoted_SearchTerm(
            string searchTerm)
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SearchTerm = searchTerm
            };

            filterModel.FiltersUsedMessage.Value.Should().Be($"matching <strong>‘{searchTerm}’</strong>");
        }
Beispiel #8
0
        public void And_No_Search_And_SelectedEmployer_Then_SelectedEmployer(
            string selectedEmployer)
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SelectedEmployer = selectedEmployer
            };

            filterModel.FiltersUsedMessage.Value.Should().Be($"matching <strong>{selectedEmployer}</strong>");
        }
Beispiel #9
0
        public void And_No_Search_And_SelectedStartDate_Then_SelectedStartDate(
            string selectedStartDate)
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SelectedStartDate = selectedStartDate
            };

            filterModel.FiltersUsedMessage.Value.Should().Be($"matching <strong>{selectedStartDate}</strong>");
        }
        public void Then_Sets_SearchTerm(
            ManageReservationsFilterModel filterModel)
        {
            ReservationFilter result = filterModel;

            result.SearchTerm.Should().Be(filterModel.SearchTerm);
            result.PageNumber.Should().Be(filterModel.PageNumber);
            result.PageSize.Should().Be(ManageReservationsFilterModel.PageSize);
            result.SelectedEmployer.Should().Be(filterModel.SelectedEmployer);
            result.SelectedCourse.Should().Be(filterModel.SelectedCourse);
            result.SelectedStartDate.Should().Be(filterModel.SelectedStartDate);
        }
        public void And_Is_First_Page_Then_No_Previous()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 1,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 6
            };

            var pageLinks = filterModel.PageLinks.ToList();

            pageLinks.First().Label.Should().Be(1.ToString());
        }
        public void And_1_Page_Then_No_Next_Or_Previous()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 1,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize - 1
            };

            var pageLinks = filterModel.PageLinks.ToList();

            pageLinks.Any(link => link.Label.ToUpper() == "PREVIOUS").Should().BeFalse();
            pageLinks.Any(link => link.Label.ToUpper() == "NEXT").Should().BeFalse();
        }
        public void And_3_Pages_Then_Only_3_PageLinks()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 1,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 3
            };

            filterModel.PageLinks.Count(link =>
                                        link.Label.ToUpper() != "PREVIOUS" &&
                                        link.Label.ToUpper() != "NEXT")
            .Should().Be(3);
        }
Beispiel #14
0
        public async Task And_The_Provider_Has_No_TrustedEmployers_Then_A_NoPermissions_View_Is_Returned(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            [Frozen] Mock <IMediator> mockMediator,
            ManageReservationsController controller)
        {
            filterModel.SearchTerm = string.Empty;
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ThrowsAsync(new ProviderNotAuthorisedException(0, 1));

            var result = await controller.ProviderManage(routeModel, filterModel) as ViewResult;

            result.ViewName.Should().Be("NoPermissions");
        }
Beispiel #15
0
        public void Then_The_Hide_Footer_Flag_Is_Set_Based_On_Number_Of_Filtered_Reservations(
            int numberOfFilteredReservations, bool expectedBool)
        {
            //Arrange
            var filterModel = new ManageReservationsFilterModel {
                NumberOfRecordsFound = numberOfFilteredReservations
            };

            //Act
            var actual = new ManageViewModel {
                FilterModel = filterModel
            };

            //Assert
            Assert.AreEqual(expectedBool, actual.ShowPageLinks);
        }
        public void And_Not_Last_Page_Then_Adds_Next()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 1,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 6
            };

            var pageLinks = filterModel.PageLinks.ToList();

            pageLinks.Last().Label.Should().Be("Next");
            pageLinks.Last().AriaLabel.Should().Be("Next page");
            pageLinks.Last().RouteData.Should()
            .BeEquivalentTo(pageLinks.Single(link =>
                                             link.Label == (filterModel.PageNumber + 1).ToString()).RouteData);
        }
        public void And_Not_First_Page_Then_Adds_Previous()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 2,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 6
            };

            var pageLinks = filterModel.PageLinks.ToList();

            pageLinks.First().Label.Should().Be("Previous");
            pageLinks.First().AriaLabel.Should().Be("Previous page");
            pageLinks.First().RouteData.Should()
            .BeEquivalentTo(pageLinks.Single(link =>
                                             link.Label == "1").RouteData);
        }
        public void And_PageNumber_3_Then_Sets_Current_On_3()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 3,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 3
            };

            var pageLinks = filterModel.PageLinks.Where(link =>
                                                        link.Label.ToUpper() != "PREVIOUS" &&
                                                        link.Label.ToUpper() != "NEXT").ToList();

            pageLinks[0].IsCurrent.Should().BeNull();
            pageLinks[1].IsCurrent.Should().BeNull();
            pageLinks[2].IsCurrent.Should().BeTrue();
        }
Beispiel #19
0
        public async Task Then_Filter_Params_Assigned_To_View_Model(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            [Frozen] Mock <IMediator> mockMediator,
            ManageReservationsController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);

            var result = await controller.ProviderManage(routeModel, filterModel) as ViewResult;

            var viewModel = result?.Model as ManageViewModel;

            viewModel.FilterModel.Should().BeEquivalentTo(filterModel);
        }
Beispiel #20
0
        public void And_Search_And_SelectedEmployer_And_SelectedCourse_Then_SearchTerm_Comma_SelectedEmployer_And_SelectedCourse(
            string searchTerm,
            string selectedEmployer,
            string selectedCourse)
        {
            var filterModel = new ManageReservationsFilterModel
            {
                SearchTerm       = searchTerm,
                SelectedEmployer = selectedEmployer,
                SelectedCourse   = selectedCourse
            };

            filterModel.FiltersUsedMessage.Value
            .Should().Be($"matching <strong>‘{searchTerm}’</strong>" +
                         $", <strong>{selectedEmployer}</strong>" +
                         $" and <strong>{selectedCourse}</strong>");
        }
        public void And_Page_Number_10_Of_10_Then_Links_6_To_10()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 10,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 10
            };

            var pageLinks = filterModel.PageLinks.Where(link =>
                                                        link.Label.ToUpper() != "PREVIOUS" &&
                                                        link.Label.ToUpper() != "NEXT").ToList();

            pageLinks[0].Label.Should().Be(6.ToString());
            pageLinks[1].Label.Should().Be(7.ToString());
            pageLinks[2].Label.Should().Be(8.ToString());
            pageLinks[3].Label.Should().Be(9.ToString());
            pageLinks[4].Label.Should().Be(10.ToString());
        }
        public void And_Page_Number_4_Of_5_Then_Links_1_To_5()
        {
            var filterModel = new ManageReservationsFilterModel
            {
                PageNumber           = 4,
                NumberOfRecordsFound = ManageReservationsFilterModel.PageSize * 5
            };

            var pageLinks = filterModel.PageLinks.Where(link =>
                                                        link.Label.ToUpper() != "PREVIOUS" &&
                                                        link.Label.ToUpper() != "NEXT").ToList();

            pageLinks[0].Label.Should().Be(1.ToString());
            pageLinks[1].Label.Should().Be(2.ToString());
            pageLinks[2].Label.Should().Be(3.ToString());
            pageLinks[3].Label.Should().Be(4.ToString());
            pageLinks[4].Label.Should().Be(5.ToString());
        }
Beispiel #23
0
        public async Task Then_Gets_List_Of_Reservations_From_Search(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            [Frozen] Mock <IMediator> mockMediator,
            ManageReservationsController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);

            await controller.ProviderManage(routeModel, filterModel);

            mockMediator.Verify(mediator =>
                                mediator.Send(
                                    It.Is <SearchReservationsQuery>(query => query.ProviderId == routeModel.UkPrn),
                                    It.IsAny <CancellationToken>()),
                                Times.Once);
        }
Beispiel #24
0
        public async Task Then_Returns_List_Of_Reservations_From_Mediator(
            [Frozen] ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            string hashedId,
            string homeLink,
            [Frozen] ReservationsWebConfiguration config,
            [Frozen] Mock <IExternalUrlHelper> externalUrlHelper,
            [Frozen] Mock <IEncodingService> mockEncodingService,
            [Frozen] Mock <IMediator> mockMediator,
            ManageReservationsController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);
            mockEncodingService
            .Setup(service => service.Encode(It.IsAny <long>(), EncodingType.PublicAccountLegalEntityId))
            .Returns(hashedId);
            externalUrlHelper
            .Setup(x => x.GenerateDashboardUrl(routeModel.EmployerAccountId)).Returns(homeLink);

            var expectedReservations = new List <ReservationViewModel>();

            expectedReservations.AddRange(searchResult.Reservations.Select(reservation =>
                                                                           new ReservationViewModel(reservation, config.ApprenticeUrl, routeModel.UkPrn)));

            var result = await controller.ProviderManage(routeModel, filterModel) as ViewResult;

            result.Should().NotBeNull();
            result.ViewName.Should().Be(ViewNames.ProviderManage);
            var viewModel = result.Model as ManageViewModel;

            viewModel.Should().NotBeNull();
            viewModel.TotalReservationCount.Should().Be(searchResult.TotalReservationsForProvider);
            viewModel.BackLink.Should().Be(homeLink);
            viewModel.FilterModel.NumberOfRecordsFound.Should().Be(searchResult.NumberOfRecordsFound);
            viewModel.Reservations.Should().BeEquivalentTo(expectedReservations,
                                                           options => options.ExcludingFields().Excluding(c => c.ApprenticeUrl));
            viewModel.FilterModel.EmployerFilters.Should().BeEquivalentTo(searchResult.EmployerFilters);
            viewModel.FilterModel.CourseFilters.Should().BeEquivalentTo(searchResult.CourseFilters);
            viewModel.FilterModel.StartDateFilters.Should().BeEquivalentTo(searchResult.StartDateFilters);
        }
Beispiel #25
0
        public async Task Then_The_Cached_Search_Is_Deleted_If_Not_From_BackLink_And_New_One_Saved(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <ISessionStorageService <ManageReservationsFilterModelBase> > sessionStorageService,
            ManageReservationsController controller)
        {
            routeModel.IsFromManage = false;
            mockMediator
            .Setup(mediator => mediator.Send(It.Is <SearchReservationsQuery>(c => c.Filter.SearchTerm.Equals(filterModel.SearchTerm)), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);

            await controller.ProviderManage(routeModel, filterModel);

            mockMediator.Verify(x => x.Send(It.Is <SearchReservationsQuery>(
                                                c => c.Filter.SearchTerm.Equals(filterModel.SearchTerm)), It.IsAny <CancellationToken>()), Times.Once);
            sessionStorageService.Verify(x => x.Delete(), Times.Once);
            sessionStorageService.Verify(x => x.Store(filterModel));
        }
Beispiel #26
0
        public async Task Add_Apprentice_Url_UkPrn_Will_Be_Populated_From_RouteModel_Reservation(
            ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            SearchReservationsResult searchResult,
            string hashedId,
            string expectedUrl,
            [Frozen] Mock <IEncodingService> mockEncodingService,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <IExternalUrlHelper> mockUrlHelper,
            ManageReservationsController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);

            mockEncodingService
            .Setup(service => service.Encode(It.IsAny <long>(), EncodingType.PublicAccountLegalEntityId))
            .Returns(hashedId);

            mockUrlHelper.Setup(h => h.GenerateAddApprenticeUrl(
                                    It.IsAny <Guid>(),
                                    hashedId,
                                    It.IsAny <string>(),
                                    routeModel.UkPrn,
                                    It.IsAny <DateTime>(),
                                    routeModel.CohortReference,
                                    routeModel.EmployerAccountId,
                                    false,
                                    "",
                                    ""))
            .Returns(expectedUrl);

            var result = await controller.ProviderManage(routeModel, filterModel) as ViewResult;

            var viewModel = result?.Model as ManageViewModel;

            viewModel.Should().NotBeNull();

            viewModel.Reservations.Where(model => model.Status == ReservationStatusViewModel.Pending && !model.IsExpired)
            .All(c => c.ApprenticeUrl.Equals(expectedUrl)).Should().BeTrue();
        }
Beispiel #27
0
        public async Task And_Reservation_From_This_Provider_Then_Is_Deletable(
            [Frozen] ReservationsRouteModel routeModel,
            ManageReservationsFilterModel filterModel,
            [ReservationsFromThisProvider] SearchReservationsResult searchResult,
            string hashedId,
            [Frozen] Mock <IEncodingService> mockEncodingService,
            [Frozen] Mock <IMediator> mockMediator,
            ManageReservationsController controller)
        {
            mockMediator
            .Setup(mediator => mediator.Send(It.IsAny <SearchReservationsQuery>(), It.IsAny <CancellationToken>()))
            .ReturnsAsync(searchResult);
            mockEncodingService
            .Setup(service => service.Encode(It.IsAny <long>(), EncodingType.PublicAccountLegalEntityId))
            .Returns(hashedId);

            var result = await controller.ProviderManage(routeModel, filterModel) as ViewResult;

            var viewModel = result.Model as ManageViewModel;

            viewModel.Reservations
            .Select(model => model.CanProviderDeleteReservation)
            .Should().AllBeEquivalentTo(true);
        }
        public void And_No_Search_Or_Filter_Then_False()
        {
            var filterModel = new ManageReservationsFilterModel();

            filterModel.SearchOrFiltersApplied.Should().BeFalse();
        }
        public void And_PageNumber_3_Then_Should_Be_Double_PageSize_Plus_1(ManageReservationsFilterModel filterModel)
        {
            filterModel.PageNumber = 3;

            filterModel.PagedRecordsFrom.Should().Be(2 * ManageReservationsFilterModel.PageSize + 1);
        }
        public void And_PageNumber_1_Then_Should_Be_1(ManageReservationsFilterModel filterModel)
        {
            filterModel.PageNumber = 1;

            filterModel.PagedRecordsFrom.Should().Be(1);
        }