Exemplo n.º 1
0
        public void GetAllNPVResults_HasSomeValues()
        {
            NpvController npvc = new NpvController();

            var httpResponse = npvc.GetAllNpvResults();

            var npvResponse = ((OkNegotiatedContentResult <NpvResponse>)httpResponse).Content;

            Assert.IsTrue(npvResponse.NPVs.Count > 0, "No NPV Records found");
        }
        public void Index()
        {
            // Arrange
            var controller = new NpvController();

            // Act
            var result = controller.Index() as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
Exemplo n.º 3
0
        public void InvalidInputShouldReturnBadRequestStatusWithModelErrors(double[] expectedNpvResult,
                                                                            decimal lowerDiscount, decimal upperDiscount, decimal increment, decimal outflow,
                                                                            double[] inflows)
        {
            //Arrange
            var stubCalculator = Substitute.For <INpvCalculator>();
            var controller     = new NpvController(stubCalculator);

            //Validation testing has been done on project NpvApi.Dtos.Test so will not test again here.
            var npvOptions = new NpvOptions
            {
                RateOption = new RateOption
                {
                    LowerDiscount = lowerDiscount,
                    UpperDiscount = upperDiscount
                },
                Outflow = outflow
            };

            foreach (var inflow in inflows.ToList())
            {
                npvOptions.Inflows.Add(new Inflow()
                {
                    Value = (decimal)inflow
                });
            }

            const string errorPropertyKey   = "UpperDiscount";
            const string errorPropertyValue = "Required";

            //Add the error to model state to mock 400 BadRequest
            controller.ModelState.AddModelError(errorPropertyKey, errorPropertyValue);

            //Act
            var actionResult     = controller.Post(npvOptions);
            var badRequestResult = actionResult as BadRequestObjectResult;

            //Assert response should contain the model errors
            Assert.NotNull(badRequestResult);
            Assert.Equal(400, badRequestResult.StatusCode);

            var responseContent = badRequestResult.Value as SerializableError;

            Assert.NotNull(responseContent);
            Assert.Equal(1, responseContent.Keys.Count);
            Assert.Equal(errorPropertyKey, responseContent.Keys.First());
            Assert.Equal(errorPropertyValue, (responseContent.Values.First() as string[]).First());
        }
Exemplo n.º 4
0
        public void CalculateNpv()
        {
            // Arrange
            var controller = new NpvController();

            // Act
            var result = controller.CalculateNpv(new NpvModel()
            {
                InitialInvestment       = 10000,
                CommaDelimetedCashFlows = "1000, 1500, 2000",
                LowerBoundDiscountRate  = 1,
                UpperBoundDiscountRate  = 1.5,
                DiscountRateIncrement   = 0.25
            }) as ViewResult;

            // Assert
            Assert.IsNotNull(result);
        }
Exemplo n.º 5
0
        public void CalculatingNpvReturnsNpvResponse()
        {
            NpvController npvc = new NpvController();

            List <decimal> cashFlows = new List <decimal>()
            {
                1000, 1500, 2000
            };
            var request = new NpvRequest {
                InitialValue = 10000m, DiscountRateIncrement = 0.25m, LowerBoundDiscountRate = 1.00m, UpperBoundDiscountRate = 1.5m, CashFlows = cashFlows
            };

            var httpResponse = npvc.CalculateNPV(request);

            var npvResponse = (OkNegotiatedContentResult <NpvResponse>)httpResponse;

            List <NPVRecord> npvRecords = npvResponse.Content.NPVs;

            Assert.IsTrue(npvResponse.GetType() == typeof(OkNegotiatedContentResult <NpvResponse>));
        }
Exemplo n.º 6
0
        public void ValidInputShouldCallApplicationServiceWithCorrectDataAndReturnOk(double[] expectedNpvResult,
                                                                                     decimal lowerDiscount, decimal upperDiscount, decimal increment, decimal outflow,
                                                                                     double[] inflows)
        {
            //Autofixture does not support Asp.net Core so can not use AutoData for
            //NSubstitute and just use InlineData instead

            var mockCalculator = Substitute.For <INpvCalculator>();
            var controller     = new NpvController(mockCalculator);

            //Validation testing has been done on project NpvApi.Dtos.Test so will not test again here.
            var npvOptions = new NpvOptions
            {
                RateOption = new RateOption
                {
                    LowerDiscount = lowerDiscount,
                    UpperDiscount = upperDiscount
                },
                Outflow = outflow
            };

            foreach (var inflow in inflows.ToList())
            {
                npvOptions.Inflows.Add(new Inflow()
                {
                    Value = (decimal)inflow
                });
            }
            var actionResult = controller.Post(npvOptions);

            mockCalculator.Received().Calculate(npvOptions);

            var badRequestResult = actionResult as OkObjectResult;

            //Assert response should contain the model errors
            Assert.NotNull(badRequestResult);
            Assert.Equal(200, badRequestResult.StatusCode);
        }