示例#1
0
        public void And_Location_Whitespace_Then_False(
            CourseProvidersViewModel model)
        {
            model.Location = " ";

            model.HasLocation.Should().BeFalse();
        }
示例#2
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}");
        }
示例#3
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);
        }
示例#4
0
        public void And_Location_Null_Then_False(
            CourseProvidersViewModel model)
        {
            model.Location = null;

            model.HasLocation.Should().BeFalse();
        }
示例#5
0
        public void And_ProviderType_Not_Selected_Then_Empty_List_Returned(CourseProvidersViewModel model)
        {
            foreach (var providerRating in model.ProviderRatings)
            {
                providerRating.Selected = false;
            }

            var links = model.ClearProviderRatingLinks;

            links.Should().BeEmpty();
        }
示例#6
0
        public void And_DeliveryMode_Not_Selected_Then_Empty_List_Returned(CourseProvidersViewModel model)
        {
            foreach (var deliveryMode in model.DeliveryModes)
            {
                deliveryMode.Selected = false;
            }

            var links = model.ClearDeliveryModeLinks;

            links.Should().BeEmpty();
        }
示例#7
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);
        }
示例#8
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
            });
        }
示例#9
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}");
        }
        public void Then_Any_Selected_Delivery_Options_And_Ratings_Are_Maintained(CourseProvidersViewModel model)
        {
            model.DeliveryModes = model.DeliveryModes.Select(c =>
            {
                c.Selected = true;
                return(c);
            }).ToList();
            model.ProviderRatings = model.ProviderRatings.Select(c =>
            {
                c.Selected = true;
                return(c);
            }).ToList();

            var actual = model.ClearLocationLink;

            actual.Should().StartWith($"?location=-1&providerRatings={string.Join("&providerRatings=", model.ProviderRatings.Select(c => c.ProviderRatingType))}&deliveryModes={string.Join("&deliveryModes=", model.DeliveryModes.Select(c => c.DeliveryModeType))}");
        }
示例#11
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);
        }
示例#12
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));
        }
        public void Then_False_When_DeliveryModes_Empty_And_ProviderRatings_Empty_And_Empty_Location(
            CourseProvidersViewModel model)
        {
            // Arrange
            model.Location = "";
            foreach (var dm in model.DeliveryModes)
            {
                dm.Selected = false;
            }
            ;

            foreach (var pr in model.ProviderRatings)
            {
                pr.Selected = false;
            }
            ;

            // Act
            var actual = model.ShowSelectedFilters;

            // Assert
            Assert.IsFalse(actual);
        }
        public void And_ProviderRatings_Are_Set_And_DeliveryModes_Are_Set_And_Location_Then_True(
            CourseProvidersViewModel model)
        {
            // Arrange
            model.Location = "test";
            foreach (var dm in model.DeliveryModes)
            {
                dm.Selected = true;
            }
            ;

            foreach (var pr in model.ProviderRatings)
            {
                pr.Selected = true;
            }
            ;

            // Act
            var actual = model.ShowSelectedFilters;

            // Assert
            Assert.IsTrue(actual);
        }
示例#15
0
 public void And_Location_Not_Null_Then_True(
     CourseProvidersViewModel model)
 {
     model.HasLocation.Should().BeTrue();
 }
示例#16
0
        public void And_ProviderRating_Selected_Then_Link_Returned_With_DeliveryModes_Selected(CourseProvidersViewModel model)
        {
            // Arrange
            foreach (var providerRating in model.ProviderRatings)
            {
                providerRating.Selected = true;
            }

            foreach (var deliveryMode in model.DeliveryModes)
            {
                deliveryMode.Selected = true;
            }

            // Act
            var links = model.ClearProviderRatingLinks;

            // Assert
            foreach (var providerRating in model.ProviderRatings.Where(vm => vm.Selected))
            {
                var link = links.Single(pair => pair.Key == providerRating.Description);
                var selectedProviderRatings = model.ProviderRatings
                                              .Where(vm =>
                                                     vm.Selected &&
                                                     vm.ProviderRatingType != providerRating.ProviderRatingType)
                                              .Select(vm => vm.ProviderRatingType);
                var deliveryModeSelected = model.DeliveryModes
                                           .Where(vm => vm.Selected)
                                           .Select(vm => vm.DeliveryModeType);

                link.Value.Should().Be($"?location={model.Location}&deliveryModes={string.Join("&deliveryModes=", deliveryModeSelected)}&providerRatings={string.Join("&providerRatings=", selectedProviderRatings)}");
            }
        }
        public void Then_The_Location_Is_Set_To_Minus_One_And_No_Delivery_Modes(CourseProvidersViewModel model)
        {
            var actual = model.ClearLocationLink;

            actual.Should().StartWith("?location=-1");
        }
