Exemplo n.º 1
0
        public async Task Then_If_No_Standard_Found_Returns_Empty_Response(
            GetTrainingCourseQuery query,
            GetLevelsListResponse levelsApiResponse,
            GetUkprnsForStandardAndLocationResponse courseDirectoryApiResponse,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockCoursesApiClient,
            [Frozen] Mock <ICourseDeliveryApiClient <CourseDeliveryApiConfiguration> > mockCourseDeliveryApiClient,
            GetTrainingCourseQueryHandler handler)
        {
            //Arrange
            mockCoursesApiClient
            .Setup(client => client.Get <GetStandardsListItem>(It.Is <GetStandardRequest>(c => c.GetUrl.Contains($"api/courses/standards/{query.Id}"))))
            .ReturnsAsync((GetStandardsListItem)null);


            var url = new GetUkprnsForStandardAndLocationRequest(query.Id, query.Lat, query.Lon).GetUrl;

            mockCourseDeliveryApiClient
            .Setup(client =>
                   client.Get <GetUkprnsForStandardAndLocationResponse>(
                       It.Is <GetUkprnsForStandardAndLocationRequest>((c =>
                                                                       c.GetUrl.Equals(url)))))
            .ReturnsAsync(courseDirectoryApiResponse);

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

            //Assert
            result.Course.Should().BeNull();
        }
        public async Task Then_Gets_Standards_And_Sectors_And_Levels_From_Courses_Api_With_Request_Params(
            GetTrainingCoursesListQuery query,
            GetStandardsListResponse apiResponse,
            GetSectorsListResponse sectorsApiResponse,
            GetLevelsListResponse levelsApiResponse,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockApiClient,
            GetTrainingCoursesListQueryHandler handler)
        {
            mockApiClient
            .Setup(client => client.Get <GetStandardsListResponse>(
                       It.Is <GetStandardsListRequest>(c => c.Keyword.Equals(query.Keyword) &&
                                                       c.RouteIds.Equals(query.RouteIds) &&
                                                       c.Levels.Equals(query.Levels)
                                                       )))
            .ReturnsAsync(apiResponse);
            mockApiClient
            .Setup(client => client.Get <GetSectorsListResponse>(It.IsAny <GetSectorsListRequest>()))
            .ReturnsAsync(sectorsApiResponse);
            mockApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);

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

            result.Courses.Should().BeEquivalentTo(apiResponse.Standards);
            result.Sectors.Should().BeEquivalentTo(sectorsApiResponse.Sectors);
            result.Levels.Should().BeEquivalentTo(levelsApiResponse.Levels);
            result.Total.Should().Be(apiResponse.Total);
            result.TotalFiltered.Should().Be(apiResponse.TotalFiltered);
            result.OrderBy.Should().Be(query.OrderBy);
        }
        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);
        }
        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);
        }
Exemplo n.º 5
0
        public async Task <IActionResult> GetList()
        {
            var queryResult = await _mediator.Send(new GetLevelsListQuery());

            var response = new GetLevelsListResponse
            {
                Levels = queryResult.Levels.Select(level => (GetLevelResponse)level)
            };

            return(Ok(response));
        }
