public void ComputeNpvCommand_ShouldComputeMultipleNpv()
        {
            var multipleRateLevels = new List <double> {
                0.12, 0.15
            };

            discountRateLimiter.GetRateLevels(Arg.Any <double>(), Arg.Any <double>(), Arg.Any <double>())
            .Returns(multipleRateLevels);
            var npvParameter = new NpvParameter {
                InitialInvestment = -35000
            };
            var sut = new NpvCalculatorViewModel(discountRateLimiter)
            {
                NpvParameter = npvParameter,
            };

            sut.CashFlows.Clear();
            sut.CashFlows.Add(new CashFlow {
                Cash = 10000, Index = 1
            });
            sut.CashFlows.Add(new CashFlow {
                Cash = 27000, Index = 2
            });
            sut.CashFlows.Add(new CashFlow {
                Cash = 19000, Index = 3
            });


            sut.ComputeNpvCommand.Execute(null);

            sut.NetPresentValues.Count.ShouldBe(2);
            Math.Round(sut.NetPresentValues.First().Value, 2).ShouldBe(8976.63);
            Math.Round(sut.NetPresentValues.Last().Value, 2).ShouldBe(6604.34);
        }
        public void ComputeNpvCommand_ShouldComputeNpv()
        {
            var oneRateLevelOnly = new List <double> {
                0.12
            };

            discountRateLimiter.GetRateLevels(Arg.Any <double>(), Arg.Any <double>(), Arg.Any <double>())
            .Returns(oneRateLevelOnly);
            var npvParameter = new NpvParameter {
                InitialInvestment = -35000
            };
            var sut = new NpvCalculatorViewModel(discountRateLimiter)
            {
                NpvParameter = npvParameter,
            };

            sut.CashFlows.Clear();
            sut.CashFlows.Add(new CashFlow {
                Cash = 10000, Index = 1
            });
            sut.CashFlows.Add(new CashFlow {
                Cash = 27000, Index = 2
            });
            sut.CashFlows.Add(new CashFlow {
                Cash = 19000, Index = 3
            });

            sut.ComputeNpvCommand.Execute(null);

            sut.NetPresentValues.Count.ShouldBe(1);
            Math.Round(sut.NetPresentValues.First().Value, 2).ShouldBe(8976.63);
            //ref: https://www.investopedia.com/ask/answers/032615/what-formula-calculating-net-present-value-npv.asp
        }