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.")));
        }
Esempio n. 2
0
        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();
 }
Esempio n. 11
0
 public async Task <IActionResult> SetPublishDates([FromRoute] string specificationId,
                                                   [FromBody] SpecificationPublishDateModel specificationPublishDateModel)
 {
     return(await _specService.SetPublishDates(specificationId, specificationPublishDateModel));
 }