Exemple #1
0
        public async Task Then_The_Help_Url_Set_If_Feature_Disabled(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Frozen] Mock <IOptions <FindApprenticeshipTrainingWeb> > config,
            [Greedy] CoursesController controller)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = false;
            response.ShowEmployerDemand = true;
            provider.Setup(x => x.CreateProtector(Constants.GaDataProtectorName)).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.HelpFindingCourseUrl.Should().Be("https://help.apprenticeships.education.gov.uk/hc/en-gb#contact-us");
        }
Exemple #2
0
        public void Then_The_Total_Message_Is_Created_Correctly_For_Provider_Ratings(
            int totalCount,
            int filterTotal,
            bool hasFilter,
            string expectedMessage,
            Dictionary <uint, string> providerOrder,
            GetCourseProvidersResult result)
        {
            //arrange
            var selectedProviderRatings = new List <ProviderRating>();

            if (hasFilter)
            {
                selectedProviderRatings.Add(ProviderRating.Good);
            }
            var request = new GetCourseProvidersRequest {
                ProviderRatings = selectedProviderRatings
            };

            result.TotalFiltered = filterTotal;
            result.Total         = totalCount;

            //act
            var viewModel = new CourseProvidersViewModel(request, result, providerOrder);

            //assert
            viewModel.TotalMessage.Should().Be(expectedMessage);
        }
Exemple #3
0
        public async Task Then_If_The_Added_Parameter_Is_Provided_It_Is_Is_Decoded_And_Added_To_The_Model(
            string added,
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] CoursesController controller
            )
        {
            //Arrange
            var encodedData = Encoding.UTF8.GetBytes($"{added}");

            request.Removed = "";
            request.Added   = WebEncoders.Base64UrlEncode(encodedData);
            protector.Setup(sut => sut.Unprotect(It.IsAny <byte[]>())).Returns(encodedData);
            provider.Setup(x => x.CreateProtector(Constants.ShortlistProtectorName)).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.BannerUpdateMessage.Should().Be($"{added} added to shortlist.");
        }
Exemple #4
0
        public async Task Then_If_The_Removed_And_Added_Parameter_Is_Is_Unable_To_Be_Decoded_An_Empty_String_Is_Added(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] CoursesController controller)
        {
            //Arrange
            protector.Setup(sut => sut.Unprotect(It.IsAny <byte[]>())).Throws <CryptographicException>();
            provider.Setup(x => x.CreateProtector(Constants.ShortlistProtectorName)).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.BannerUpdateMessage.Should().BeEmpty();
        }
Exemple #5
0
        public async Task Then_The_Provider_Position_Is_Added_To_The_ViewModel(
            string encodedValue,
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <GetCourseProvidersRequest> > cookieStorageService,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] CoursesController controller)
        {
            //Arrange
            var encodedData = Encoding.UTF8.GetBytes(encodedValue);

            protector.Setup(sut => sut.Protect(It.IsAny <byte[]>())).Returns(encodedData);
            provider.Setup(x => x.CreateProtector(It.IsAny <string>())).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.ProviderOrder.Count.Should().Be(response.Providers.Count());
            actualModel.ProviderOrder.Select(c => c.Value).All(c => c.Equals(Convert.ToBase64String(encodedData))).Should().BeTrue();
            actualModel.ProviderOrder.Select(c => c.Key).ToList().Should()
            .BeEquivalentTo(response.Providers.Select(c => c.ProviderId).ToList());
        }
Exemple #6
0
        public async Task Then_The_Query_Is_Sent_And_Data_Retrieved_And_View_Shown(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location) &&
                                                               c.DeliveryModes.SequenceEqual(request.DeliveryModes.Select(type => (Domain.Courses.DeliveryModeType)type)) &&
                                                               c.ProviderRatings.SequenceEqual(request.ProviderRatings.Select(type => (Domain.Courses.ProviderRating)type))),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.Should().BeEquivalentTo(new CourseProvidersViewModel(request, response, null), options => options
                                                .Excluding(c => c.ProviderOrder)
                                                .Excluding(c => c.BannerUpdateMessage)
                                                .Excluding(c => c.HelpFindingCourseUrl)
                                                );
        }
Exemple #7
0
        public async Task Then_The_Provider_Position_List_Is_Encoded(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] CoursesController controller
            )
        {
            //Arrange
            provider.Setup(x => x.CreateProtector(Constants.GaDataProtectorName)).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            await controller.CourseProviders(request);

            //Assert
            var expectedProviders = response.Providers.ToList();

            foreach (var responseProvider in expectedProviders)
            {
                protector.Verify(c => c.Protect(It.Is <byte[]>(
                                                    x => x[0].Equals(Encoding.UTF8.GetBytes($"{expectedProviders.IndexOf(responseProvider) + 1}|{response.TotalFiltered}")[0]))), Times.Once);
            }
        }
