public async Task And_The_AccountLegalEntityPublicHashedId_And_Ukprn_Is_Not_Null_And_AccountPublicHashedId_Is_Null_Then_Permission_Checked( GetVacanciesQuery query, GetVacanciesResponse apiResponse, AccountLegalEntityItem accountLegalEntityItem, GetStandardsListResponse courses, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IAccountLegalEntityPermissionService> accountLegalEntityPermissionService, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.Routes = null; query.AccountIdentifier = new AccountIdentifier("Employer-ABC123-Product"); var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, query.AccountLegalEntityPublicHashedId, query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, new List <string>(), query.PostedInLastNumberOfDays, query.Sort); courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(new List <string>()); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(apiResponse); accountLegalEntityPermissionService .Setup(x => x.GetAccountLegalEntity(It.Is <AccountIdentifier>(c => c.Equals(query.AccountIdentifier)), query.AccountLegalEntityPublicHashedId)).ReturnsAsync(accountLegalEntityItem); courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(courses); var actual = await handler.Handle(query, CancellationToken.None); actual.Vacancies.Should().BeEquivalentTo(apiResponse.ApprenticeshipVacancies); }
public async Task And_The_AccountLegalEntityPublicHashedId_Is_Null_Then_No_LegalEntity_Check_Is_Performed( GetVacanciesQuery query, GetVacanciesResponse apiResponse, GetStandardsListResponse courses, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IAccountsApiClient <AccountsConfiguration> > accountsApi, [Frozen] Mock <IProviderRelationshipsApiClient <ProviderRelationshipsApiConfiguration> > providerRelationshipsApiClient, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.Routes = null; query.AccountLegalEntityPublicHashedId = ""; var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, query.AccountLegalEntityPublicHashedId, query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, new List <string>(), query.PostedInLastNumberOfDays, query.Sort); courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(new List <string>()); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(apiResponse); courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(courses); await handler.Handle(query, CancellationToken.None); accountsApi.Verify(x => x.Get <AccountDetail>(It.IsAny <GetAllEmployerAccountLegalEntitiesRequest>()), Times.Never); providerRelationshipsApiClient.Verify(x => x.Get <GetProviderAccountLegalEntitiesResponse>(It.IsAny <GetProviderAccountLegalEntitiesRequest>()), Times.Never); }
public async Task Then_If_No_Results_From_Zero_Page_Size_Then_Response_Returned( GetVacanciesQuery query, List <string> categories, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.Routes = null; query.PageSize = 0; courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(categories); query.AccountLegalEntityPublicHashedId = ""; var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, query.AccountLegalEntityPublicHashedId, query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, categories, query.PostedInLastNumberOfDays, query.Sort); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(new GetVacanciesResponse { Total = 0, ApprenticeshipVacancies = new List <GetVacanciesListItem>(), TotalFound = 0 }); var actual = await handler.Handle(query, CancellationToken.None); actual.Vacancies.Should().BeEmpty(); actual.Total.Should().Be(0); actual.TotalFiltered.Should().Be(0); actual.TotalPages.Should().Be(0); }
public async Task GivenRequestWithEmployerAccountIdAndUnmatchedUkprn_ShouldReturnNotFoundResponse() { var query = new GetVacanciesQuery(ValidEmployerAccountId, null, UnmatchedUkprn, 10, 1); var result = await _sut.Handle(query, CancellationToken.None); result.ResultCode.Should().Be(ResponseCode.NotFound); }
public async Task GivenRequestWithInvalidEmployerAccountId_ShouldSetInvalidValidationError() { var query = new GetVacanciesQuery("XX1", null, null, 10, 1); var result = await _sut.Handle(query, CancellationToken.None); result.ResultCode.Should().Be(ResponseCode.InvalidRequest); }
public async Task Then_The_Api_Is_Called_With_The_Request_And_Vacancies_Returned( GetVacanciesQuery query, GetVacanciesResponse apiResponse, List <string> categories, GetStandardsListItem courseResponse, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(categories); query.AccountLegalEntityPublicHashedId = ""; var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, query.AccountLegalEntityPublicHashedId, query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, categories, query.PostedInLastNumberOfDays, query.Sort); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(apiResponse); courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(new GetStandardsListResponse { Standards = new List <GetStandardsListItem> { courseResponse } }); var actual = await handler.Handle(query, CancellationToken.None); actual.Vacancies.Should().BeEquivalentTo(apiResponse.ApprenticeshipVacancies); actual.Total.Should().Be(apiResponse.Total); actual.TotalFiltered.Should().Be(apiResponse.TotalFound); actual.TotalPages.Should().Be((int)Math.Ceiling((decimal)apiResponse.TotalFound / query.PageSize)); }
public async Task And_The_AccountIdentifier_Is_External_Then_HashedIds_Are_Not_Set( Guid externalId, GetVacanciesQuery query, GetVacanciesResponse apiResponse, GetProviderAccountLegalEntitiesResponse providerAccountLegalEntitiesResponse, GetStandardsListResponse courses, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IAccountLegalEntityPermissionService> accountLegalEntityPermissionService, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.Routes = new List <string>(); query.AccountPublicHashedId = ""; query.AccountIdentifier = new AccountIdentifier($"External-{externalId}-Product"); var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, "", query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, new List <string>(), query.PostedInLastNumberOfDays, query.Sort); courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(new List <string>()); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(apiResponse); courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(courses); var actual = await handler.Handle(query, CancellationToken.None); actual.Vacancies.Should().BeEquivalentTo(apiResponse.ApprenticeshipVacancies); accountLegalEntityPermissionService .Verify(x => x.GetAccountLegalEntity(It.IsAny <AccountIdentifier>(), query.AccountLegalEntityPublicHashedId), Times.Never); }
public async Task GivenRequestWithEmployerAccountIdOnly_ShouldCallToRetrieveEmployerDashboard() { var query = new GetVacanciesQuery(ValidEmployerAccountId, null, null, 10, 1); var result = await _sut.Handle(query, CancellationToken.None); _mockQueryStoreReader.Verify(qsr => qsr.GetEmployerDashboardAsync(ValidEmployerAccountId), Times.Once); _mockQueryStoreReader.Verify(qsr => qsr.GetProviderDashboardAsync(It.IsAny <long>()), Times.Never); }
public async Task GivenRequestWithInvalidUkprn_ShouldSetInvalidValidationError() { const long NineDigitInvalidUkprn = 111111111; var query = new GetVacanciesQuery(ValidEmployerAccountId, null, NineDigitInvalidUkprn, 10, 1); var result = await _sut.Handle(query, CancellationToken.None); result.ResultCode.Should().Be(ResponseCode.InvalidRequest); }
public VacanciesControllerTests() { _mockMediator = new Mock <IMediator>(); _mockMediator.Setup(x => x.Send(It.IsAny <GetVacanciesQuery>(), CancellationToken.None)) .ReturnsAsync(new GetVacanciesResponse()) .Callback <IRequest <GetVacanciesResponse>, CancellationToken>((q, _) => _queryPassed = (GetVacanciesQuery)q); _sut = new VacanciesController(_mockMediator.Object); }
public async Task GivenRequestWithEmployerAccountIdAndLegalEntityId_ShouldCallToRetrieveEmployerDashboard() { var query = new GetVacanciesQuery(ValidEmployerAccountId, 130, null, 100, 1); var result = await _sut.Handle(query, CancellationToken.None); var dataResult = result.Data.As <VacanciesSummary>(); dataResult.Vacancies.Count().Should().Be(6); }
public async Task GivenRequestWithEmployerAccountIdOnly_ShouldReturnVacanciesSummaryWithFourteenVacancies() { var query = new GetVacanciesQuery(ValidEmployerAccountId, null, null, 100, 1); var result = await _sut.Handle(query, CancellationToken.None); var dataResult = result.Data.As <VacanciesSummary>(); dataResult.Vacancies.Count().Should().Be(14); }
public void And_The_AccountLegalEntityPublicHashedId_And_Ukprn_Is_Not_Null_And_AccountPublicHashedId_Is_Null_Then_ProviderRelations_Api_Checked_And_If_Not_In_Response_Exception_Thrown( GetVacanciesQuery query, GetProviderAccountLegalEntitiesResponse providerAccountLegalEntitiesResponse, [Frozen] Mock <IAccountLegalEntityPermissionService> accountLegalEntityPermissionService, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.AccountPublicHashedId = ""; query.AccountIdentifier = new AccountIdentifier($"Employer-{query.Ukprn}-Product"); accountLegalEntityPermissionService .Setup(x => x.GetAccountLegalEntity(It.Is <AccountIdentifier>(c => c.Equals(query.AccountIdentifier)), query.AccountLegalEntityPublicHashedId)).ReturnsAsync((AccountLegalEntityItem)null); Assert.ThrowsAsync <SecurityException>(() => handler.Handle(query, CancellationToken.None)); }
public async Task Then_The_Api_Is_Called_And_Data_Returned( GetVacanciesQuery query, GetAdvertsResponse apiResponse, [Frozen] Mock <IApiClient> apiClient, GetVacanciesQueryHandler handler) { var expectedUrl = new GetAdvertsRequest(query.Postcode, query.Distance, query.Route); apiClient.Setup(x => x.Get <GetAdvertsResponse>(It.Is <GetAdvertsRequest>(c => c.GetUrl.Equals(expectedUrl.GetUrl)))) .ReturnsAsync(apiResponse); var actual = await handler.Handle(query, CancellationToken.None); actual.Should().BeEquivalentTo(apiResponse); }
public async Task Then_The_Route_And_CourseTitle_Are_Taken_From_Standards_Service_And_Ignored_For_Null( int standardLarsCode, string findAnApprenticeshipBaseUrl, GetVacanciesQuery query, GetVacanciesResponse apiResponse, GetStandardsListItem courseResponse, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, [Frozen] Mock <ICourseService> courseService, [Frozen] Mock <IOptions <VacanciesConfiguration> > vacanciesConfiguration, GetVacanciesQueryHandler handler) { vacanciesConfiguration.Object.Value.FindAnApprenticeshipBaseUrl = findAnApprenticeshipBaseUrl; courseResponse.LarsCode = standardLarsCode; foreach (var vacanciesItem in apiResponse.ApprenticeshipVacancies) { vacanciesItem.StandardLarsCode = standardLarsCode; } apiResponse.ApprenticeshipVacancies.First().StandardLarsCode = null; query.AccountLegalEntityPublicHashedId = ""; var expectedGetRequest = new GetVacanciesRequest(query.PageNumber, query.PageSize, query.AccountLegalEntityPublicHashedId, query.Ukprn, query.AccountPublicHashedId, query.StandardLarsCode, query.NationWideOnly, query.Lat, query.Lon, query.DistanceInMiles, new List <string>(), query.PostedInLastNumberOfDays, query.Sort); apiClient.Setup(x => x.Get <GetVacanciesResponse>(It.Is <GetVacanciesRequest>(c => c.GetUrl.Equals(expectedGetRequest.GetUrl)))).ReturnsAsync(apiResponse); courseService.Setup(x => x.GetActiveStandards <GetStandardsListResponse>(nameof(GetStandardsListResponse))).ReturnsAsync(new GetStandardsListResponse { Standards = new List <GetStandardsListItem> { courseResponse } }); courseService.Setup(x => x.MapRoutesToCategories(query.Routes)).Returns(new List <string>()); var actual = await handler.Handle(query, CancellationToken.None); actual.Vacancies.ToList().TrueForAll(c => c.CourseTitle.Equals(courseResponse.Title) && c.Route.Equals(courseResponse.Route) && c.CourseLevel.Equals(courseResponse.Level) ).Should().BeTrue(); foreach (var vacancy in actual.Vacancies) { vacancy.VacancyUrl.Should().Be($"{findAnApprenticeshipBaseUrl}/apprenticeship/reference/{vacancy.VacancyReference}"); } }
public async Task Then_If_There_Is_A_AccountLegalEntityPublicHashedId_And_No_Account_Or_Ukprn_Then_Exception_Thrown( GetVacanciesQuery query, GetVacanciesResponse apiResponse, AccountDetail accountDetailApiResponse, [Frozen] Mock <IAccountsApiClient <AccountsConfiguration> > accountsApi, [Frozen] Mock <IProviderRelationshipsApiClient <ProviderRelationshipsApiConfiguration> > providerRelationshipsApiClient, [Frozen] Mock <IFindApprenticeshipApiClient <FindApprenticeshipApiConfiguration> > apiClient, GetVacanciesQueryHandler handler) { query.AccountPublicHashedId = null; query.Ukprn = null; Assert.ThrowsAsync <SecurityException>(() => handler.Handle(query, CancellationToken.None)); providerRelationshipsApiClient.Verify(x => x.Get <GetProviderAccountLegalEntitiesResponse>(It.IsAny <GetProviderAccountLegalEntitiesRequest>()), Times.Never); accountsApi.Verify(x => x.Get <AccountDetail>(It.IsAny <GetAllEmployerAccountLegalEntitiesRequest>()), Times.Never); apiClient.Verify(x => x.Get <GetVacanciesResponse>(It.IsAny <GetVacanciesRequest>()), Times.Never); }
public async Task <PagedResult <VacancyViewModel> > GetAllVacanciesAsync([FromQuery] GetVacanciesQuery query) => await _mediator.Send(query);