示例#18
0
        public async Task <IActionResult> CourseProviders(GetCourseProvidersRequest request)
        {
            try
            {
                var location = CheckLocation(request.Location);

                var shortlistItem = _shortlistCookieService.Get(Constants.ShortlistCookieName);

                var result = await _mediator.Send(new GetCourseProvidersQuery
                {
                    CourseId        = request.Id,
                    Location        = location?.Name ?? "",
                    Lat             = location?.Lat ?? 0,
                    Lon             = location?.Lon ?? 0,
                    DeliveryModes   = request.DeliveryModes.Select(type => (Domain.Courses.DeliveryModeType)type),
                    ProviderRatings = request.ProviderRatings.Select(rating => (Domain.Courses.ProviderRating)rating),
                    ShortlistUserId = shortlistItem?.ShortlistUserId
                });

                var cookieResult = new LocationCookieItem
                {
                    Name = result.Location,
                    Lat  = result.LocationGeoPoint?.FirstOrDefault() ?? 0,
                    Lon  = result.LocationGeoPoint?.LastOrDefault() ?? 0
                };
                UpdateLocationCookie(cookieResult);

                if (result.Course == null)
                {
                    return(RedirectToRoute(RouteNames.Error404));
                }

                var providerList = result.Providers.ToList();

                var providers = result.Providers
                                .ToDictionary(provider =>
                                              provider.ProviderId,
                                              provider => WebEncoders.Base64UrlEncode(_providerDataProtector.Protect(
                                                                                          System.Text.Encoding.UTF8.GetBytes($"{providerList.IndexOf(provider) + 1}|{result.TotalFiltered}"))));


                _courseProvidersCookieStorageService.Update(Constants.ProvidersCookieName, request, 2);

                var courseProvidersViewModel = new CourseProvidersViewModel(request, result, providers);

                if (courseProvidersViewModel.Course.AfterLastStartDate)
                {
                    return(RedirectToRoute(RouteNames.CourseDetails, new { request.Id }));
                }

                var removedProviderFromShortlist =
                    string.IsNullOrEmpty(request.Removed) ? "" : HttpUtility.HtmlDecode(GetEncodedProviderName(request.Removed));
                var addedProviderToShortlist =
                    string.IsNullOrEmpty(request.Added) ? "" : HttpUtility.HtmlDecode(GetEncodedProviderName(request.Added));

                courseProvidersViewModel.BannerUpdateMessage = GetProvidersBannerUpdateMessage(removedProviderFromShortlist, addedProviderToShortlist);

                courseProvidersViewModel.HelpFindingCourseUrl = BuildHelpFindingCourseUrl(courseProvidersViewModel.Course.Id, EntryPoint.Providers);

                return(View(courseProvidersViewModel));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(RedirectToRoute(RouteNames.Error500));
            }
        }
示例#19
0
        public void And_DeliveryMode_Selected_And_No_ProviderRatings_Selected_Then_Link_Returned(CourseProvidersViewModel model)
        {
            foreach (var deliveryMode in model.DeliveryModes)
            {
                deliveryMode.Selected = true;
            }

            foreach (var providerRating in model.ProviderRatings)
            {
                providerRating.Selected = false;
            }

            var links = model.ClearDeliveryModeLinks;

            foreach (var deliveryMode in model.DeliveryModes.Where(viewModel => viewModel.Selected))
            {
                var link          = links.Single(pair => pair.Key == deliveryMode.Description);
                var otherSelected = model.DeliveryModes
                                    .Where(viewModel =>
                                           viewModel.Selected &&
                                           viewModel.DeliveryModeType != deliveryMode.DeliveryModeType)
                                    .Select(viewModel => viewModel.DeliveryModeType);

                link.Value.Should().Be($"?location={model.Location}&deliveryModes={string.Join("&deliveryModes=", otherSelected)}");
            }
        }
示例#20
0
        public void Then_When_National_And_At_Workplace_Are_Filtered_Then_Removing_At_Workplace_Removes_National(CourseProvidersViewModel model)
        {
            model.DeliveryModes = new List <DeliveryModeOptionViewModel>
            {
                new DeliveryModeOptionViewModel
                {
                    Selected         = true,
                    Description      = DeliveryModeType.National.GetDescription(),
                    DeliveryModeType = DeliveryModeType.National
                },
                new DeliveryModeOptionViewModel
                {
                    Selected         = true,
                    Description      = DeliveryModeType.Workplace.GetDescription(),
                    DeliveryModeType = DeliveryModeType.Workplace
                }
            };

            foreach (var providerRating in model.ProviderRatings)
            {
                providerRating.Selected = false;
            }


            var links = model.ClearDeliveryModeLinks;

            foreach (var deliveryMode in model.DeliveryModes.Where(viewModel => viewModel.Selected))
            {
                var link          = links.Single(pair => pair.Key == deliveryMode.Description);
                var otherSelected = model.DeliveryModes
                                    .Where(viewModel =>
                                           viewModel.Selected &&
                                           viewModel.DeliveryModeType != deliveryMode.DeliveryModeType)
                                    .Select(viewModel => viewModel.DeliveryModeType);

                if (link.Key == DeliveryModeType.Workplace.GetDescription())
                {
                    link.Value.Should().Be($"?location={model.Location}&deliveryModes=");
                }
                else
                {
                    link.Value.Should().Be($"?location={model.Location}&deliveryModes={string.Join("&deliveryModes=", otherSelected)}");
                }
            }
        }