public async Task Then_The_Levels_Are_Returned_From_The_Cache_If_Available(GetTrainingCoursesListQuery query,
                                                                                   GetStandardsListResponse apiResponse,
                                                                                   GetRoutesListResponse routesApiResponse,
                                                                                   GetLevelsListResponse levelsApiResponse,
                                                                                   [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
                                                                                   [Frozen] Mock <ICacheStorageService> cacheStorageService,
                                                                                   GetTrainingCoursesListQueryHandler handler)
        {
            //Arrange
            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.Is <GetAvailableToStartStandardsListRequest>(c => c.Keyword.Equals(query.Keyword))))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(routesApiResponse);
            cacheStorageService
            .Setup(x =>
                   x.RetrieveFromCache <GetLevelsListResponse>(nameof(GetLevelsListResponse)))
            .ReturnsAsync(levelsApiResponse);

            //Act
            var result = await handler.Handle(query, CancellationToken.None);

            //Assert
            result.Courses.Should().BeEquivalentTo(apiResponse.Standards);
            result.Sectors.Should().BeEquivalentTo(routesApiResponse.Routes);
            result.Levels.Should().BeEquivalentTo(levelsApiResponse.Levels);
            result.Total.Should().Be(apiResponse.Total);
            result.TotalFiltered.Should().Be(apiResponse.TotalFiltered);
            mockApiClient.Verify(x => x.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()), Times.Never);
        }
        public async Task Then_Caches_The_Courses_If_There_Are_No_Filters(
            GetStandardsListResponse apiResponse,
            GetRoutesListResponse routesApiResponse,
            GetLevelsListResponse levelsApiResponse,
            [Frozen] Mock <ICacheStorageService> cacheStorageService,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
            GetTrainingCoursesListQueryHandler handler)
        {
            var query = new GetTrainingCoursesListQuery
            {
                Levels   = new List <int>(),
                RouteIds = new List <string>()
            };

            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.IsAny <GetAvailableToStartStandardsListRequest>()))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(routesApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);

            var result = await handler.Handle(query, CancellationToken.None);

            cacheStorageService.Verify(x => x.SaveToCache(nameof(GetStandardsListResponse), apiResponse, TimeSpan.FromHours(2)));
            result.Courses.Should().BeEquivalentTo(apiResponse.Standards);
            result.Sectors.Should().BeEquivalentTo(routesApiResponse.Routes);
            result.Levels.Should().BeEquivalentTo(levelsApiResponse.Levels);
            result.Total.Should().Be(apiResponse.Total);
            result.TotalFiltered.Should().Be(apiResponse.TotalFiltered);
            result.OrderBy.Should().Be(query.OrderBy);
        }
Пример #3
0
 public async Task Then_The_Api_Is_Called_With_The_Request_And_Sectors_Returned_And_Added_To_Cache(
     GetRoutesListResponse apiResponse,
     [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > apiClient,
     [Frozen] Mock <ICacheStorageService> cacheStorageService,
     CourseService service)
 {
     //Arrange
     cacheStorageService.Setup(x => x.RetrieveFromCache <GetRoutesListResponse>(nameof(GetRoutesListResponse)))
     .ReturnsAsync((GetRoutesListResponse) default);
        public async Task <IActionResult> GetList()
        {
            var queryResult = await _mediator.Send(new GetRoutesQuery());

            var response = new GetRoutesListResponse
            {
                Routes = queryResult.Routes.Select(c => (GetRouteResponse)c)
            };

            return(Ok(response));
        }
        public async Task Then_Gets_Standards_And_Sectors_And_Levels_From_Courses_Api_And_Shortlist_Item_Count_With_Request_Params(
            int sectorId,
            GetTrainingCoursesListQuery query,
            GetStandardsListResponse apiResponse,
            GetLevelsListResponse levelsApiResponse,
            int shortlistItemCount,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
            [Frozen] Mock <IShortlistService> shortlistService,
            GetTrainingCoursesListQueryHandler handler)
        {
            var sectorsApiResponse = new GetRoutesListResponse
            {
                Routes = new List <GetRoutesListItem>
                {
                    new GetRoutesListItem
                    {
                        Id   = sectorId,
                        Name = query.RouteIds.First()
                    }
                }
            };

            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.Is <GetAvailableToStartStandardsListRequest>(c => c.Keyword.Equals(query.Keyword) &&
                                                                       c.RouteIds.Contains(sectorId) &&
                                                                       c.Levels.Equals(query.Levels)
                                                                       )))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(sectorsApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);
            shortlistService.Setup(x => x.GetShortlistItemCount(query.ShortlistUserId))
            .ReturnsAsync(shortlistItemCount);

            var result = await handler.Handle(query, CancellationToken.None);

            result.Courses.Should().BeEquivalentTo(apiResponse.Standards);
            result.Sectors.Should().BeEquivalentTo(sectorsApiResponse.Routes);
            result.Levels.Should().BeEquivalentTo(levelsApiResponse.Levels);
            result.Total.Should().Be(apiResponse.Total);
            result.TotalFiltered.Should().Be(apiResponse.TotalFiltered);
            result.OrderBy.Should().Be(query.OrderBy);
            result.ShortlistItemCount.Should().Be(shortlistItemCount);
        }
        public async Task Then_The_Service_Called_And_Data_Returned(
            GetRoutesQuery query,
            GetRoutesListResponse response,
            [Frozen] Mock <ICourseService> service,
            GetRoutesQueryHandler handler)
        {
            //Arrange
            service.Setup(x => x.GetRoutes())
            .ReturnsAsync(response);

            //Act
            var actual = await handler.Handle(query, CancellationToken.None);

            //Assert
            actual.Routes.Should().BeEquivalentTo(response.Routes);
        }
