Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 4
0
        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)));
        }
Exemplo n.º 5
0
 public async Task <RoiCalculationResult> Calculate([FromBody] RoiCalculationRequest request)
 {
     return(await _roiCalculator.Calculate(request));
 }