public async Task ConvertsCurrency()
        {
            // Arrange
            var grpcClientMock = TestMocks.GrpcClientMock();

            // Act
            var currencyConverter = new CurrencyConverter(grpcClientMock);

            const double expectedTotalRoi  = 750;
            const double expectedTotalFees = 75;

            var roiResult = new RoiCalculationResult()
            {
                Currency = TestConstants.BaseCurrency,
                Total    = 1000,
                Fees     = 100,
            };


            await currencyConverter.Convert(roiResult, TestConstants.BaseCurrency, TestConstants.TargetCurrency);

            // Assert
            Assert.AreEqual(roiResult.Total, expectedTotalRoi);
            Assert.AreEqual(roiResult.Fees, expectedTotalFees);
        }
        public void CanBeInstantiated()
        {
            // Arrange
            var grpcClientMock = TestMocks.GrpcClientMock();

            // Act
            var currencyConverter = new CurrencyConverter(grpcClientMock);

            // Assert
            Assert.Pass();
        }
        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);
        }