Exemple #1
0
        public async Task Then_Gets_Vacancies_From_Mediator_As_Provider_And_Uses_Request_Ukprn_If_FilterBySubscription_Is_false(
            SearchVacancyRequest request,
            int ukprn,
            GetVacanciesQueryResult mediatorResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] VacancyController controller)
        {
            request.FilterBySubscription = false;
            var accountIdentifier = $"Provider-{ukprn}-product";

            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetVacanciesQuery>(
                           c => c.Ukprn.Equals(request.Ukprn) &&
                           c.AccountIdentifier.AccountType == AccountType.Provider &&
                           c.AccountIdentifier.AccountHashedId == null &&
                           c.AccountIdentifier.Ukprn == ukprn &&
                           c.PageNumber.Equals(request.PageNumber) &&
                           c.AccountPublicHashedId == null &&
                           c.AccountLegalEntityPublicHashedId.Equals(request.AccountLegalEntityPublicHashedId) &&
                           c.PageSize.Equals(request.PageSize)),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            var controllerResult = await controller.GetVacancies(accountIdentifier, request) as ObjectResult;

            Assert.IsNotNull(controllerResult);
            controllerResult.StatusCode.Should().Be((int)HttpStatusCode.OK);
            var model = controllerResult.Value as GetVacanciesListResponse;

            Assert.IsNotNull(model);
            model.Should().BeEquivalentTo((GetVacanciesListResponse)mediatorResult);
        }
Exemple #2
0
        public async Task And_SecurityException_Then_Returns_Forbidden(
            string accountId,
            SearchVacancyRequest request,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] VacancyController controller)
        {
            var accountIdentifier = $"Employer-{accountId}-product";

            mockMediator
            .Setup(mediator => mediator.Send(
                       It.IsAny <GetVacanciesQuery>(),
                       It.IsAny <CancellationToken>()))
            .ThrowsAsync(new SecurityException());

            var controllerResult = await controller.GetVacancies(accountIdentifier, request) as StatusCodeResult;

            controllerResult.StatusCode.Should().Be((int)HttpStatusCode.Forbidden);
        }
Exemple #3
0
        public async Task Then_Gets_Vacancies_From_Mediator_As_Employer_With_No_AccountId_Filter_When_FilterBySubscription_Is_False(
            SearchVacancyRequest request,
            GetVacanciesQueryResult mediatorResult,
            [Frozen] Mock <IMediator> mockMediator,
            [Greedy] VacancyController controller)
        {
            var accountId         = "ABC123";
            var accountIdentifier = $"Employer-{accountId}-product";

            request.FilterBySubscription = false;
            request.Sort = VacancySort.ExpectedStartDateAsc;
            mockMediator
            .Setup(mediator => mediator.Send(
                       It.Is <GetVacanciesQuery>(
                           c => c.Ukprn.Equals(request.Ukprn) &&
                           c.AccountIdentifier.AccountType == AccountType.Employer &&
                           c.AccountIdentifier.AccountHashedId == accountId &&
                           c.AccountIdentifier.Ukprn == null &&
                           c.PageNumber.Equals(request.PageNumber) &&
                           c.AccountPublicHashedId == null &&
                           c.AccountLegalEntityPublicHashedId.Equals(request.AccountLegalEntityPublicHashedId) &&
                           c.PageSize.Equals(request.PageSize) &&
                           c.Lat.Equals(request.Lat) &&
                           c.Lon.Equals(request.Lon) &&
                           c.Routes.Equals(request.Routes) &&
                           c.Sort.Equals(request.Sort.ToString()) &&
                           c.DistanceInMiles.Equals(request.DistanceInMiles) &&
                           c.NationWideOnly.Equals(request.NationWideOnly) &&
                           c.StandardLarsCode.Equals(request.StandardLarsCode) &&
                           c.PostedInLastNumberOfDays.Equals(request.PostedInLastNumberOfDays)
                           ),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(mediatorResult);

            var controllerResult = await controller.GetVacancies(accountIdentifier, request) as ObjectResult;

            Assert.IsNotNull(controllerResult);
            controllerResult.StatusCode.Should().Be((int)HttpStatusCode.OK);
            var model = controllerResult.Value as GetVacanciesListResponse;

            Assert.IsNotNull(model);
            model.Should().BeEquivalentTo((GetVacanciesListResponse)mediatorResult);
        }
Exemple #4
0
        public async Task <IActionResult> GetVacancies([FromHeader(Name = "x-request-context-subscription-name")] string accountIdentifier, [FromQuery] SearchVacancyRequest request)
        {
            try
            {
                var account = new AccountIdentifier(accountIdentifier);

                var queryResponse = await _mediator.Send(new GetVacanciesQuery
                {
                    PageNumber                       = request.PageNumber,
                    PageSize                         = request.PageSize,
                    Ukprn                            = account.Ukprn != null && request.FilterBySubscription.HasValue && request.FilterBySubscription.Value ? account.Ukprn.Value : request.Ukprn,
                    AccountPublicHashedId            = request.FilterBySubscription.HasValue && request.FilterBySubscription.Value ? account.AccountHashedId : null,
                    AccountLegalEntityPublicHashedId = request.AccountLegalEntityPublicHashedId,
                    AccountIdentifier                = account,
                    Lat                      = request.Lat,
                    Lon                      = request.Lon,
                    Routes                   = request.Routes,
                    Sort                     = request.Sort?.ToString(),
                    DistanceInMiles          = request.DistanceInMiles,
                    NationWideOnly           = request.NationWideOnly,
                    StandardLarsCode         = request.StandardLarsCode,
                    PostedInLastNumberOfDays = request.PostedInLastNumberOfDays
                });

                return(Ok((GetVacanciesListResponse)queryResponse));
            }
            catch (SecurityException e)
            {
                _logger.LogInformation($"Unable to get vacancies - {request.AccountLegalEntityPublicHashedId} is not associated with subscription {accountIdentifier}.");
                return(new StatusCodeResult((int)HttpStatusCode.Forbidden));
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Error attempting to get vacancies");
                return(new StatusCodeResult((int)HttpStatusCode.InternalServerError));
            }
        }