예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #5
0
        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);
        }