示例#1
0
        /// <inheritdoc />
        public async Task <OperationResult <CurrencyRate> > GetRate(CurrencyRequest request)
        {
            try
            {
                CurrencyDateCalculationResult currencyDateCalculationResult = this.currencyDateCalculator.Calculate(request);

                if (currencyDateCalculationResult == null)
                {
                    return(OperationResult <CurrencyRate> .FromFail("Не удалось получить результат проверки запроса курса валюты"));
                }

                if (currencyDateCalculationResult.Success == false || currencyDateCalculationResult.Date.HasValue == false)
                {
                    return(OperationResult <CurrencyRate> .FromFail(currencyDateCalculationResult.ErrorMessage));
                }

                CurrencyRate currencyRate = await this.currencyProvider.GetRate(currencyDateCalculationResult.Date.Value, request.Code);

                return(currencyRate != null ? OperationResult <CurrencyRate> .FromSuccess(currencyRate) : OperationResult <CurrencyRate> .FromFail("Не удалось получить курс валюты"));
            }
            catch (Exception e)
            {
                this.logger.LogError(e, "Произошла ошибка при получении курса валюты");

                return(OperationResult <CurrencyRate> .FromFail("Произошла ошибка при получении курса валюты"));
            }
        }
        private static ICurrencyDateCalculator GetCurrencyDateCalculator(CurrencyDateCalculationResult needResult)
        {
            Mock <ICurrencyDateCalculator> currencyDateCalculator = new Mock <ICurrencyDateCalculator>();

            currencyDateCalculator.Setup(x => x.Calculate(It.IsAny <CurrencyRequest>()))
            .Returns(needResult);

            return(currencyDateCalculator.Object);
        }
        public static async Task TestWhenCurrencyDateCalculationResultIsNotSuccess()
        {
            // Arrange
            CurrencyDateCalculationResult currencyDateCalculationResult = new CurrencyDateCalculationResult {
                Success = false, ErrorMessage = "Fail"
            };
            CurrencyService currencyService = new CurrencyService(GetCurrencyProvider(null, null), GetCurrencyDateCalculator(currencyDateCalculationResult), GetLogger());
            CurrencyRequest request         = new CurrencyRequest {
                Code = "AUD", Y = 1, X = 1
            };

            // Act
            OperationResult <CurrencyRate> result = await currencyService.GetRate(request);

            // Assert
            Assert.NotNull(result);
            Assert.False(result.Success);
            Assert.True(string.IsNullOrEmpty(result.ErrorMessage) == false);
        }