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"); }
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); }
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."); }
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(); }
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()); }
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) ); }
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); } }
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"); }
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(); }
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)); }
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}"); }
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); }
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; }
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); }
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}"); }
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); }
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); }
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); }
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)); }
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 }); }
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)); }