예제 #1
0
        public Task <HttpStatusCode> UpdateSpecification(string specificationId, EditSpecificationModel specification)
        {
            Guard.IsNullOrWhiteSpace(specificationId, nameof(specificationId));
            Guard.ArgumentNotNull(specification, nameof(specification));

            return(PutAsync($"specification-edit?specificationId={specificationId}", specification));
        }
예제 #2
0
        public async Task <IActionResult> OnPostAsync(string specificationId = null, [FromQuery] EditSpecificationRedirectAction returnPage = EditSpecificationRedirectAction.ManagePolicies)
        {
            IsAuthorizedToEdit = await _authorizationHelper.DoesUserHavePermission(User, EditSpecificationViewModel, SpecificationActionTypes.CanEditSpecification);

            if (!IsAuthorizedToEdit)
            {
                return(new ForbidResult());
            }

            if (!string.IsNullOrWhiteSpace(EditSpecificationViewModel.Name) && EditSpecificationViewModel.Name != EditSpecificationViewModel.OriginalSpecificationName)
            {
                ApiResponse <Specification> existingSpecificationResponse = await this._specsClient.GetSpecificationByName(EditSpecificationViewModel.Name);

                if (existingSpecificationResponse.StatusCode != HttpStatusCode.NotFound)
                {
                    this.ModelState.AddModelError($"{nameof(EditSpecificationViewModel)}.{nameof(EditSpecificationViewModel.Name)}", ValidationMessages.SpecificationAlreadyExists);
                }
            }

            if (EditSpecificationViewModel.IsSelectedForFunding)
            {
                ModelState.Remove($"{nameof(EditSpecificationViewModel)}.{nameof(EditSpecificationViewModel.FundingPeriodId)}");
                ModelState.Remove($"{nameof(EditSpecificationViewModel)}.{nameof(EditSpecificationViewModel.FundingStreamIds)}");

                EditSpecificationViewModel.FundingPeriodId  = EditSpecificationViewModel.OriginalFundingPeriodId;
                EditSpecificationViewModel.FundingStreamIds = EditSpecificationViewModel.OriginalFundingStreams.Split(",").ToArraySafe();
            }

            if (!ModelState.IsValid)
            {
                await TaskHelper.WhenAllAndThrow(PopulateFundingPeriods(EditSpecificationViewModel.FundingPeriodId), PopulateFundingStreams(EditSpecificationViewModel.FundingStreamIds));

                return(Page());
            }

            EditSpecificationModel specification = _mapper.Map <EditSpecificationModel>(EditSpecificationViewModel);

            HttpStatusCode editResult = await _specsClient.UpdateSpecification(specificationId, specification);

            if (editResult == HttpStatusCode.OK)
            {
                if (returnPage == EditSpecificationRedirectAction.ManagePolicies)
                {
                    return(Redirect($"/specs/policies/{specificationId}?operationType=SpecificationUpdated&operationId={specificationId}"));
                }
                else
                {
                    return(Redirect($"/specs?operationType=SpecificationUpdated&operationId={specificationId}"));
                }
            }
            else
            {
                return(new InternalServerErrorResult($"Unable to update specification. API returned '{editResult}'"));
            }
        }
