public async Task ApproveFunding_Returns_OK_Result_Given_User_Has_Required_Permission()
        {
            SetupAuthorizedUser(SpecificationActionTypes.CanApproveFunding);

            _publishingApiClient.ApproveFundingForSpecification(Arg.Any <string>()).Returns(_validatedApiResponse);

            IActionResult result = await _publishController.ApproveFunding(ValidSpecificationId);

            result.Should().BeAssignableTo <OkObjectResult>();
        }
        public async Task <IActionResult> ApproveFunding(string specificationId)
        {
            if (!await _authorizationHelper.DoesUserHavePermission(
                    User,
                    specificationId,
                    SpecificationActionTypes.CanApproveFunding))
            {
                return(new ForbidResult());
            }

            ValidatedApiResponse <JobCreationResponse> response =
                await _publishingApiClient.ApproveFundingForSpecification(specificationId);

            if (response.StatusCode == HttpStatusCode.PreconditionFailed)
            {
                return(new PreconditionFailedResult("Preconditions for this approval have not been met."));
            }

            return(response.Handle("Release Funding",
                                   onSuccess: x => x.Content.JobId != null ? (IActionResult)Ok(new { jobId = x.Content.JobId }) : BadRequest()));
        }