public async Task And_The_Location_Cookie_Exists_Then_Location_Is_Added_To_Shortlist(
            CreateShortlistItemRequest request,
            ShortlistCookieItem shortlistCookie,
            LocationCookieItem locationCookieItem,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > mockLocationCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockLocationCookieService.Setup(x => x.Get(Constants.LocationCookieName))
            .Returns(locationCookieItem);
            request.RouteName = string.Empty;

            //Act
            var actual = await controller.CreateShortlistItem(request) as AcceptedResult;

            //Assert
            actual.Should().NotBeNull();
            mockMediator.Verify(x => x.Send(It.Is <CreateShortlistItemForUserCommand>(c =>
                                                                                      c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId) &&
                                                                                      c.Lat.Equals(locationCookieItem.Lat) &&
                                                                                      c.Lon.Equals(locationCookieItem.Lon) &&
                                                                                      c.LocationDescription.Equals(locationCookieItem.Name) &&
                                                                                      c.Ukprn.Equals(request.Ukprn) &&
                                                                                      c.TrainingCode.Equals(request.TrainingCode)
                                                                                      ), It.IsAny <CancellationToken>()), Times.Once);
        }
        public async Task And_Cookie_Exists_Then_Adds_To_Shortlist_For_User(
            Guid expectedId,
            CreateShortlistItemRequest request,
            ShortlistCookieItem shortlistCookie,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > mockLocationCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            mockMediator.Setup(x => x.Send(It.Is <CreateShortlistItemForUserCommand>(c =>
                                                                                     c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId) &&
                                                                                     c.Lat == null &&
                                                                                     c.Lon == null &&
                                                                                     c.LocationDescription == null &&
                                                                                     c.Ukprn.Equals(request.Ukprn) &&
                                                                                     c.TrainingCode.Equals(request.TrainingCode)
                                                                                     ), It.IsAny <CancellationToken>())).ReturnsAsync(expectedId);
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockLocationCookieService.Setup(x => x.Get(Constants.LocationCookieName))
            .Returns((LocationCookieItem)null);
            request.RouteName = string.Empty;

            //Act
            var actual = await controller.CreateShortlistItem(request) as AcceptedResult;

            //Assert
            actual.Should().NotBeNull();
            Guid.Parse(actual.Value.ToString()).Should().Be(expectedId);
            mockShortlistCookieService.Verify(x => x.Update(Constants.ShortlistCookieName, shortlistCookie, 30), Times.Once);
        }