Пример #7
0
        public async Task Then_If_The_Postcode_Is_Not_Valid_Then_No_Results_Returned(
            GetAdvertsQuery query,
            GetRoutesListResponse getRoutesListResponse,
            [Frozen] Mock <ICourseService> courseService,
            [Frozen] Mock <ILocationLookupService> locationLookupService,
            GetAdvertsQueryHandler handler)
        {
            locationLookupService.Setup(x => x.GetLocationInformation(query.Postcode, 0, 0, false))
            .ReturnsAsync((LocationItem)null);
            courseService.Setup(x => x.GetRoutes()).ReturnsAsync(getRoutesListResponse);

            var actual = await handler.Handle(query, CancellationToken.None);

            actual.Routes.Should().BeEquivalentTo(getRoutesListResponse.Routes);
            actual.TotalFound.Should().Be(0);
            actual.Location.Should().BeNull();
            actual.Vacancies.Should().BeEmpty();
        }
Пример #8
0
        public async Task Then_If_The_Sector_Does_Not_Exist_Then_No_Standards_Are_Returned(
            GetStandardsQuery query,
            GetStandardsListResponse apiResponse,
            GetRoutesListResponse routesApiResponse,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > apiClient,
            [Frozen] Mock <ICourseService> courseService,
            GetStandardsQueryHandler handler)
        {
            //Arrange
            courseService
            .Setup(x => x.GetRoutes())
            .ReturnsAsync(routesApiResponse);

            //Act
            var actual = await handler.Handle(query, CancellationToken.None);

            //Assert
            actual.Standards.Should().BeNull();
        }
