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); }
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)); }
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); }
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); }