예제 #3
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);
        }
        public async Task And_If_There_Is_A_Route_Name_Then_It_Is_Redirected(CreateShortlistItemRequest request,
                                                                             ShortlistCookieItem shortlistCookie,
                                                                             LocationCookieItem locationCookieItem,
                                                                             [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
                                                                             [Frozen] Mock <ICookieStorageService <LocationCookieItem> > mockLocationCookieService,
                                                                             [Frozen] Mock <IMediator> mockMediator,
                                                                             [Greedy] ShortlistController controller)
        {
            //Arrange
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockLocationCookieService.Setup(x => x.Get(Constants.LocationCookieName))
            .Returns(locationCookieItem);
            request.RouteName = RouteNames.CourseProviders;

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

            //Assert
            actual.Should().NotBeNull();
            actual.RouteName.Should().Be(request.RouteName);
            actual.RouteValues.Should().ContainKey("id");
            actual.RouteValues["id"].Should().Be(request.TrainingCode);
            actual.RouteValues.Should().ContainKey("providerId");
            actual.RouteValues["providerId"].Should().Be(request.Ukprn);
        }
예제 #5
0
        public async Task Then_The_Query_Is_Sent_And_Data_Retrieved_And_View_Shown(
            GetCoursesRequest request,
            GetCoursesResult response,
            ShortlistCookieItem cookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistCookieService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            mediator.Setup(x =>
                           x.Send(It.Is <GetCoursesQuery>(c =>
                                                          c.Keyword.Equals(request.Keyword) &&
                                                          c.ShortlistUserId.Equals(cookieItem.ShortlistUserId)), It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);
            shortlistCookieService.Setup(x => x.Get(Constants.ShortlistCookieName))
            .Returns(cookieItem);

            //Act
            var actual = await controller.Courses(request);

            var actualResult = actual as ViewResult;

            //Assert
            Assert.IsNotNull(actual);
            Assert.IsNotNull(actualResult);
        }
예제 #6
0
        public async Task And_Cookie_Exists_Then_Reads_Cookie_And_Builds_ViewModel_From_Mediator_Result(
            ShortlistCookieItem shortlistCookie,
            GetShortlistForUserResult resultFromMediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Frozen] Mock <IOptions <FindApprenticeshipTrainingWeb> > config,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = false;
            mockCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetShortlistForUserQuery>(c => c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(resultFromMediator);

            //Act
            var actual = await controller.Index("") as ViewResult;

            //Assert
            actual.Should().NotBeNull();
            var model = actual.Model as ShortlistViewModel;

            model.Should().NotBeNull();
            model.Shortlist.Should()
            .BeEquivalentTo(
                resultFromMediator.Shortlist.Select(item => (ShortlistItemViewModel)item));
            model.Removed.Should().BeEmpty();
            model.HelpBaseUrl.Should().BeEmpty();
        }
예제 #7
0
        public async Task And_Cookie_No_Exists_Then_Returns_Empty_ViewModel(
            ShortlistCookieItem shortlistCookie,
            GetShortlistForUserResult resultFromMediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            mockCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(default(ShortlistCookieItem));
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetShortlistForUserQuery>(c => c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(resultFromMediator);

            //Act
            var actual = await controller.Index(null) as ViewResult;

            //Assert
            actual.Should().NotBeNull();
            var model = actual.Model as ShortlistViewModel;

            model.Should().NotBeNull();
            model.Shortlist.Should().BeEmpty();
            mockMediator.Verify(mediator => mediator.Send(
                                    It.IsAny <GetShortlistForUserQuery>(),
                                    It.IsAny <CancellationToken>()),
                                Times.Never);
        }
        public async Task And_If_ProviderName_Is_In_The_Request_Is_Encoded_Using_The_Protector(
            CreateShortlistItemRequest request,
            ShortlistCookieItem shortlistCookie,
            LocationCookieItem locationCookieItem,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > mockLocationCookieService,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockLocationCookieService.Setup(x => x.Get(Constants.LocationCookieName))
            .Returns(locationCookieItem);
            request.RouteName = RouteNames.CourseProviders;

            //Act
            await controller.CreateShortlistItem(request);

            //Assert
            protector.Verify(c => c.Protect(It.Is <byte[]>(
                                                x => x[0].Equals(Encoding.UTF8.GetBytes($"{request.ProviderName}")[0]))), Times.Once);
        }
예제 #9
0
        public async Task Then_If_The_Encoded_Removed_Param_Is_Invalid_Then_It_Is_Set_To_Empty(
            string removed,
            ShortlistCookieItem shortlistCookie,
            GetShortlistForUserResult resultFromMediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] ShortlistController controller)
        {
            var encodedData = Encoding.UTF8.GetBytes($"{removed}");

            mockCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetShortlistForUserQuery>(c => c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(resultFromMediator);

            //Act
            var actual = await controller.Index(encodedData.ToString()) as ViewResult;

            //Assert
            actual.Should().NotBeNull();
            var model = actual.Model as ShortlistViewModel;

            model.Should().NotBeNull();
            model.Shortlist.Should()
            .BeEquivalentTo(
                resultFromMediator.Shortlist.Select(item => (ShortlistItemViewModel)item));
            model.Removed.Should().BeEmpty();
        }
        public async Task And_If_There_Is_A_RouteName_Then_It_Is_Redirected_And_ProviderName_Not_Encoded_If_Empty(
            Guid id,
            DeleteShortlistItemRequest request,
            ShortlistCookieItem shortlistCookie,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <IDataProtector> protector,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            request.ProviderName = string.Empty;
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            request.RouteName = RouteNames.CourseProviders;

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

            //Assert
            actual.Should().NotBeNull();
            actual.RouteName.Should().Be(RouteNames.CourseProviders);
            actual.RouteValues.Should().ContainKey("id");
            actual.RouteValues["id"].Should().Be(request.TrainingCode);
            actual.RouteValues.Should().ContainKey("providerId");
            actual.RouteValues["providerId"].Should().Be(request.Ukprn);
            actual.RouteValues["removed"].Should().Be(string.Empty);
            protector.Verify(c => c.Protect(It.IsAny <byte[]>()), Times.Never);
        }
예제 #11
0
        public async Task Then_The_Query_Is_Sent_And_Data_Retrieved_And_View_Shown(
            int standardCode,
            GetCourseResult response,
            LocationCookieItem locationCookieItem,
            ShortlistCookieItem shortlistCookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistStorageService,
            [Greedy] CoursesController controller)
        {
            //Arrange
            response.ShowEmployerDemand = true;
            cookieStorageService
            .Setup(x => x.Get(Constants.LocationCookieName))
            .Returns(locationCookieItem);
            shortlistStorageService
            .Setup(x => x.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookieItem);
            mediator
            .Setup(x =>
                   x.Send(It.Is <GetCourseQuery>(c =>
                                                 c.CourseId.Equals(standardCode) &&
                                                 c.ShortlistUserId.Equals(shortlistCookieItem.ShortlistUserId) &&
                                                 c.Lat.Equals(locationCookieItem.Lat) &&
                                                 c.Lon.Equals(locationCookieItem.Lon)
                                                 ), It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);

            //Act
            var actual = await controller.CourseDetail(standardCode, "");

            //Assert
            Assert.IsNotNull(actual);
            var actualResult = actual as ViewResult;

            Assert.IsNotNull(actualResult);
            var actualModel = actualResult.Model as CourseViewModel;

            Assert.IsNotNull(actualModel);
            actualModel.TotalProvidersCount.Should().Be(response.ProvidersCount.TotalProviders);
            actualModel.ProvidersAtLocationCount.Should().Be(response.ProvidersCount.ProvidersAtLocation);
            actualModel.LocationName.Should().Be(locationCookieItem.Name);
            actualModel.ShortlistItemCount.Should().Be(response.ShortlistItemCount);
        }
        public async Task Then_If_Removed_And_Added_Is_In_The_Request_And_Is_Invalid_Then_Empty_String_Is_Added_To_ViewModel(
            int providerId,
            int courseId,
            string location,
            string removed,
            GetCourseProviderResult response,
            ShortlistCookieItem shortlistCookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistCookieService,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] CoursesController controller
            )
        {
            //Arrange
            var encodedData = Encoding.UTF8.GetBytes($"{removed}");

            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            response.Location         = string.Empty;
            response.LocationGeoPoint = null;
            protector.Setup(sut => sut.Unprotect(It.IsAny <byte[]>())).Returns(encodedData);
            provider.Setup(x => x.CreateProtector(Constants.ShortlistProtectorName)).Returns(protector.Object);
            mediator.Setup(x => x.Send(It.Is <GetCourseProviderQuery>(c =>
                                                                      c.ProviderId.Equals(providerId) &&
                                                                      c.CourseId.Equals(courseId) &&
                                                                      c.Location.Equals(location) &&
                                                                      c.ShortlistUserId.Equals(shortlistCookieItem.ShortlistUserId)
                                                                      ), It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);
            shortlistCookieService.Setup(x => x.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookieItem);

            //Act
            var actual = await controller.CourseProviderDetail(courseId, providerId, location, encodedData.ToString(), encodedData.ToString()) as ViewResult;

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

            Assert.IsNotNull(actualModel);
            actualModel.BannerUpdateMessage.Should().BeEmpty();
        }
        public async Task Then_The_Query_Is_Sent_And_Provider_Detail_Retrieved_And_Shown_With_Shortlist(
            int providerId,
            int courseId,
            string location,
            GetCourseProviderResult response,
            ShortlistCookieItem shortlistCookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistCookieService,
            [Greedy] CoursesController controller
            )
        {
            //Arrange
            response.Course.StandardDates.LastDateStarts = DateTime.UtcNow.AddDays(5);
            response.Location         = string.Empty;
            response.LocationGeoPoint = null;
            mediator.Setup(x => x.Send(It.Is <GetCourseProviderQuery>(c =>
                                                                      c.ProviderId.Equals(providerId) &&
                                                                      c.CourseId.Equals(courseId) &&
                                                                      c.Location.Equals(location) &&
                                                                      c.ShortlistUserId.Equals(shortlistCookieItem.ShortlistUserId)
                                                                      ), It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);
            shortlistCookieService.Setup(x => x.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookieItem);

            //Act
            var actual = await controller.CourseProviderDetail(courseId, providerId, location, "", "");

            //Assert
            Assert.IsNotNull(actual);
            var actualResult = actual as ViewResult;

            Assert.IsNotNull(actualResult);
            var actualModel = actualResult.Model as CourseProviderViewModel;

            Assert.IsNotNull(actualModel);
            Assert.IsNotNull(actualModel.AdditionalCourses);
            Assert.IsNotNull(actualModel.AdditionalCourses.Courses);
            actualModel.Location.Should().BeNullOrEmpty();
            cookieStorageService.Verify(x => x.Update(Constants.LocationCookieName, It.IsAny <LocationCookieItem>(), It.IsAny <int>()), Times.Never);
        }
        public async Task Then_The_Help_Url_Set_If_Feature_Disabled(
            int providerId,
            int courseId,
            string location,
            string removed,
            GetCourseProviderResult response,
            ShortlistCookieItem shortlistCookieItem,
            [Frozen] Mock <IMediator> mediator,
            [Frozen] Mock <ICookieStorageService <LocationCookieItem> > cookieStorageService,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > shortlistCookieService,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Frozen] Mock <IOptions <FindApprenticeshipTrainingWeb> > config,
            [Greedy] CoursesController controller)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = false;
            response.Course.StandardDates.LastDateStarts    = DateTime.UtcNow.AddDays(5);
            response.Location         = string.Empty;
            response.LocationGeoPoint = null;
            mediator.Setup(x => x.Send(It.Is <GetCourseProviderQuery>(c =>
                                                                      c.ProviderId.Equals(providerId) &&
                                                                      c.CourseId.Equals(courseId) &&
                                                                      c.Location.Equals(location) &&
                                                                      c.ShortlistUserId.Equals(shortlistCookieItem.ShortlistUserId)
                                                                      ), It.IsAny <CancellationToken>()))
            .ReturnsAsync(response);
            shortlistCookieService.Setup(x => x.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookieItem);

            //Act
            var actual = await controller.CourseProviderDetail(courseId, providerId, location, "", "") as ViewResult;

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

            Assert.IsNotNull(actualModel);
            actualModel.HelpFindingCourseUrl.Should().Be("https://help.apprenticeships.education.gov.uk/hc/en-gb#contact-us");
        }
        public async Task <IActionResult> CreateShortlistItem(CreateShortlistItemRequest request)
        {
            var cookie = _shortlistCookieService.Get(Constants.ShortlistCookieName);

            if (cookie == null)
            {
                cookie = new ShortlistCookieItem
                {
                    ShortlistUserId = Guid.NewGuid()
                };
            }
            _shortlistCookieService.Update(Constants.ShortlistCookieName, cookie, 30);

            var location = _locationCookieService.Get(Constants.LocationCookieName);

            var result = await _mediator.Send(new CreateShortlistItemForUserCommand
            {
                Lat   = location?.Lat,
                Lon   = location?.Lon,
                Ukprn = request.Ukprn,
                LocationDescription = string.IsNullOrEmpty(location?.Name) ? null : location.Name,
                TrainingCode        = request.TrainingCode,
                ShortlistUserId     = cookie.ShortlistUserId
            });

            if (!string.IsNullOrEmpty(request.RouteName))
            {
                return(RedirectToRoute(request.RouteName, new
                {
                    Id = request.TrainingCode,
                    ProviderId = request.Ukprn,
                    Added = string.IsNullOrEmpty(request.ProviderName) ? "" : WebEncoders.Base64UrlEncode(_protector.Protect(
                                                                                                              System.Text.Encoding.UTF8.GetBytes($"{request.ProviderName}")))
                }));
            }

            return(Accepted(result));
        }
예제 #16
0
        public async Task Then_The_Help_Link_Is_Shown_If_The_Feature_Is_Toggled_On(ShortlistCookieItem shortlistCookie,
                                                                                   GetShortlistForUserResult resultFromMediator,
                                                                                   [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockCookieService,
                                                                                   [Frozen] Mock <IMediator> mockMediator,
                                                                                   [Frozen] Mock <IDataProtector> protector,
                                                                                   [Frozen] Mock <IDataProtectionProvider> provider,
                                                                                   [Frozen] Mock <IOptions <FindApprenticeshipTrainingWeb> > config,
                                                                                   [Greedy] ShortlistController controller)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = true;
            mockCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetShortlistForUserQuery>(c => c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(resultFromMediator);

            //Act
            var actual = await controller.Index("") as ViewResult;

            //Assert
            actual.Should().NotBeNull();
            var model = actual.Model as ShortlistViewModel;

            model.Should().NotBeNull();
            model.Shortlist.Should()
            .BeEquivalentTo(
                resultFromMediator.Shortlist.Select(item => (ShortlistItemViewModel)item));
            model.Removed.Should().BeEmpty();
            model.HelpBaseUrl.Should().Be(config.Object.Value.EmployerDemandUrl);
            foreach (var itemViewModel in model.Shortlist)
            {
                itemViewModel.HelpFindingCourseUrl.Should().Be($"/registerdemand/course/{itemViewModel.Course.Id}/share-interest?entrypoint=0");
            }
        }
        public async Task And_Cookie_Exists_Then_Deletes_Shortlist_Item_For_User(
            DeleteShortlistItemRequest request,
            ShortlistCookieItem shortlistCookie,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockShortlistCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            mockShortlistCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            request.RouteName = string.Empty;

            //Act
            var actual = await controller.DeleteShortlistItemForUser(request) as AcceptedResult;

            //Assert
            actual.Should().NotBeNull();
            mockMediator.Verify(x => x.Send(It.Is <DeleteShortlistItemForUserCommand>(c =>
                                                                                      c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId) &&
                                                                                      c.Id.Equals(request.ShortlistId)
                                                                                      ), It.IsAny <CancellationToken>()), Times.Once);
        }
예제 #18
0
        public async Task Then_If_The_Removed_Query_Param_Is_Set_It_Is_Decoded(
            string removed,
            ShortlistCookieItem shortlistCookie,
            GetShortlistForUserResult resultFromMediator,
            [Frozen] Mock <ICookieStorageService <ShortlistCookieItem> > mockCookieService,
            [Frozen] Mock <IMediator> mockMediator,
            [Frozen] Mock <IDataProtector> protector,
            [Frozen] Mock <IDataProtectionProvider> provider,
            [Greedy] ShortlistController controller)
        {
            //Arrange
            var encodedData = Encoding.UTF8.GetBytes($"{removed}");

            protector.Setup(sut => sut.Unprotect(It.IsAny <byte[]>())).Returns(encodedData);
            provider.Setup(x => x.CreateProtector(Constants.ShortlistProtectorName)).Returns(protector.Object);
            mockCookieService
            .Setup(service => service.Get(Constants.ShortlistCookieName))
            .Returns(shortlistCookie);
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetShortlistForUserQuery>(c => c.ShortlistUserId.Equals(shortlistCookie.ShortlistUserId)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(resultFromMediator);

            //Act
            var actual = await controller.Index(WebEncoders.Base64UrlEncode(encodedData)) as ViewResult;

            //Assert
            actual.Should().NotBeNull();
            var model = actual.Model as ShortlistViewModel;

            model.Should().NotBeNull();
            model.Shortlist.Should()
            .BeEquivalentTo(
                resultFromMediator.Shortlist.Select(item => (ShortlistItemViewModel)item));
            model.Removed.Should().Be(removed);
        }