public void InvestmentOptionsCannotBeEmpty() { // Arrange var calculationReq = new RoiCalculationRequest(); // Act ValidationContext context = new ValidationContext(calculationReq); var result = calculationReq.Validate(context); // Assert Assert.IsTrue(result.Any( e => e.MemberNames.Contains(nameof(RoiCalculationRequest.InvestmentOptions)) && e.ErrorMessage.Equals(ValidationMessages.INVESTMENT_OPTIONS_CANNOT_BE_EMPTY))); }
public void InvestmentAmountCannotBeNegative() { // Arrange var calculationReq = new RoiCalculationRequest() { InvestmentAmount = -1, }; // Act ValidationContext context = new ValidationContext(calculationReq); var result = calculationReq.Validate(context); // Assert Assert.IsTrue(result.Any( e => e.MemberNames.Contains(nameof(RoiCalculationRequest.InvestmentAmount)) && e.ErrorMessage.Equals(ValidationMessages.INVALID_INVESTMENT_AMOUNT))); }
public async Task RoiCalculationTest() { // Arrange var currencyConverter = new CurrencyConverter(TestMocks.GrpcClientMock()); var businessRules = GetTestBusinessRules(); const double investmentAmount = 100000; var calculator = new RoiCalculator(currencyConverter, businessRules); // This is "House market" var optionId = businessRules.InvestmentBusinessRules.First().Id; // Invest 100% in the house market; var investionAllocation = new List <InvestmentOptionBase>() { new InvestmentOption() { Id = optionId, AllocatedProportion = 1 } }; var calculationRequest = new RoiCalculationRequest() { BaseCurrency = TestConstants.BaseCurrency, InvestmentAmount = investmentAmount, InvestmentOptions = investionAllocation }; // Act var calculationResult = await calculator.Calculate(calculationRequest); // Assert // We expect a 20% ROI and just the base FEE, becuase house market doesn't have fee. const double expectedRoi = investmentAmount * 0.2 * TestConstants.AudUsdConversionRate; const double expectedFees = TestConstants.BaseFee * TestConstants.AudUsdConversionRate; Assert.AreEqual(calculationResult.Currency, TestConstants.TargetCurrency); Assert.AreEqual(calculationResult.Total, expectedRoi); Assert.AreEqual(calculationResult.Fees, expectedFees); }
public void InvestedAmountShouldBeOneHundredPercent() { // Arrange var calculationReq = new RoiCalculationRequest() { InvestmentAmount = 100000, InvestmentOptions = new List <InvestmentOptionBase>() { new InvestmentOptionBase() { AllocatedProportion = .5 } } }; // Act ValidationContext context = new ValidationContext(calculationReq); var result = calculationReq.Validate(context); // Assert Assert.IsTrue(result.Any( e => e.MemberNames.Contains(nameof(RoiCalculationRequest.InvestmentOptions)) && e.ErrorMessage.Equals(ValidationMessages.TOTAL_INVESTMENT_ALLOCATION_MUST_BE_100_PERCENT))); }
public async Task <RoiCalculationResult> Calculate([FromBody] RoiCalculationRequest request) { return(await _roiCalculator.Calculate(request)); }