public void WhenGeneratingFundingLineValuesForACollectionOfFundingLinesUsingCashCalculations_ExpectedRoundingInHierachyBasedOnFundingLineTotals() { IEnumerable <FundingLine> fundingLines = JsonConvert.DeserializeObject <IEnumerable <FundingLine> >(GetResourceString($"CalculateFunding.Generators.Funding.UnitTests.Resources.exampleFundingLines-rounding.json")); FundingValue fundingValue = _generator.GenerateFundingValue(fundingLines, 2); fundingValue.TotalValue.Should().Be(60M); IEnumerable <FundingLine> allFundingLines = fundingValue.FundingLines.Flatten(_ => _.FundingLines); FundingLine aggregateFundingLine = allFundingLines.Single(_ => _.Name == "aggregate funding line"); // This is important to check the total is rounded to sub funding lines, then the aggregate funding lines are summed. // If just the cash calculations are summed, then the aggregate would be 60.01, instead of 60.00. // This is because the cash calculations would be 5 lots of xx.001, which would equals xx.01, instead of the funding lines summed from xx.00 aggregateFundingLine.Value.Should() .Be(60M); FundingLine fundingLine1 = allFundingLines.Single(_ => _.Name == "funding line 1"); fundingLine1.Value.Should().Be(10M); FundingLine fundingLine2 = allFundingLines.Single(_ => _.Name == "funding line 2"); fundingLine2.Value.Should().Be(10M); FundingLine fundingLine3 = allFundingLines.Single(_ => _.Name == "funding line 3"); fundingLine3.Value.Should().Be(11M); FundingLine fundingLine4 = allFundingLines.Single(_ => _.Name == "funding line 4"); fundingLine4.Value.Should().Be(11M); FundingLine fundingLine5 = allFundingLines.Single(_ => _.Name == "funding line 5"); fundingLine5.Value.Should().Be(12M); FundingLine fundingLine6 = allFundingLines.Single(_ => _.Name == "funding line 6"); fundingLine6.Value.Should().Be(12M); FundingLine fundingLine7 = allFundingLines.Single(_ => _.Name == "funding line 7"); fundingLine7.Value.Should().Be(13M); FundingLine fundingLine8 = allFundingLines.Single(_ => _.Name == "funding line 8"); fundingLine8.Value.Should().Be(13M); FundingLine fundingLine9 = allFundingLines.Single(_ => _.Name == "funding line 9"); fundingLine9.Value.Should().Be(14M); FundingLine fundingLine10 = allFundingLines.Single(_ => _.Name == "funding line 10"); fundingLine10.Value.Should().Be(14M); }
public void WhenGeneratingFundingLineValuesForACollectionOfFundingLines_FundingStreamAndLineTotalsAreReturned() { IEnumerable <FundingLine> fundingLines = JsonConvert.DeserializeObject <IEnumerable <FundingLine> >(GetResourceString($"CalculateFunding.Generators.Funding.UnitTests.Resources.exampleFundingLines.json")); FundingValue fundingValue = _generator.GenerateFundingValue(fundingLines, 3); fundingValue.TotalValue .Should() .Be(10200.634M); fundingValue.FundingLines.First().Value .Should() .Be(18200.634M); //showing the configurable rounding dp as this has precision of 5 in the test json fundingValue.FundingLines.First().FundingLines.First().Value .Should() .Be(8000M); fundingValue.FundingLines.First().FundingLines.First().FundingLines.First().Value .Should() .Be(8000M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().Value .Should() .Be(3200M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.First().Value .Should() .Be(500M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.Skip(1).First().Value .Should() .Be(1200M); fundingValue.FundingLines.First().FundingLines.Skip(2).First().Value .Should() .Be(7000.634M); fundingValue.FundingLines.First().FundingLines.Skip(2).First().FundingLines.First().Value .Should() .Be(2000.001M); fundingValue.FundingLines.First().FundingLines.Skip(3).First().Value .Should() .Be(null); }
public virtual int _GetUniqueIdentifier() { var hashCode = 399326290; hashCode = hashCode * -1521134295 + (Id?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (DeliveryDate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (OrderQuantity?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (OrderDate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (InvoiceId?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (InvoiceDate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (FundedRate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (InterestRate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (TotalValue?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (FundingValue?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (PaymentId?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (PayementDate?.GetHashCode() ?? 0); hashCode = hashCode * -1521134295 + (CreditNoteNumber?.GetHashCode() ?? 0); return(hashCode); }
public void WhenGeneratingFundingLineValuesForACollectionOfFundingLines_FundingStreamAndLineTotalsAreReturned() { IEnumerable <FundingLine> fundingLines = JsonConvert.DeserializeObject <IEnumerable <FundingLine> >(GetResourceString($"CalculateFunding.Generators.Funding.UnitTests.Resources.exampleFundingLines.json")); FundingValue fundingValue = _generator.GenerateFundingValue(fundingLines); fundingValue.TotalValue .Should() .Be(8500.63M); fundingValue.FundingLines.First().Value .Should() .Be(16500.63M); fundingValue.FundingLines.First().FundingLines.First().Value .Should() .Be(8000M); fundingValue.FundingLines.First().FundingLines.First().FundingLines.First().Value .Should() .Be(8000M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().Value .Should() .Be(3500M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.First().Value .Should() .Be(500M); fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.Skip(1).First().Value .Should() .Be(1500M); fundingValue.FundingLines.First().FundingLines.Skip(2).First().Value .Should() .Be(5000.63M); fundingValue.FundingLines.First().FundingLines.Skip(3).First().Value .Should() .Be(null); }
public void WhenGeneratingFundingLineAllNullValuesForACollectionOfFundingLines_FundingStreamAndLineTotalsAreReturned() { IEnumerable <FundingLine> fundingLines = JsonConvert.DeserializeObject <IEnumerable <FundingLine> >(GetResourceString($"CalculateFunding.Generators.Funding.UnitTests.Resources.exampleFundingLinesWithAllNullCalculations.json")); FundingValue fundingValue = _generator.GenerateFundingValue(fundingLines); // "funding line 4" > "calculation 5" = 10 fundingValue.TotalValue .Should() .Be(null); fundingValue.FundingLines.First().Value .Should() .Be(null); // "funding line 2" fundingValue.FundingLines.First().FundingLines.First().Value .Should() .Be(null); // "funding line 3" -> mix of null and 0 in values = 0 fundingValue.FundingLines.First().FundingLines.Skip(1).First().Value .Should() .Be(null); // "funding line 7" fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.First().Value .Should() .Be(null); // "funding line 8" -> null + 0 = 0 fundingValue.FundingLines.First().FundingLines.Skip(1).First().FundingLines.Skip(1).First().Value .Should() .Be(null); // "calculation 5" fundingValue.FundingLines.First().FundingLines.Skip(2).First().Value .Should() .Be(null); }