public async Task OnGet_WhenSpecCalculationDoesntExistThenErrorReturned() { // 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 = "3", 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") }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Clients.CalcsClient.Models.Calculation>(System.Net.HttpStatusCode.OK, expectedCalculation)); specsClient .GetCalculationById(calculationId, "3") .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.NotFound, specCalculation)); DiffCalculationModel diffCalcModel = new DiffCalculationModel(specsClient, calcsClient, mapper); // Act IActionResult result = await diffCalcModel.OnGet(versions, calculationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <NotFoundObjectResult>(); NotFoundObjectResult typeResult = result as NotFoundObjectResult; typeResult.Value.Should().Be("Check the specification you entered - one or more of the specifications you entered aren't working"); }
public async Task OnGet_WhenCalculationExistdCalculationTypeIsFunding_ThenCalculationDisplayTypeIsFunding() { // Arrange ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); string calculationId = "5"; Calculation calcsCalculation = new Calculation() { Id = calculationId, CalculationSpecification = new Reference(calculationId, "Test Calculation Specification"), SpecificationId = "54", SourceCode = "Test Source Code", CalculationType = Clients.SpecsClient.Models.CalculationSpecificationType.Funding }; Clients.SpecsClient.Models.CalculationCurrentVersion specsCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = calculationId, Name = "Specs Calculation", Description = "Spec Description", }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, calcsCalculation)); specsClient .GetCalculationById(calcsCalculation.SpecificationId, calculationId) .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specsCalculation)); EditCalculationPageModel pageModel = CreatePageModel(specsClient: specsClient, calcsClient: calcsClient, mapper: mapper); // Act IActionResult result = await pageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <PageResult>(); pageModel.Calculation.Should().NotBeNull(); pageModel.Calculation.Name.Should().Be(calcsCalculation.Name); pageModel.Calculation.Description.Should().Be(specsCalculation.Description); pageModel.SpecificationId.Should().Be(calcsCalculation.SpecificationId); pageModel.EditModel.SourceCode.Should().Be(calcsCalculation.SourceCode); pageModel.Calculation.CalculationType.Should().Be(CalculationSpecificationTypeViewModel.Funding); }
public async Task OnGet_WhenSpecificationDoesntExist_ThenErrorReturned() { ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string calculationId = "1"; Calculation expectedCalculation = new Calculation() { Id = "2", Name = "Specs Calculation", FundingPeriodName = "2018/19", SpecificationId = "3", 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 }; calcsClient .GetCalculationById("2") .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, expectedCalculation)); Clients.SpecsClient.Models.CalculationCurrentVersion specCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = "1", Name = "Test spec", Description = "Test description", AllocationLine = new Reference("1", "Test Allocation") }; specsClient .GetCalculationById(calculationId, "3") .Returns(new ApiResponse <CalculateFunding.Frontend.Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.NotFound, specCalculation)); ComparePageModel compPageModel = new ComparePageModel(specsClient, calcsClient, mapper); // Act IActionResult result = await compPageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <StatusCodeResult>(); Assert.IsInstanceOfType(result, typeof(StatusCodeResult)); }
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); }
public async Task OnGet_WhenCalculationHasManyVersions_ThenReturnsVersionsInDescendingOrder() { // Arrange ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string calculationId = "1"; Calculation expectedCalculation = new Calculation() { Id = "1", Name = "Specs Calculation", FundingPeriodName = "2018/19", SpecificationId = "3", 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 = 10, CalculationSpecification = new Reference("1", "Test Spec") }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, expectedCalculation)); Clients.SpecsClient.Models.CalculationCurrentVersion specCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = "1", Name = "Test spec", Description = "Test description", AllocationLine = new Reference("1", "Test Allocation") }; specsClient .GetCalculationById(expectedCalculation.SpecificationId, calculationId) .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specCalculation)); List <CalculationVersion> calculationVersions = new List <CalculationVersion>(); DateTime startCalcTime = DateTime.UtcNow.AddDays(-1); for (int i = 1; i < 11; i++) { calculationVersions.Add(new CalculationVersion() { Status = "Draft", Version = i.ToString(), DecimalPlaces = 4, Date = startCalcTime.AddHours(i), Author = 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", }); } calcsClient .GetAllVersionsByCalculationId(calculationId) .Returns(new ApiResponse <IEnumerable <CalculationVersion> >(System.Net.HttpStatusCode.OK, calculationVersions)); ComparePageModel comparePageModel = new ComparePageModel(specsClient, calcsClient, mapper); // Act IActionResult result = await comparePageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); comparePageModel.Calculations.Should().HaveCount(10); comparePageModel.Calculations.Select(f => int.Parse(f.Version)).Should().BeInDescendingOrder(); }
public async Task OnGet_WhenCalculationExists_ThenCalculationReturned() { // Arrange ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); ILogger logger = Substitute.For <ILogger>(); string calculationId = "1"; Calculation expectedCalculation = new Calculation() { Id = "1", Name = "Specs Calculation", FundingPeriodName = "2018/19", SpecificationId = "3", 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, CalculationSpecification = new Reference("1", "Test Spec") }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, expectedCalculation)); Clients.SpecsClient.Models.CalculationCurrentVersion specCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = "1", Name = "Test spec", Description = "Test description", AllocationLine = new Reference("1", "Test Allocation") }; specsClient .GetCalculationById(expectedCalculation.SpecificationId, calculationId) .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specCalculation)); CalculationVersion calcsVersion1 = new CalculationVersion() { Status = "Draft", Version = "1", DecimalPlaces = 4, Date = new DateTime(2018, 1, 1, 12, 34, 45, 03), Author = 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", }; CalculationVersion calcsVersion2 = new CalculationVersion() { Status = "Draft", Version = "2", DecimalPlaces = 4, Date = new DateTime(2018, 1, 2, 12, 34, 45, 03), Author = 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", }; CalculationVersion calcsVersion3 = new CalculationVersion() { Status = "Draft", Version = "3", DecimalPlaces = 4, Date = new DateTime(2018, 1, 3, 12, 34, 45, 03), Author = 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", }; IEnumerable <CalculationVersion> calculationVersion = new List <CalculationVersion>() { calcsVersion1, calcsVersion2, calcsVersion3 }; calcsClient .GetAllVersionsByCalculationId(calculationId) .Returns(new ApiResponse <IEnumerable <CalculationVersion> >(System.Net.HttpStatusCode.OK, calculationVersion)); ComparePageModel comparePageModel = new ComparePageModel(specsClient, calcsClient, mapper); // Act IActionResult result = await comparePageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); comparePageModel.Calculation.Should().NotBeNull(); comparePageModel.Calculation.Description.Should().Be(specCalculation.Description); comparePageModel.Calculation.Name.Should().Be(expectedCalculation.Name); comparePageModel.Calculations.Select(f => f.Version).Should().BeInDescendingOrder(); comparePageModel.Calculations.Should().HaveCount(3); ViewModels.Calculations.CalculationVersionViewModel firstCalculation = comparePageModel.Calculations.First(); firstCalculation.Version.Should().Be(calcsVersion3.Version); }
public async Task OnGet_WhenCalculationExistsThenCalculationReturned() { // Arrange ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); const string calculationId = "5"; const string specificationId = "specId"; const string specificationName = "Spec Name"; Calculation calcsCalculation = new Calculation() { Id = calculationId, CalculationSpecification = new Reference(calculationId, "Test Calculation Specification"), SpecificationId = specificationId, SourceCode = "Test Source Code" }; Clients.SpecsClient.Models.CalculationCurrentVersion specsCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = calculationId, Name = "Specs Calculation", Description = "Spec Description", }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, calcsCalculation)); specsClient .GetCalculationById(calcsCalculation.SpecificationId, calculationId) .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specsCalculation)); Clients.SpecsClient.Models.SpecificationSummary specificationSummary = new Clients.SpecsClient.Models.SpecificationSummary() { Id = specificationId, Name = specificationName }; specsClient .GetSpecificationSummary(Arg.Is(specificationId)) .Returns(new ApiResponse <Clients.SpecsClient.Models.SpecificationSummary>(System.Net.HttpStatusCode.OK, specificationSummary)); EditCalculationPageModel pageModel = CreatePageModel(specsClient: specsClient, calcsClient: calcsClient, mapper: mapper); // Act IActionResult result = await pageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <PageResult>(); pageModel.Calculation.Should().NotBeNull(); pageModel.Calculation.Name.Should().Be(calcsCalculation.Name); pageModel.Calculation.Description.Should().Be(specsCalculation.Description); pageModel.SpecificationId.Should().Be(calcsCalculation.SpecificationId); pageModel.EditModel.SourceCode.Should().Be(calcsCalculation.SourceCode); pageModel.SpecificationName.Should().Be(specificationName); await calcsClient .Received(1) .GetCalculationById(Arg.Is(calculationId)); await specsClient .Received(1) .GetSpecificationSummary(Arg.Is(specificationId)); await specsClient .Received(1) .GetCalculationById(Arg.Is(specificationId), Arg.Is(calculationId)); }
public async Task OnGet_WhenCalculationExistdCalculationTypeIsFundingAndShouldNewEditCalculationPageBeEnabledIsTurnedOnAndResultFound_ThenCalculationDisplayTypeIsFundingSetsHasCalculationResultToTrue() { // Arrange ICalculationsApiClient calcsClient = Substitute.For <ICalculationsApiClient>(); ISpecsApiClient specsClient = Substitute.For <ISpecsApiClient>(); IMapper mapper = MappingHelper.CreateFrontEndMapper(); IFeatureToggle featureToggle = CreateFeatureToggle(); featureToggle .IsNewEditCalculationPageEnabled() .Returns(true); string calculationId = "5"; Calculation calcsCalculation = new Calculation() { Id = calculationId, CalculationSpecification = new Reference(calculationId, "Test Calculation Specification"), SpecificationId = "54", SourceCode = "Test Source Code", CalculationType = Clients.SpecsClient.Models.CalculationSpecificationType.Funding }; Clients.SpecsClient.Models.CalculationCurrentVersion specsCalculation = new Clients.SpecsClient.Models.CalculationCurrentVersion() { Id = calculationId, Name = "Specs Calculation", Description = "Spec Description", }; calcsClient .GetCalculationById(calculationId) .Returns(new ApiResponse <Calculation>(System.Net.HttpStatusCode.OK, calcsCalculation)); specsClient .GetCalculationById(calcsCalculation.SpecificationId, calculationId) .Returns(new ApiResponse <Clients.SpecsClient.Models.CalculationCurrentVersion>(System.Net.HttpStatusCode.OK, specsCalculation)); ApiResponse <bool> hasCalcsResponse = new ApiResponse <bool>(HttpStatusCode.OK, true); IResultsApiClient resultsApiClient = CreateResultsApiClient(); resultsApiClient .HasCalculationResults(Arg.Is(calcsCalculation.Id)) .Returns(hasCalcsResponse); EditCalculationPageModel pageModel = CreatePageModel(specsClient: specsClient, calcsClient: calcsClient, mapper: mapper, features: featureToggle, resultsApiClient: resultsApiClient); // Act IActionResult result = await pageModel.OnGet(calculationId); // Assert result.Should().NotBeNull(); result.Should().BeOfType <PageResult>(); pageModel.Calculation.Should().NotBeNull(); pageModel.Calculation.Name.Should().Be(calcsCalculation.Name); pageModel.Calculation.Description.Should().Be(specsCalculation.Description); pageModel.SpecificationId.Should().Be(calcsCalculation.SpecificationId); pageModel.EditModel.SourceCode.Should().Be(calcsCalculation.SourceCode); pageModel.Calculation.CalculationType.Should().Be(CalculationSpecificationTypeViewModel.Funding); pageModel.CalculationHasResults.Should().BeTrue(); string shouldShowGreyBackground = pageModel.ViewData["GreyBackground"].ToString(); shouldShowGreyBackground .Should() .Be("True"); }