Пример #9
0
        public async Task Then_The_Routes_Are_Filtered_And_Postcode_Searched_And_Adverts_Returned(
            string findAnApprenticeshipBaseUrl,
            GetAdvertsQuery query,
            List <string> categories,
            LocationItem locationItem,
            GetVacanciesResponse vacanciesResponse,
            GetRoutesListResponse getRoutesListResponse,
            GetStandardsListResponse standards,
            [Frozen] Mock <IOptions <CampaignConfiguration> > configuration,
            [Frozen] Mock <ICourseService> courseService,
            [Frozen] Mock <ILocationLookupService> locationLookupService,
            [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > faaApiClient,
            GetAdvertsQueryHandler handler)
        {
            //Arrange
            query.Route = standards.Standards.First().Route.ToLower();
            configuration.Object.Value.FindAnApprenticeshipBaseUrl = findAnApprenticeshipBaseUrl;
            var expectedAdvertUrl = new GetVacanciesRequest(0, 20, null, null, null, new List <int> {
                standards.Standards.First().LarsCode
            }, null,
                                                            locationItem.GeoPoint.First(), locationItem.GeoPoint.Last(), query.Distance, null, null, "DistanceAsc");

            locationLookupService.Setup(x => x.GetLocationInformation(query.Postcode, 0, 0, false))
            .ReturnsAsync(locationItem);
            faaApiClient
            .Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c =>
                                                                                 c.GetUrl.Equals(expectedAdvertUrl.GetUrl)))).ReturnsAsync(vacanciesResponse);
            courseService.Setup(x => x.GetRoutes()).ReturnsAsync(getRoutesListResponse);
            courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(standards);

            var actual = await handler.Handle(query, CancellationToken.None);

            actual.Vacancies.Should().BeEquivalentTo(vacanciesResponse.ApprenticeshipVacancies);
            actual.TotalFound.Should().Be(vacanciesResponse.ApprenticeshipVacancies.Count());
            actual.Routes.Should().BeEquivalentTo(getRoutesListResponse.Routes);
            actual.Location.Should().BeEquivalentTo(locationItem);

            foreach (var vacancy in actual.Vacancies)
            {
                vacancy.VacancyUrl.Should().Be($"{findAnApprenticeshipBaseUrl}/apprenticeship/reference/{vacancy.VacancyReference}");
            }
        }
 public async Task Then_Gets_Demands_And_Courses_From_Apis_And_Adds_Courses_And_Routes_To_Cache(
     GetAggregatedCourseDemandListQuery query,
     GetStandardsListResponse coursesApiStandardsResponse,
     GetRoutesListResponse coursesApiRoutesResponse,
     GetAggregatedCourseDemandListResponse demandApiResponse,
     [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockCoursesApi,
     [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockDemandApi,
     [Frozen] Mock <ILocationLookupService> mockLocationLookup,
     [Frozen] Mock <ICacheStorageService> cacheStorageService,
     GetAggregatedCourseDemandListQueryHandler handler)
 {
     query.LocationName   = null;
     query.LocationRadius = null;
     cacheStorageService
     .Setup(client => client.RetrieveFromCache <GetStandardsListResponse>(nameof(GetStandardsListResponse)))
     .ReturnsAsync((GetStandardsListResponse)null);
     cacheStorageService
     .Setup(client => client.RetrieveFromCache <GetRoutesListResponse>(nameof(GetRoutesListResponse)))
     .ReturnsAsync((GetRoutesListResponse)null);
     mockLocationLookup
     .Setup(service => service.GetLocationInformation(null, default, default, false))
        public async Task Then_The_Levels_Are_Added_To_The_Cache_If_Not_Available(GetTrainingCoursesListQuery query,
                                                                                  GetStandardsListResponse apiResponse,
                                                                                  GetRoutesListResponse routesApiResponse,
                                                                                  GetLevelsListResponse levelsApiResponse,
                                                                                  [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
                                                                                  [Frozen] Mock <ICacheStorageService> cacheStorageService,
                                                                                  GetTrainingCoursesListQueryHandler handler)
        {
            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.Is <GetAvailableToStartStandardsListRequest>(c => c.Keyword.Equals(query.Keyword))))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(routesApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);

            await handler.Handle(query, CancellationToken.None);

            cacheStorageService.Verify(x => x.SaveToCache(nameof(GetLevelsListResponse), levelsApiResponse, TimeSpan.FromHours(2)));
        }
        public async Task Then_Caches_The_Courses_If_The_Cache_Has_An_Empty_Course_List(
            GetStandardsListResponse cachedStandards,
            GetStandardsListResponse apiResponse,
            GetRoutesListResponse routesApiResponse,
            GetLevelsListResponse levelsApiResponse,
            [Frozen] Mock <ICacheStorageService> cacheStorageService,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
            GetTrainingCoursesListQueryHandler handler)
        {
            cachedStandards.Total = 0;
            var query = new GetTrainingCoursesListQuery
            {
                Levels   = new List <int>(),
                RouteIds = new List <string>()
            };

            cacheStorageService
            .Setup(cache => cache.RetrieveFromCache <GetStandardsListResponse>(nameof(GetStandardsListResponse)))
            .ReturnsAsync(cachedStandards);

            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.IsAny <GetAvailableToStartStandardsListRequest>()))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(routesApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);

            var result = await handler.Handle(query, CancellationToken.None);

            cacheStorageService.Verify(x => x.SaveToCache(nameof(GetStandardsListResponse), apiResponse, TimeSpan.FromHours(2)));
            result.Courses.Should().BeEquivalentTo(apiResponse.Standards);
        }
        public async Task Then_Sector_Ids_Are_Looked_Up_If_There_Is_A_Sector_Filter(
            int sectorId,
            GetTrainingCoursesListQuery query,
            GetStandardsListResponse apiResponse,
            GetLevelsListResponse levelsApiResponse,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
            [Frozen] Mock <ICacheStorageService> cacheStorageService,
            GetTrainingCoursesListQueryHandler handler)
        {
            var sectorsApiResponse = new GetRoutesListResponse
            {
                Routes = new List <GetRoutesListItem>
                {
                    new GetRoutesListItem
                    {
                        Id   = sectorId,
                        Name = query.RouteIds.First()
                    }
                }
            };

            mockApiClient
            .Setup(client => client.Get <GetRoutesListResponse>(It.IsAny <GetRoutesListRequest>()))
            .ReturnsAsync(sectorsApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.Is <GetAvailableToStartStandardsListRequest>(c => c.Keyword.Equals(query.Keyword) && c.RouteIds.Contains(sectorId))))
            .ReturnsAsync(apiResponse);

            var actual = await handler.Handle(query, CancellationToken.None);

            Assert.IsNotNull(actual);
        }
Пример #14
0
        public async Task Then_If_The_Sectors_Cache_Is_Empty_They_Are_Looked_Up_And_Added(
            int routeId,
            GetStandardsQuery query,
            GetStandardsListResponse apiResponse,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > apiClient,
            [Frozen] Mock <ICacheStorageService> cacheStorageService,
            GetStandardsQueryHandler handler)
        {
            //Arrange
            var sectorsApiResponse = new GetRoutesListResponse
            {
                Routes = new List <GetRoutesListItem>
                {
                    new GetRoutesListItem
                    {
                        Id   = routeId,
                        Name = query.Sector
                    }
                }
            };

            cacheStorageService
            .Setup(x => x.RetrieveFromCache <GetRoutesListResponse>(nameof(GetRoutesListResponse)))
            .ReturnsAsync((GetRoutesListResponse) default);