Exemplo n.º 6
0
        public async Task Then_If_Demand_Feature_Is_Not_Enabled_Then_False_Returned_And_Api_Not_Called(
            GetTrainingCourseQuery query,
            GetStandardsListItem coursesApiResponse,
            GetLevelsListResponse levelsApiResponse,
            GetUkprnsForStandardAndLocationResponse courseDirectoryApiResponse,
            int shortlistItemCount,
            GetShowEmployerDemandResponse showEmployerDemandResponse,
            [Frozen] Mock <IOptions <FindApprenticeshipTrainingConfiguration> > config,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockCoursesApiClient,
            [Frozen] Mock <ICourseDeliveryApiClient <CourseDeliveryApiConfiguration> > mockCourseDeliveryApiClient,
            [Frozen] Mock <IShortlistService> shortlistService,
            [Frozen] Mock <IEmployerDemandApiClient <EmployerDemandApiConfiguration> > mockEmployerDemandApiClient,
            GetTrainingCourseQueryHandler handler)
        {
            //Arrange
            config.Object.Value.EmployerDemandFeatureToggle = false;
            levelsApiResponse.Levels.First().Name = "GCSE";
            levelsApiResponse.Levels.First().Code = 2;
            coursesApiResponse.Level           = 2;
            coursesApiResponse.LevelEquivalent = levelsApiResponse.Levels
                                                 .Single(x => x.Code == coursesApiResponse.Level).Name;
            var url = new GetUkprnsForStandardAndLocationRequest(query.Id, query.Lat, query.Lon).GetUrl;

            mockCoursesApiClient
            .Setup(client => client.Get <GetStandardsListItem>(It.Is <GetStandardRequest>(c => c.GetUrl.Contains($"api/courses/standards/{query.Id}"))))
            .ReturnsAsync(coursesApiResponse);
            shortlistService.Setup(x => x.GetShortlistItemCount(query.ShortlistUserId))
            .ReturnsAsync(shortlistItemCount);
            mockCourseDeliveryApiClient
            .Setup(client =>
                   client.Get <GetUkprnsForStandardAndLocationResponse>(
                       It.Is <GetUkprnsForStandardAndLocationRequest>((c =>
                                                                       c.GetUrl.Equals(url)))))
            .ReturnsAsync(courseDirectoryApiResponse);
            mockCoursesApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);
            mockEmployerDemandApiClient
            .Setup(client => client.GetResponseCode(It.IsAny <GetShowEmployerDemandRequest>()))
            .ReturnsAsync(HttpStatusCode.OK);

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

            //Assert
            result.Course.Should().BeEquivalentTo(coursesApiResponse);
            result.Course.LevelEquivalent.Should().Be("GCSE");
            result.ProvidersCount.Should().Be(courseDirectoryApiResponse.UkprnsByStandard.ToList().Count);
            result.ProvidersCountAtLocation.Should().Be(courseDirectoryApiResponse.UkprnsByStandardAndLocation.ToList().Count);
            result.ShortlistItemCount.Should().Be(shortlistItemCount);
            result.ShowEmployerDemand.Should().BeFalse();
            mockEmployerDemandApiClient
            .Verify(client => client.GetResponseCode(It.IsAny <GetShowEmployerDemandRequest>()), Times.Never);
        }
Exemplo n.º 7
0
        public async Task Then_If_There_Is_No_Location_Then_Location_Not_Passed(
            GetTrainingCourseQuery query,
            GetStandardsListItem coursesApiResponse,
            GetLevelsListResponse levelsApiResponse,
            GetUkprnsForStandardAndLocationResponse courseDirectoryApiResponse,
            int shortlistItemCount,
            LocationItem locationItem,
            [Frozen] Mock <ICoursesApiClient <CoursesApiConfiguration> > mockCoursesApiClient,
            [Frozen] Mock <ICourseDeliveryApiClient <CourseDeliveryApiConfiguration> > mockCourseDeliveryApiClient,
            [Frozen] Mock <IShortlistService> shortlistService,
            [Frozen] Mock <ILocationLookupService> locationLookupService,
            GetTrainingCourseQueryHandler handler)
        {
            //Arrange
            locationLookupService
            .Setup(x => x.GetLocationInformation(query.LocationName, query.Lat, query.Lon, false))
            .ReturnsAsync((LocationItem)null);
            levelsApiResponse.Levels.First().Name = "GCSE";
            coursesApiResponse.Level           = levelsApiResponse.Levels.First().Code;
            coursesApiResponse.LevelEquivalent = levelsApiResponse.Levels
                                                 .Single(x => x.Code == coursesApiResponse.Level).Name;
            var url = new GetUkprnsForStandardAndLocationRequest(query.Id, 0, 0).GetUrl;

            mockCoursesApiClient
            .Setup(client => client.Get <GetStandardsListItem>(It.Is <GetStandardRequest>(c => c.GetUrl.Contains($"api/courses/standards/{query.Id}"))))
            .ReturnsAsync(coursesApiResponse);
            shortlistService.Setup(x => x.GetShortlistItemCount(query.ShortlistUserId))
            .ReturnsAsync(shortlistItemCount);
            mockCourseDeliveryApiClient
            .Setup(client =>
                   client.Get <GetUkprnsForStandardAndLocationResponse>(
                       It.Is <GetUkprnsForStandardAndLocationRequest>((c =>
                                                                       c.GetUrl.Equals(url)))))
            .ReturnsAsync(courseDirectoryApiResponse);
            mockCoursesApiClient
            .Setup(client => client.Get <GetLevelsListResponse>(It.IsAny <GetLevelsListRequest>()))
            .ReturnsAsync(levelsApiResponse);

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

            //Assert
            result.Course.Should().BeEquivalentTo(coursesApiResponse);
            result.Course.LevelEquivalent.Should().Be("GCSE");
            result.ProvidersCount.Should().Be(courseDirectoryApiResponse.UkprnsByStandard.ToList().Count);
            result.ProvidersCountAtLocation.Should().Be(courseDirectoryApiResponse.UkprnsByStandardAndLocation.ToList().Count);
            result.ShortlistItemCount.Should().Be(shortlistItemCount);
        }
        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_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);
        }