Пример #1
0
        public async Task <IActionResult> GetMulitpleCalculationVersions([FromQuery] string calculationId,
                                                                         [FromQuery(Name = "versions[]")] int[] versions)
        {
            Guard.IsNullOrWhiteSpace(calculationId, nameof(calculationId));
            Guard.ArgumentNotNull(versions, nameof(versions));


            ApiResponse <IEnumerable <CalculationVersion> > response = await _calcClient.GetMultipleVersionsByCalculationId(versions, calculationId);

            if (response.StatusCode == HttpStatusCode.OK)
            {
                return(Ok(response.Content));
            }

            if (response.StatusCode == HttpStatusCode.BadGateway)
            {
                return(BadRequest());
            }

            return(new StatusCodeResult(500));
        }
        public async Task OnGet_WhencalculationVersionsListReturned()
        {
            // Arrange
            ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>();
            ISpecsApiClient        specsClient = Substitute.For <ISpecsApiClient>();
            IMapper mapper = MappingHelper.CreateFrontEndMapper();

            ILogger logger = Substitute.For <ILogger>();

            Calculation expectedCalculation = new Calculation()
            {
                CalculationSpecification = new Reference("1", "Calc spec"),
                Id   = "2",
                Name = "Specs Calculation",
                FundingPeriodName = "2018/19",
                SpecificationId   = "1",
                PublishStatus     = PublishStatus.Draft,
                LastModifiedBy    = new Reference("1", "Matt Vallily"),
                SourceCode        = "Public Function GetProductResult(rid As String) As Decimal 'change to As String if text product  Dim result As Decimal = 0 'change to As String if text product     Dim P04_Learners As Decimal = products.1819_Additional_Funding.P04_Learner_Numbers     Dim P03_Rate As Decimal = products.1819_Additional_Funding.P03_Maths_Top_Up_Rate     result = P03_Rate * P04_learners     Return result End Function",
                Version           = 4
            };

            IEnumerable <int> versions = new List <int> {
                1, 2
            };
            string calculationId = "1";

            Clients.SpecsClient.Models.CalculationCurrentVersion specCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion()
            {
                Id             = "1",
                Name           = "Test spec",
                Description    = "Test description",
                AllocationLine = new Reference("1", "Test Allocation")
            };

            // build two versions for feeding the left and right panel
            CalculationVersion calver1 = new CalculationVersion()
            {
                DecimalPlaces = 2,
                Version       = "1",
                Date          = new DateTime(2018, 1, 1, 10, 23, 34),
                Author        = new Reference("1", "Clifford"),
                Status        = "Draft",
                SourceCode    = "Test"
            };

            CalculationVersion calver2 = new CalculationVersion()
            {
                DecimalPlaces = 2,
                Version       = "2",
                Date          = new DateTime(2018, 1, 1, 10, 23, 34),
                Author        = new Reference("2", "Clifford"),
                Status        = "Draft",
                SourceCode    = "Test"
            };

            IEnumerable <CalculationVersion> calcVerArray = new List <CalculationVersion> {
                calver1, calver2
            };

            calcVerArray.AsEnumerable();
            calcsClient
            .GetCalculationById(calculationId)
            .Returns(new ApiResponse <Clients.CalcsClient.Models.Calculation>(System.Net.HttpStatusCode.OK, expectedCalculation));

            specsClient
            .GetCalculationById("1", calculationId)
            .Returns(new ApiResponse <CalculateFunding.Frontend.Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specCalculation));  // CalculateFunding.Frontend.Clients.SpecsClient.Models

            calcsClient
            .GetMultipleVersionsByCalculationId(versions, calculationId)
            .Returns(new ApiResponse <IEnumerable <CalculationVersion> >(System.Net.HttpStatusCode.OK, calcVerArray));

            DiffCalculationModel diffCalcPageModel = new DiffCalculationModel(specsClient, calcsClient, mapper);

            // Act
            IActionResult result = await diffCalcPageModel.OnGet(versions, calculationId);

            // Assert
            result.Should().NotBeNull();

            diffCalcPageModel.RightCalculationDiffModel.Version.Should().Be(calver2.Version);
            diffCalcPageModel.LeftCalcualationDiffModel.Version.Should().Be(calver1.Version);
        }
Пример #3
0
        public async Task <IActionResult> OnGet(IEnumerable <int> versions, string calculationId)
        {
            if (string.IsNullOrWhiteSpace(calculationId))
            {
                return(new BadRequestObjectResult(ErrorMessages.CalculationIdNullOrEmpty));
            }

            Guard.ArgumentNotNull(versions, nameof(versions));
            if (versions.Count() != 2)
            {
                return(new BadRequestObjectResult("Two versions not requested"));
            }

            ApiResponse <Calculation> calculationResponse = await _calcClient.GetCalculationById(calculationId);

            if (calculationResponse == null || calculationResponse.StatusCode == HttpStatusCode.NotFound)
            {
                return(new NotFoundObjectResult(ErrorMessages.CalculationNotFoundInCalcsService));
            }

            Calculation calculation = calculationResponse.Content;

            CalculationName       = calculation.Name;
            CalculationPeriodName = calculation.FundingPeriodName;
            CalculationId         = calculation.Id;

            ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion> specCalculation = await _specsClient.GetCalculationById(calculation.SpecificationId, calculation.CalculationSpecification.Id);

            if (specCalculation == null || specCalculation.StatusCode == HttpStatusCode.NotFound)
            {
                return(new NotFoundObjectResult(ErrorMessages.CalculationNotFoundInSpecsService));
            }

            CalculationDescription = specCalculation.Content.Description;

            ApiResponse <IEnumerable <CalculationVersion> > calculationVersionsResponse = await _calcClient.GetMultipleVersionsByCalculationId(versions, calculationId);

            if (calculationVersionsResponse == null || calculationVersionsResponse.StatusCode != HttpStatusCode.OK)
            {
                throw new InvalidOperationException($"Unable to retreive selected versions of calculations. Status Code = {calculationVersionsResponse?.StatusCode}");
            }

            if (calculationVersionsResponse.StatusCode == HttpStatusCode.OK)
            {
                IEnumerable <CalculationVersion> calculationVersions = calculationVersionsResponse.Content;

                if (calculationVersions.IsNullOrEmpty())
                {
                    throw new InvalidOperationException($"Unable to retrieve calculationVersion model from the response. Calculation version value = {calculationVersions.ToString()}");
                }
                else
                {
                    if (calculationVersions.Count() < 2)
                    {
                        throw new InvalidOperationException($"There are less than two previous versions available. Calculation version count ={calculationVersions.Count()}");
                    }

                    List <CalculationVersion> calculationVersionsList = calculationVersions.OrderBy(c => c.Version).ToList();

                    LeftCalcualationDiffModel = _mapper.Map <CalculationVersionViewModel>(calculationVersionsList[0]);
                    RightCalculationDiffModel = _mapper.Map <CalculationVersionViewModel>(calculationVersionsList[1]);
                }
            }

            return(Page());
        }