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); }
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()); }
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); }
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>)); }
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); }