예제 #3
0
        public async Task OnPostAsync_GivenViewModelIsValidAndRedirectToSpecificationsActionProvided_ThenSpecificationIsEditedAndReturnsRedirectToSpecificationsPage()
        {
            //Arrange
            ApiResponse <Specification> existingSpecificationResponse = new ApiResponse <Specification>(HttpStatusCode.NotFound);

            EditSpecificationModel editModel = new EditSpecificationModel();

            EditSpecificationViewModel viewModel = CreateEditSpecificationViewModel();

            ISpecsApiClient apiClient = CreateApiClient();

            apiClient
            .GetSpecificationByName(Arg.Is(specName))
            .Returns(existingSpecificationResponse);

            apiClient
            .UpdateSpecification(Arg.Is(specificationId), Arg.Any <EditSpecificationModel>())
            .Returns(HttpStatusCode.OK);

            IMapper mapper = CreateMapper();

            mapper
            .Map <EditSpecificationModel>(Arg.Is(viewModel))
            .Returns(editModel);

            EditSpecificationPageModel pageModel = CreatePageModel(apiClient, mapper);

            pageModel.EditSpecificationViewModel = viewModel;

            pageModel.PageContext = new PageContext();

            //Act
            IActionResult result = await pageModel.OnPostAsync(specificationId, EditSpecificationRedirectAction.Specifications);

            //Assert
            result
            .Should()
            .BeOfType <RedirectResult>();

            RedirectResult redirectResult = result as RedirectResult;

            redirectResult
            .Url
            .Should()
            .Be("/specs?operationType=SpecificationUpdated&operationId=spec-id");

            await
            apiClient
            .Received(1)
            .UpdateSpecification(Arg.Is(specificationId), Arg.Is(editModel));
        }
예제 #4
0
        public async Task OnPostAsync_GivenViewModelIsValidAndUpdateSpecificationCallFails_ThenInternalServerErrorReturned()
        {
            // Arrange
            ApiResponse <Specification> existingSpecificationResponse = new ApiResponse <Specification>(HttpStatusCode.NotFound);

            EditSpecificationModel editModel = new EditSpecificationModel();

            EditSpecificationViewModel viewModel = CreateEditSpecificationViewModel();

            ISpecsApiClient apiClient = CreateApiClient();

            apiClient
            .GetSpecificationByName(Arg.Is(specName))
            .Returns(existingSpecificationResponse);

            apiClient
            .UpdateSpecification(Arg.Is(specificationId), Arg.Any <EditSpecificationModel>())
            .Returns(HttpStatusCode.InternalServerError);

            IMapper mapper = CreateMapper();

            mapper
            .Map <EditSpecificationModel>(Arg.Is(viewModel))
            .Returns(editModel);

            EditSpecificationPageModel pageModel = CreatePageModel(apiClient, mapper);

            pageModel.EditSpecificationViewModel = viewModel;

            pageModel.PageContext = new PageContext();

            // Act
            IActionResult result = await pageModel.OnPostAsync(specificationId, EditSpecificationRedirectAction.Specifications);

            //Assert
            result
            .Should()
            .BeOfType <InternalServerErrorResult>()
            .Which
            .Value
            .Should()
            .Be("Unable to update specification. API returned 'InternalServerError'");

            await
            apiClient
            .Received(1)
            .UpdateSpecification(Arg.Is(specificationId), Arg.Is(editModel));
        }
        public async Task <IActionResult> UpdateSpecification([FromBody] EditSpecificationModel viewModel, [FromRoute] string specificationId)
        {
            ValidatedApiResponse <SpecificationSummary> result = await _specificationsApiClient.UpdateSpecification(specificationId, viewModel);

            if (result.IsBadRequest(out BadRequestObjectResult badRequest))
            {
                return(badRequest);
            }

            if (result.StatusCode == HttpStatusCode.OK)
            {
                return(new OkResult());
            }

            return(new BadRequestResult());
        }
예제 #6
0
        public async Task <ValidatedApiResponse <SpecificationSummary> > UpdateSpecification(string specificationId, EditSpecificationModel specification)
        {
            Guard.IsNullOrWhiteSpace(specificationId, nameof(specificationId));
            Guard.ArgumentNotNull(specification, nameof(specification));

            return(await ValidatedPutAsync <SpecificationSummary, EditSpecificationModel>($"{UrlRoot}/specification-edit?specificationId={specificationId}", specification));
        }
 public Task <ValidatedApiResponse <SpecificationSummary> > UpdateSpecification(string specificationId, EditSpecificationModel specification)
 {
     throw new NotImplementedException();
 }