Exemplo n.º 1
0
        public async Task <ActionResult <List <NPVSet> > > Post([FromBody] CalculateSetOfNPVRequest request)
        {
            var getNPVPreviousRequestBy = new NPVPreviousRequest
            {
                CashFlowsDescription     = string.Join(", ", request.CashFlow.ToArray())
                , IncrementRate          = request.Increment
                , InitialCost            = request.InitialCost
                , LowerBoundDiscountRate = request.LowerBoundDiscountRate
                , UpperBoundDiscountRate = request.UpperBoundDiscountRate
            };

            var npvEngine = new NPVEngine.NPVEngine();

            request.InitialCost = request.InitialCost * -1;
            var npvSet = npvEngine.CalculateSetOfNPV(request);

            getNPVPreviousRequestBy.NPVPreviousResults = new List <NPVPreviousResult>();
            npvSet.ForEach(s => {
                getNPVPreviousRequestBy.NPVPreviousResults.Add(
                    new NPVPreviousResult
                {
                    DiscountRate = s.DiscountRate
                    , NPV        = s.NPV
                }
                    );
            });

            await _npvDataAccess.SaveNPVPreviousRequest(getNPVPreviousRequestBy);



            return(Ok(npvSet));
        }
Exemplo n.º 2
0
        public void Post_Given_Request_Has_Not_Been_Made_Before_Returns_Ok(
            double upperLimit
            , double lowerLimit
            , double increment
            , double initialCost
            )
        {
            var request = new CalculateSetOfNPVRequest
            {
                CashFlow = new List <double>
                {
                    1000
                    , 1500
                    , 2000
                    , 2500
                    , 3000
                },
                UpperBoundDiscountRate = upperLimit
                ,
                LowerBoundDiscountRate = lowerLimit
                ,
                Increment = increment
                ,
                InitialCost = initialCost
            };


            var cashFlowSummary    = string.Join(", ", request.CashFlow.ToArray());
            var npvEngine          = new NPVEngine.NPVEngine();
            var expectedOutput     = new List <NPVSet>();
            var npvPreviousResults = new List <NPVPreviousResult>();
            var id = 1;

            while (lowerLimit <= upperLimit)
            {
                var npv = npvEngine.CalculateIndividualNPV(new CalculateIndividualNPVRequest
                {
                    CashFlows = request.CashFlow
                    ,
                    InitialValue = request.InitialCost * -1
                    ,
                    Interest = lowerLimit / 100
                });

                expectedOutput.Add(new NPVSet
                {
                    CashFlowSummary = cashFlowSummary
                    ,
                    InitialCost = initialCost * -1
                    ,
                    DiscountRate = lowerLimit
                    ,
                    NPV = npv
                });

                npvPreviousResults.Add(new NPVPreviousResult
                {
                    Id             = id
                    , DiscountRate = lowerLimit
                    , NPV          = Math.Round(npv, 2)
                });
                lowerLimit += increment;
                id         += 1;
            }



            var nPVPreviousRequestAfterSave = new NPVPreviousRequest
            {
                CashFlowsDescription = cashFlowSummary
                ,
                Id = 1
                ,
                IncrementRate = increment
                ,
                InitialCost = initialCost
                ,
                LowerBoundDiscountRate = lowerLimit
                ,
                UpperBoundDiscountRate = upperLimit
                ,
                NPVPreviousResults = npvPreviousResults
            };

            _npvDataAccessMock.Setup(n => n.SaveNPVPreviousRequest(It.IsAny <NPVPreviousRequest>()))
            .Returns(Task.FromResult(nPVPreviousRequestAfterSave));


            var result       = _controller.Post(request);
            var actualResult = result.Result.Result as OkObjectResult;
            var actualOutput = actualResult.Value as List <NPVSet>;

            for (var i = 0; i < expectedOutput.Count; i++)
            {
                Assert.AreEqual(expectedOutput[i].CashFlowSummary, actualOutput[i].CashFlowSummary);
                Assert.AreEqual(expectedOutput[i].DiscountRate, actualOutput[i].DiscountRate);
                Assert.AreEqual(Math.Round(expectedOutput[i].NPV, 2), actualOutput[i].NPV);
            }

            _npvDataAccessMock.VerifyAll();
        }