Exemple #8
0
        public async Task Then_The_Help_Url_Is_Built_From_Config_If_Feature_Enabled_And_Show_Demand_Is_Returned(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Frozen] Mock <IOptions <FindApprenticeshipTrainingWeb> > config,
            [Greedy] CoursesController controller)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = true;
            response.ShowEmployerDemand = true;
            provider.Setup(x => x.CreateProtector(Constants.GaDataProtectorName)).Returns(protector.Object);
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.HelpFindingCourseUrl.Should().Be($"{config.Object.Value.EmployerDemandUrl}/registerdemand/course/{actualModel.Course.Id}/enter-apprenticeship-details");
        }
Exemple #9
0
        public async Task Then_The_Location_Is_Added_To_The_Cookie_If_Set(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            cookieStorageService.Verify(x => x.Update(Constants.LocationCookieName,
                                                      It.Is <LocationCookieItem>(c => c.Name.Equals(response.Location) &&
                                                                                 c.Lat.Equals(response.LocationGeoPoint.FirstOrDefault()) &&
                                                                                 c.Lon.Equals(response.LocationGeoPoint.LastOrDefault())), 2));
            actualModel.HasLocation.Should().BeTrue();
        }
Exemple #10
0
        public async Task Then_The_Location_Is_Removed_From_The_Cookie_If_Set_To_Minus_One(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            response.Location = string.Empty;
            request.Location  = "-1";
            response.Location = null;
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(string.Empty)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.HasLocation.Should().BeFalse();
            cookieStorageService.Verify(x => x.Delete(Constants.LocationCookieName));
        }
Exemple #11
0
        public void Then_The_Total_Message_Is_Created_Correctly_For_Delivery_Modes_With_Location(
            int totalCount,
            int filterTotal,
            bool hasFilter,
            string expectedMessage,
            Dictionary <uint, string> providerOrder,
            GetCourseProvidersResult result)
        {
            //arrange
            var selectedDeliveryModes = new List <DeliveryModeType>();

            if (hasFilter)
            {
                selectedDeliveryModes.Add(DeliveryModeType.BlockRelease);
            }
            var request = new GetCourseProvidersRequest {
                DeliveryModes = selectedDeliveryModes
            };

            result.TotalFiltered = filterTotal;
            result.Total         = totalCount;

            //act
            var viewModel = new CourseProvidersViewModel(request, result, providerOrder);

            //assert
            viewModel.TotalMessage.Should().Be($"{expectedMessage} at {viewModel.Location}");
        }
Exemple #12
0
        public async Task Then_The_Shortlist_UserId_Is_Added_To_The_Cookie_If_Set(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            ShortlistCookieItem shortlistCookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistCookieService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.ShortlistUserId.Equals(shortlistCookieItem.ShortlistUserId)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);
            shortlistCookieService.Setup(x => x.Get(Constants.ShortlistCookieName)).Returns(shortlistCookieItem);

            //Act
            var actual = await controller.CourseProviders(request) as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            var actualModel = actual.Model as CourseProvidersViewModel;

            Assert.IsNotNull(actualModel);
        }
Exemple #13
0
 public CourseProvidersViewModel(GetCourseProvidersRequest request, GetCourseProvidersResult result, Dictionary <uint, string> providerOrder)
 {
     ProviderOrder      = providerOrder;
     Course             = result.Course;
     Providers          = result.Providers.Select(c => (ProviderViewModel)c);
     Total              = result.Total;
     TotalFiltered      = result.TotalFiltered;
     Location           = result.Location;
     DeliveryModes      = BuildDeliveryModeOptionViewModel(request.DeliveryModes);
     ProviderRatings    = BuildProviderRatingOptionViewModel(request.ProviderRatings);
     ShortlistItemCount = result.ShortlistItemCount;
 }
Exemple #14
0
        public void Then_Sets_Properties(GetCourseProvidersRequest request, GetCourseProvidersResult result, Dictionary <uint, string> providerOrder)
        {
            var model = new CourseProvidersViewModel(request, result, providerOrder);

            model.Course.Should().BeEquivalentTo((CourseViewModel)result.Course);
            model.Providers.Should().BeEquivalentTo(
                result.Providers.Select(provider => (ProviderViewModel)provider));
            model.Total.Should().Be(result.Total);
            model.TotalFiltered.Should().Be(result.TotalFiltered);
            model.Location.Should().Be(result.Location);
            model.ProviderOrder.Should().BeEquivalentTo(providerOrder);
            model.ShortlistItemCount.Should().Be(result.ShortlistItemCount);
        }
