public async Task <IActionResult> SaveTimetable([FromBody] ReleaseTimetableViewModel viewModel) { if (!await _authorizationHelper.DoesUserHavePermission( User, viewModel.SpecificationId, SpecificationActionTypes.CanEditSpecification)) { return(new ForbidResult()); } SpecificationPublishDateModel publishData = new SpecificationPublishDateModel { EarliestPaymentAvailableDate = viewModel.FundingDate, ExternalPublicationDate = viewModel.StatementDate }; HttpStatusCode publish = await _specificationsApiClient.SetPublishDates(viewModel.SpecificationId, publishData); if (publish == HttpStatusCode.OK) { return(new OkObjectResult(publishData)); } if (publish == HttpStatusCode.BadRequest) { return(new BadRequestObjectResult( Content("There was a problem with the data submitted. Please check and try again."))); } return(new NotFoundObjectResult(Content("Error. Not Found."))); }
public async Task <HttpStatusCode> SetPublishDates(string specificationId, SpecificationPublishDateModel specificationPublishDateModel) { Guard.IsNullOrWhiteSpace(specificationId, nameof(specificationId)); Guard.ArgumentNotNull(specificationPublishDateModel, nameof(specificationPublishDateModel)); string url = $"{UrlRoot}/{specificationId}/publishdates"; return(await PutAsync(url, specificationPublishDateModel)); }
public async Task SetPublishDates() { string id = NewRandomString(); SpecificationPublishDateModel model = new SpecificationPublishDateModel(); await AssertPutRequest($"{id}/publishdates", model, HttpStatusCode.OK, () => _client.SetPublishDates(id, model)); }
public void SetSpecificationPublishDateModel(string specificationId, PublishedFundingDates publishedFundingDates) { Guard.IsNullOrWhiteSpace(specificationId, nameof(specificationId)); SpecificationPublishDateModel specificationPublishDateModel = new SpecificationPublishDateModel { EarliestPaymentAvailableDate = publishedFundingDates.EarliestPaymentAvailableDate, ExternalPublicationDate = publishedFundingDates.ExternalPublicationDate }; _specificationPublishDateModels[specificationId] = specificationPublishDateModel; }
public async Task SetPublishDates_UpdateSpecFails_Returns412WithErrorMessage() { //Arrange ILogger logger = CreateLogger(); string specificationId = "test"; Specification specification = new Specification { Current = new SpecificationVersion { ExternalPublicationDate = DateTimeOffset.Now.Date, EarliestPaymentAvailableDate = DateTimeOffset.Now.Date } }; SpecificationPublishDateModel specificationPublishDateModel = new SpecificationPublishDateModel() { EarliestPaymentAvailableDate = DateTimeOffset.Now.Date, ExternalPublicationDate = DateTimeOffset.Now.Date }; IVersionRepository <SpecificationVersion> specificationVersionRepository = CreateSpecificationVersionRepository(); specificationsRepository .GetSpecificationById(specificationId) .Returns(specification); specificationVersionRepository.CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(_ => (SpecificationVersion)_[0]); specificationsRepository .UpdateSpecification(Arg.Any <Specification>()) .Returns(HttpStatusCode.BadRequest); SpecificationsService service = CreateService( logs: logger, specificationsRepository: specificationsRepository, specificationVersionRepository: specificationVersionRepository, policiesApiClient: policiesApiClient); // Act IActionResult result = await service.SetPublishDates(specificationId, specificationPublishDateModel); //Assert result .Should() .BeOfType <InternalServerErrorResult>() .Which .Value .Should() .Be($"Failed to update specification for id: test with ExternalPublishDate {specificationPublishDateModel.ExternalPublicationDate} and EarliestPaymentAvailableDate {specificationPublishDateModel.EarliestPaymentAvailableDate}"); }
public async Task SaveTimetable_Returns_OK_Result_Given_User_Has_Required_Permission() { SetupAuthorizedUser(SpecificationActionTypes.CanEditSpecification); _specificationsApiClient.SetPublishDates(Arg.Any <string>(), Arg.Any <SpecificationPublishDateModel>()) .Returns(HttpStatusCode.OK); DateTime fundingDate = DateTime.Now.AddDays(-1); DateTime statementDate = DateTime.Now.AddMonths(-1); ReleaseTimetableViewModel releaseTimetableViewModel = new ReleaseTimetableViewModel { SpecificationId = "XYZ", FundingDate = fundingDate, StatementDate = statementDate }; IActionResult result = await _publishController.SaveTimetable(releaseTimetableViewModel); result.Should().BeAssignableTo <OkObjectResult>(); SpecificationPublishDateModel specificationPublishDateModelResult = result.As <OkObjectResult>().Value.As <SpecificationPublishDateModel>(); specificationPublishDateModelResult.EarliestPaymentAvailableDate.Should().Be(fundingDate); specificationPublishDateModelResult.ExternalPublicationDate.Should().Be(statementDate); }
public async Task SetPublishDates_SpecDoesNotExistsInSystem_Returns412WithErrorMessage() { //Arrange ILogger logger = CreateLogger(); string specificationId = "test"; SpecificationPublishDateModel specificationPublishDateModel = new SpecificationPublishDateModel() { EarliestPaymentAvailableDate = DateTimeOffset.Now.Date, ExternalPublicationDate = DateTimeOffset.Now.Date }; string expectedErrorMessage = $"No specification ID {specificationId} were returned from the repository, result came back null"; specificationsRepository .GetSpecificationById(specificationId) .Returns <Specification>(x => null); SpecificationsService service = CreateService(logs: logger, specificationsRepository: specificationsRepository); // Act IActionResult result = await service.SetPublishDates(specificationId, specificationPublishDateModel); //Assert result .Should() .BeOfType <PreconditionFailedResult>() .Which .Value .Should() .Be(expectedErrorMessage); logger .Received(1) .Error(Arg.Is(expectedErrorMessage)); }
public async Task GetPublishDates_ValidParametersPassed_ReturnsOK() { //Arrange ILogger logger = CreateLogger(); string specificationId = "testSpecification"; Specification specification = new Specification { Current = new SpecificationVersion { ExternalPublicationDate = DateTimeOffset.Now.Date, EarliestPaymentAvailableDate = DateTimeOffset.Now.Date } }; ISpecificationsRepository specificationsRepository = CreateSpecificationsRepository(); IPoliciesApiClient policiesApiClient = CreatePoliciesApiClient(); IVersionRepository <SpecificationVersion> specificationVersionRepository = CreateSpecificationVersionRepository(); specificationsRepository .GetSpecificationById(specificationId) .Returns(specification); SpecificationVersion clonedSpecificationVersion = null; specificationVersionRepository.CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(_ => (SpecificationVersion)_[0]) .AndDoes(_ => clonedSpecificationVersion = _.ArgAt <SpecificationVersion>(0)); SpecificationsService service = CreateService( logs: logger, specificationsRepository: specificationsRepository, specificationVersionRepository: specificationVersionRepository, policiesApiClient: policiesApiClient); // Act IActionResult result = await service.GetPublishDates(specificationId); //Assert result .Should() .BeOfType <OkObjectResult>(); var objContent = ((OkObjectResult)result); objContent .Should() .NotBeNull(); SpecificationPublishDateModel publishDates = objContent.Value as SpecificationPublishDateModel; publishDates.EarliestPaymentAvailableDate .Should() .Equals(specification.Current.EarliestPaymentAvailableDate); publishDates.ExternalPublicationDate .Should() .Equals(specification.Current.ExternalPublicationDate); }
public async Task SetPublishDates_ValidParametersPassed_ReturnsOKAndSetsPublishedDatesOnSpec() { //Arrange ILogger logger = CreateLogger(); string specificationId = "test"; DateTimeOffset?earliestPublicationDateInput = NewRandomDateTimeOffset(); DateTimeOffset?earliestPaymentDateInput = NewRandomDateTimeOffset(); Specification specification = new Specification { Current = new SpecificationVersion { ExternalPublicationDate = DateTimeOffset.Now, EarliestPaymentAvailableDate = DateTimeOffset.Now } }; SpecificationPublishDateModel specificationPublishDateModel = new SpecificationPublishDateModel() { EarliestPaymentAvailableDate = earliestPaymentDateInput, ExternalPublicationDate = earliestPublicationDateInput }; IVersionRepository <SpecificationVersion> specificationVersionRepository = CreateSpecificationVersionRepository(); specificationsRepository .GetSpecificationById(specificationId) .Returns(specification); SpecificationVersion clonedSpecificationVersion = null; specificationVersionRepository.CreateVersion(Arg.Any <SpecificationVersion>(), Arg.Any <SpecificationVersion>()) .Returns(_ => (SpecificationVersion)_[0]) .AndDoes(_ => clonedSpecificationVersion = _.ArgAt <SpecificationVersion>(0)); specificationsRepository .UpdateSpecification(Arg.Any <Specification>()) .Returns(HttpStatusCode.OK); SpecificationsService service = CreateService( logs: logger, specificationsRepository: specificationsRepository, specificationVersionRepository: specificationVersionRepository, policiesApiClient: policiesApiClient); // Act IActionResult result = await service.SetPublishDates(specificationId, specificationPublishDateModel); //Assert result .Should() .BeOfType <OkObjectResult>() .Which .Value .Should() .Be(HttpStatusCode.OK); specificationsRepository .Received(1); (clonedSpecificationVersion? .ExternalPublicationDate) .Should() .Be(earliestPublicationDateInput.TrimToTheMinute()); (clonedSpecificationVersion? .EarliestPaymentAvailableDate) .Should() .Be(earliestPaymentDateInput.TrimToTheMinute()); }
public Task <HttpStatusCode> SetPublishDates(string specificationId, SpecificationPublishDateModel specificationPublishDateModel) { throw new NotImplementedException(); }
public async Task <IActionResult> SetPublishDates([FromRoute] string specificationId, [FromBody] SpecificationPublishDateModel specificationPublishDateModel) { return(await _specService.SetPublishDates(specificationId, specificationPublishDateModel)); }