Exemple #15
0
        public void And_Zero_Results_And_Has_Location_And_No_Other_Filters_Then_Adds_Location_Text(
            Dictionary <uint, string> providerOrder,
            GetCourseProvidersRequest request,
            GetCourseProvidersResult result)
        {
            //arrange
            result.TotalFiltered = 0;
            result.Total         = 0;

            //act
            var viewModel = new CourseProvidersViewModel(request, result, providerOrder);

            //assert
            viewModel.TotalMessage.Should().Be($"0 results at {viewModel.Location}");
        }
Exemple #16
0
        public void Then_Builds_Provider_Ratings(GetCourseProvidersRequest request, GetCourseProvidersResult result, Dictionary <uint, string> providerOrder)
        {
            var expectedProviderRatings = new List <ProviderRatingOptionViewModel>();

            foreach (ProviderRating providerRatingType in Enum.GetValues(typeof(ProviderRating)))
            {
                expectedProviderRatings.Add(new ProviderRatingOptionViewModel
                {
                    ProviderRatingType = providerRatingType,
                    Description        = providerRatingType.GetDescription(),
                    Selected           = request.ProviderRatings.Any(type => type == providerRatingType)
                });
            }

            var model = new CourseProvidersViewModel(request, result, providerOrder);

            model.ProviderRatings.Should().BeEquivalentTo(expectedProviderRatings);
        }
Exemple #17
0
        public async Task Then_If_No_Course_Then_Page_Not_Found_Returned(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <GetCourseProvidersRequest> > cookieStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course = null;
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as RedirectToRouteResult;

            //Assert
            Assert.IsNotNull(actual);
            actual.RouteName.Should().Be(RouteNames.Error404);
        }
Exemple #18
0
        public async Task Then_If_Course_Is_After_Last_Start_Then_Redirected_To_Course_Page(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <GetCourseProvidersRequest> > cookieStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(-1);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseProviders(request) as RedirectToRouteResult;

            //Assert
            Assert.IsNotNull(actual);
            actual.RouteName.Should().Be(RouteNames.CourseDetails);
        }
Exemple #19
0
        public async Task Then_The_Request_Is_Added_To_A_Cookie(
            GetCourseProvidersRequest request,
            GetCourseProvidersResult response,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <GetCourseProvidersRequest> > cookieStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            mediator.Setup(x => x.Send(
                               It.Is <GetCourseProvidersQuery>(c => c.CourseId.Equals(request.Id) &&
                                                               c.Location.Equals(request.Location)),
                               It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            await controller.CourseProviders(request);

            //Assert
            cookieStorageService.Verify(x => x.Update(
                                            Constants.ProvidersCookieName,
                                            It.Is <GetCourseProvidersRequest>(c => c == request),
                                            2));
        }
Exemple #20
0
        public void Then_If_National_Delivery_Mode_Is_Selected_Then_AtWorkplace_Is_Selected(GetCourseProvidersRequest request, GetCourseProvidersResult result, Dictionary <uint, string> providerOrder)
        {
            request.DeliveryModes = new List <DeliveryModeType> {
                DeliveryModeType.National
            };

            var model = new CourseProvidersViewModel(request, result, providerOrder);

            model.DeliveryModes.Count(c => c.Selected).Should().Be(2);
            model.DeliveryModes.Where(c => c.Selected).Select(c => c.DeliveryModeType).ToList().Should()
            .BeEquivalentTo(new List <DeliveryModeType> {
                DeliveryModeType.Workplace, DeliveryModeType.National
            });
        }
Exemple #21
0
        public void Then_Builds_Delivery_Modes_Excluding_NotFound(GetCourseProvidersRequest request, GetCourseProvidersResult result, Dictionary <uint, string> providerOrder)
        {
            var expectedDeliveryModes = new List <DeliveryModeOptionViewModel>();

            foreach (DeliveryModeType deliveryModeType in Enum.GetValues(typeof(DeliveryModeType)))
            {
                expectedDeliveryModes.Add(new DeliveryModeOptionViewModel
                {
                    DeliveryModeType = deliveryModeType,
                    Description      = deliveryModeType.GetDescription(),
                    Selected         = request.DeliveryModes.Any(type => type == deliveryModeType)
                });
            }

            var model = new CourseProvidersViewModel(request, result, providerOrder);

            model.DeliveryModes.Should().BeEquivalentTo(expectedDeliveryModes.Where(c => c.DeliveryModeType != DeliveryModeType.NotFound));
        }