예제 #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("Произошла ошибка при получении курса валюты"));
            }
        }
        public async Task ReturnSuccessfulCurrencyResponseOnConversionForUsdToEur()
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = "USD",
                TargetCurrency = "EUR"
            };

            var currencyExchangeResponse = new CurrencyExchangeResponse
            {
                Base            = currencyRequest.SourceCurrency,
                Date            = DateTime.Now,
                TimeLastUpdated = DateTime.Now.Ticks,
                Rates           = new Dictionary <string, decimal>
                {
                    { "GBP", 0.722077M },
                    { "EUR", 0.844712M },
                    { "USD", 1 }
                }
            };

            _exchangeRateServiceMock.Setup(x => x.GetExchangeRatesAsync(currencyRequest.SourceCurrency))
            .Returns(Task.FromResult(currencyExchangeResponse));

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().NotBeNull();
            response.ConvertedAmount.Should().Be(20.16M);
            response.TargetCurrency.Should().Be("EUR");
        }
        public async Task ReturnSuccessfulConversionOnLowerCaseCurrencies()
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = "gbp",
                TargetCurrency = "eur"
            };

            var currencyExchangeResponse = new CurrencyExchangeResponse
            {
                Base            = currencyRequest.SourceCurrency,
                Date            = DateTime.Now,
                TimeLastUpdated = DateTime.Now.Ticks,
                Rates           = new Dictionary <string, decimal>
                {
                    { "GBP", 1 },
                    { "EUR", 1.168852M },
                    { "USD", 1.384935M }
                }
            };

            _exchangeRateServiceMock.Setup(x => x.GetExchangeRatesAsync(currencyRequest.SourceCurrency.ToUpper()))
            .Returns(Task.FromResult(currencyExchangeResponse));

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().NotBeNull();
            response.ConvertedAmount.Should().Be(28.08M);
            response.TargetCurrency.Should().Be("EUR");
        }
예제 #4
0
        public CurrencyResponse Post([FromBody] CurrencyRequest Request)
        {
            try
            {
                // Проверяем непротиворечивость дат.
                if (Request.DateStart > DateTime.Now || Request.DateEnd > DateTime.Now ||
                    Request.DateStart > Request.DateEnd)
                {
                    throw new ArgumentException("Incorrect Date.");
                }

                // Проверяем валидность символа.
                if (!CheckValidSymbol(Request.Symbol))
                {
                    throw new ArgumentException("Invalid Symbol.");
                }

                var resp = _currencyService.GetRates(Request);

                return(new CurrencyResponse()
                {
                    Rates = resp.Result
                });
            }
            catch (Exception ex)
            {
                return(new CurrencyResponse()
                {
                    Rates = null, Error = ex.Message
                });
            }
        }
예제 #5
0
        /// <summary>
        /// Отправляет запросы по нашим данным и возвращает ряд ответов.
        /// </summary>
        /// <param name="Request"> Запрос, который был отправлен нам. </param>
        /// <returns> Ответ на него. </returns>
        public async Task <IEnumerable <double> > GetRates(CurrencyRequest Request)
        {
            var parameters = HttpUtility.ParseQueryString(string.Empty);

            parameters["base"]    = Request.Symbol;
            parameters["symbols"] = "RUB";

            // Лист наших ответов.
            List <double> rates = new List <double>();

            DateTime start = (DateTime)Request.DateStart;

            // Формируем url для запроса и делаем сам запрос.
            while (start <= Request.DateEnd)
            {
                uriBuilder.Path  = start.ToString("yyyy-MM-dd");
                uriBuilder.Query = parameters.ToString();

                Uri finalUrl = uriBuilder.Uri;

                rates.Add(await GetAnswer(finalUrl));

                start = start.AddDays(1);
            }

            return(rates);
        }
예제 #6
0
        public async Task ExchangeCurrencyAsync_WhenGBPBaseRequestReceived_AndTargetIsEuro_ThenReturnConvertedValue()
        {
            // Arrange
            var request = new CurrencyRequest()
            {
                TargetCurrency = "EUR",
                SourceCurrency = "GBP",
                Amount         = 10,
            };

            var rateResponse = new RatesResponse()
            {
                Base  = "GBP",
                Date  = Some <string>(),
                Rates = new Dictionary <string, decimal>()
                {
                    { "EUR", 2 },
                }
            };

            GetMock <IRatesService>()
            .Setup(x => x.GetRatesAsync(request.SourceCurrency))
            .ReturnsAsync(rateResponse);

            // Act
            var response = await SystemUnderTest.GetConvertedCurrencyAsync(request);

            // Assert
            Assert.IsType <ConvertedCurrencyResponse>(response);
            Assert.Equal(20, response.ConvertedAmount);
        }
        public async Task <CurrencyResponse> ConvertAsync(CurrencyRequest currencyRequest)
        {
            if (currencyRequest == null || string.IsNullOrEmpty(currencyRequest.SourceCurrency) ||
                string.IsNullOrEmpty(currencyRequest.TargetCurrency))
            {
                return(null);
            }

            currencyRequest.SourceCurrency = currencyRequest.SourceCurrency.ToUpper();
            currencyRequest.TargetCurrency = currencyRequest.TargetCurrency.ToUpper();

            if (CheckIfCurrenciesAreSupported(currencyRequest))
            {
                return(null);
            }

            var response = await _exchangeRateService.GetExchangeRatesAsync(currencyRequest.SourceCurrency);

            if (response == null)
            {
                return(null);
            }

            var targetRate = response.Rates[currencyRequest.TargetCurrency];

            var convertedAmount = currencyRequest.Amount * Math.Round(targetRate, 2);

            return(new CurrencyResponse
            {
                ConvertedAmount = convertedAmount,
                TargetCurrency = currencyRequest.TargetCurrency
            });
        }
예제 #8
0
        public void SendCurrency()
        {
            if (this.IsConnected)
            {
                if (this.TargetCurrencyCount > 0)
                {
                    CurrencyRequest currency = new CurrencyRequest();

                    currency.DeviceNumber            = this.DeviceNumberHex;
                    currency.Key                     = new byte[] { 0x00 };
                    currency.OperateTime             = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.AddDays(this.SendDayCount).Day, ThreadSafeRandom.Next(8, 19), DateTime.Now.Minute, DateTime.Now.Second).GetBytes(); //new byte[] { 0x0C, 0x0A, 0x1E, 0x12, 0x08, 0x15 };
                    currency.OperatorNumber          = new byte[] { 0x00 };
                    currency.ClientCardNumber        = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
                    currency.BusinessType            = new byte[] { 0x03 };
                    currency.BatchNumber             = new byte[] { 0x12, 0x08, 0x16 };
                    currency.OrderNumber             = new byte[] { 0x00, 0x01 };
                    currency.CurrencyType            = new byte[] { 0x00 };
                    currency.CurrencyAmount          = Helper.GetCurrencyFaceAmount(); //new byte[] { 0x00, 0x64 };
                    currency.CurrencyVersion         = new byte[] { 0x07, 0xD5 };
                    currency.CurrencyFlag            = new byte[] { 0x11 };
                    currency.CurrencyReal            = new byte[] { 0x00 };
                    currency.CurrencyNumber          = Helper.GetCurrencyNumber(); //new byte[] { 0x57, 0x4F, 0x37, 0x37, 0x37, 0x30, 0x33, 0x31, 0x34, 0x34, 0x00, 0x00, 0x00 };
                    currency.CurrencyNumberImageType = new byte[] { 0x02 };
                    currency.CurrencyNumberImage     = new byte[]
                    {
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x3F, 0x00, 0x1F, 0xFE, 0x07, 0xFC, 0x3F, 0x80,
                        0x0F, 0xF0, 0x01, 0xFE, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xFE, 0x30, 0x0E,
                        0x30, 0x07, 0x30, 0x07, 0x38, 0x0E, 0x3F, 0xFE, 0x07, 0xF0,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
                        0x30, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0x3F, 0x00, 0x3C, 0x00,
                        0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
                        0x60, 0x00, 0x60, 0x00, 0x60, 0x1F, 0x61, 0xFF, 0x67, 0xE0,
                        0x7E, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x1F,
                        0x61, 0xFF, 0x67, 0xF8, 0x7F, 0x00, 0x78, 0x00, 0x78, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
                        0x3F, 0xFF, 0x78, 0x07, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03,
                        0x78, 0x0F, 0x3F, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x08, 0x38, 0x0E, 0x38, 0x0F, 0x61, 0x83,
                        0x61, 0x83, 0x63, 0x83, 0x3F, 0xC7, 0x3E, 0xFE, 0x00, 0x7C,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00,
                        0x38, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0xF8, 0x01, 0xF8, 0x07, 0xB8, 0x3E, 0x38, 0x3F, 0xFF,
                        0x3F, 0xFF, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x78, 0x01, 0xF8, 0x07, 0x98, 0x1E, 0x18,
                        0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00
                    };
                    currency.Reserve = new byte[] { 0x00 };
                    currency.Foot    = currency.BuildFoot();

                    this.LocalSocket.BeginSend(currency.BuildFull());

                    this.LastRecieveDatTime = DateTime.Now;
                }
            }
        }
예제 #9
0
        public async Task <IActionResult> Get(CurrencyRequest request)
        {
            this.logger.LogDebug($"Поступил запрос на получение курса валюты: { request }");

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

            return(result.Success ? this.View("CurrencyRate", result.Result) : this.View("ShowError", new ErrorInformation(result.ErrorMessage)));
        }
예제 #10
0
        public async Task <Currency> GetAsync(string code, CurrencyRequest request)
        {
            Requires.ArgumentNotNull(request, nameof(request));

            var currencyLink = await _linkFactory.CreateLinkAsync($"currencies/{code}").ConfigureAwait(_halClient);

            return(await _halClient.GetAsync <Currency>(currencyLink, request).ConfigureAwait(_halClient));
        }
예제 #11
0
        public async Task <PagedResource <Currency> > GetAsync(CurrencyRequest request)
        {
            Requires.ArgumentNotNull(request, nameof(request));

            var root = await _halClient.GetRootAsync().ConfigureAwait(_halClient);

            return(await _halClient.GetAsync <PagedResource <Currency> >(root.CurrenciesLink, request).ConfigureAwait(_halClient));
        }
예제 #12
0
        public IRestResponse callCurrencyConversionPOSTAPI(RestClient RestClient, CurrencyRequest request)
        {
            RestRequest restRequest = new RestRequest(relativePath_POST, Method.POST);

            restRequest.RequestFormat = DataFormat.Json;
            restRequest.AddJsonBody(request);
            return(RestClient.Execute(restRequest));
        }
예제 #13
0
        public void GetListOfAvailableCurrenciesTest(bool sell, bool buy, bool active, FlowEnum flow)
        {
            var request = new CurrencyRequest(active, buy, sell, flow);

            var result = _client.GetListOfAvailableCurrencies(request);

            Assert.NotNull(result);
            Assert.True(result.Count > 0);
        }
예제 #14
0
        public void SendCurrency()
        {
            if (this.IsConnected)
            {
                if (this.TargetCurrencyCount > 0)
                {
                    CurrencyRequest currency = new CurrencyRequest();

                    currency.DeviceNumber            = this.DeviceNumberHex;
                    currency.Key                     = new byte[] { 0x00 };
                    currency.OperateTime             = new byte[] { 0x0C, 0x0A, 0x1E, 0x12, 0x08, 0x15 };
                    currency.OperatorNumber          = new byte[] { 0x00 };
                    currency.ClientCardNumber        = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
                    currency.BusinessType            = new byte[] { 0x03 };
                    currency.BatchNumber             = new byte[] { 0x12, 0x08, 0x16 };
                    currency.OrderNumber             = new byte[] { 0x00, 0x01 };
                    currency.CurrencyType            = new byte[] { 0x00 };
                    currency.CurrencyAmount          = new byte[] { 0x00, 0x64 };
                    currency.CurrencyVersion         = new byte[] { 0x07, 0xD5 };
                    currency.CurrencyFlag            = new byte[] { 0x11 };
                    currency.CurrencyReal            = new byte[] { 0x00 };
                    currency.CurrencyNumber          = new byte[] { 0x57, 0x4F, 0x37, 0x37, 0x37, 0x30, 0x33, 0x31, 0x34, 0x34, 0x00, 0x00, 0x00 };
                    currency.CurrencyNumberImageType = new byte[] { 0x02 };
                    currency.CurrencyNumberImage     = new byte[]
                    {
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x3F, 0x00, 0x1F, 0xFE, 0x07, 0xFC, 0x3F, 0x80,
                        0x0F, 0xF0, 0x01, 0xFE, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xFE, 0x30, 0x0E,
                        0x30, 0x07, 0x30, 0x07, 0x38, 0x0E, 0x3F, 0xFE, 0x07, 0xF0,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
                        0x30, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0x3F, 0x00, 0x3C, 0x00,
                        0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
                        0x60, 0x00, 0x60, 0x00, 0x60, 0x1F, 0x61, 0xFF, 0x67, 0xE0,
                        0x7E, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x1F,
                        0x61, 0xFF, 0x67, 0xF8, 0x7F, 0x00, 0x78, 0x00, 0x78, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
                        0x3F, 0xFF, 0x78, 0x07, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03,
                        0x78, 0x0F, 0x3F, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x08, 0x38, 0x0E, 0x38, 0x0F, 0x61, 0x83,
                        0x61, 0x83, 0x63, 0x83, 0x3F, 0xC7, 0x3E, 0xFE, 0x00, 0x7C,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00,
                        0x38, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0xF8, 0x01, 0xF8, 0x07, 0xB8, 0x3E, 0x38, 0x3F, 0xFF,
                        0x3F, 0xFF, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x78, 0x01, 0xF8, 0x07, 0x98, 0x1E, 0x18,
                        0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00
                    };
                    currency.Reserve = new byte[] { 0x00 };
                    currency.Foot    = currency.BuildFoot();

                    this.LocalSocket.BeginSend(currency.BuildFull());
                }
            }
        }
예제 #15
0
        public string ExecuteAndGetResponse(MessageActivity activity)
        {
            var currencyRequest = new CurrencyRequest(activity.Message, _currencyToAnotherRateProviders, _currencyRatingProviders);

            return
                (currencyRequest.IsFullInformationRequested
                                        ? string.Join(ActivityExtension.NewLine, currencyRequest.CurrencyRatingProvider.GetRates().Select(GetRatingString))
                                        : GetRatingString(currencyRequest.CurrencyToAnotherRateProvider.GetRate()));
        }
        /// <inheritdoc />
        public ValidationResult Validate(CurrencyRequest request)
        {
            bool result = Math.Pow(request.X - this.circleCenterX, 2) + Math.Pow(request.Y - this.circleCenterY, 2) <= Math.Pow(this.circleRadius, 2);

            return(new ValidationResult
            {
                ErrorMessage = result ? string.Empty : $"Координата ({ request.X }, { request.Y }) не входит в окружность с радиусом { this.circleRadius } и центром в ({ this.circleCenterX }, { this.circleCenterY })",
                Success = result
            });
        }
 private void CurrencyRequestConstruktorTestCommonAssert(CurrencyRequest obj)
 {
     Assert.AreEqual(obj.FromCurrency, Messages.ParameterNotUseForThisRequest);
     Assert.AreEqual(obj.ToCurrency, Messages.ParameterNotUseForThisRequest);
     Assert.AreEqual(obj.FromAmount, 0);
     Assert.AreEqual(obj.ToAmount, 0);
     Assert.AreEqual(obj.FromNetwork, Messages.ParameterNotUseForThisRequest);
     Assert.AreEqual(obj.ToNetwork, Messages.ParameterNotUseForThisRequest);
     Assert.AreEqual(obj.Type, DirectionEnum.Direct);
 }
예제 #18
0
 public CurrencyDto AddnewCurrency(CurrencyRequest request)
 {
     try
     {
         return(_currencyLogic.AddnewCurrency(request.Code, request.IsDefault, request.PriceToDefault).Map());
     }
     catch (Exception e)
     {
         throw new FaultException("Sikertelen Currency regisztrálás!");
     }
 }
예제 #19
0
 public bool EditCurrency(CurrencyRequest request)
 {
     try
     {
         return(_currencyLogic.EditCurrency(request.Id, request.Code, request.IsDefault, request.PriceToDefault));
     }
     catch (Exception e)
     {
         throw new FaultException("Sikertelen szerkesztés");
     }
 }
예제 #20
0
 public CurrencyDto GetCurrencyByCode(CurrencyRequest request)
 {
     try
     {
         return(_currencyLogic.GetCurrencyByCode(request.Code).Map());
     }
     catch (Exception e)
     {
         throw new FaultException("A kért Currency nem található!");
     }
 }
        public async Task <IActionResult> Currency([FromBody] CurrencyRequest currencyRequest)
        {
            (string errorMessage, IEnumerable <double> currencyValues) =
                await _currencyController.GetCurrencyValues(currencyRequest);

            return(Ok(new CurrencyResponse
            {
                Error = errorMessage,
                CurrencyValues = currencyValues
            }));
        }
예제 #22
0
        public void GivenIHaveFollowingDataForPOST(Table table)
        {
            IEnumerable data = table.CreateSet <CurrencyRequest>();

            foreach (CurrencyRequest c in data)
            {
                CurrencyRequest = new CurrencyRequest {
                    from = c.from, to = c.to, amount = c.amount
                };
                break;
            }
        }
        public async Task ReturnNullWhenCurrenciesAreNull(string sourceCurrency, string targetCurrency)
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = sourceCurrency,
                TargetCurrency = targetCurrency
            };

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().BeNull();
        }
예제 #24
0
        /// <summary>
        /// Set the specified request.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>CurrencyResponse.</returns>
        public CurrencyResponse SetCurrencies(CurrencyRequest request)
        {
            var response = new CurrencyResponse();
            var mapper   = request.Currency;

            if (request.Action != PersistType.Delete)
            {
                if (!mapper.Validate())
                {
                    foreach (string error in mapper.ValidationErrors)
                    {
                        response.Message += error + Environment.NewLine;
                    }
                    response.Acknowledge = AcknowledgeType.Failure;
                    return(response);
                }
            }
            try
            {
                if (request.Action == PersistType.Insert)
                {
                    var currency = CurrencyDao.GetCurrenciesByCurrencyCode(mapper.CurrencyCode);
                    if (currency != null)
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        response.Message     = @"Mã tiền tệ " + mapper.CurrencyCode + @" đã tồn tại !";
                        return(response);
                    }
                    mapper.CurrencyId = CurrencyDao.InsertCurrency(mapper);
                    response.Message  = null;
                }
                else if (request.Action == PersistType.Update)
                {
                    response.Message = CurrencyDao.UpdateCurrency(mapper);
                }
                else
                {
                    var obj = CurrencyDao.GetCurrency(request.CurrencyId);
                    response.Message = CurrencyDao.DeleteCurrency(obj);
                }
            }
            catch (Exception ex)
            {
                response.Acknowledge = AcknowledgeType.Failure;
                response.Message     = ex.Message;
                return(response);
            }
            response.CurrencyId  = mapper != null ? mapper.CurrencyId : 0;
            response.Acknowledge = response.Message != null ? AcknowledgeType.Failure : AcknowledgeType.Success;
            return(response);
        }
        public void TestCoordinateNotInCircle()
        {
            // Arrange
            CoordinateInCircleCurrencyRequestValidator validator = new CoordinateInCircleCurrencyRequestValidator(8, 0, 0);
            CurrencyRequest request = new CurrencyRequest {
                Y = 7, X = 8, Code = "AUD"
            };

            // Act
            ValidationResult result = validator.Validate(request);

            // Assert
            Assert.False(result.Success);
        }
예제 #26
0
 public IActionResult GetCustomerAvailableAmount(CurrencyRequest request)
 {
     if (ModelState.IsValid)
     {
         SingleResponse <double> response = new SingleResponse <double>();
         response.Result     = _xbService.GetCustomerAvailableAmount(request.Currency);
         response.ResultCode = ResultCodes.normal;
         return(ResponseExtensions.ToHttpResponse(response));
     }
     else
     {
         return(ValidationError.GetValidationErrorResponse(ModelState));
     }
 }
예제 #27
0
        public static Datagram ResolveRequest(byte[] rawDatagram)
        {
            Datagram result = null;

            Datagram temp = new DatagramRequest();

            temp.Parse(rawDatagram);

            if (DatagramResolver.HeadTag.SequenceEqual(temp.Head))
            {
                if (temp.CommandCode.SequenceEqual(HeartbeatRequest.FixCommandCode) &&
                    rawDatagram.Length == HeartbeatRequest.Length)
                {
                    result = new HeartbeatRequest();
                }

                if (temp.CommandCode.SequenceEqual(LoginRequest.FixCommandCode) &&
                    rawDatagram.Length == LoginRequest.Length)
                {
                    result = new LoginRequest();
                }

                if (temp.CommandCode.SequenceEqual(BlacklistQueryRequest.FixCommandCode) &&
                   rawDatagram.Length == BlacklistQueryRequest.Length)
                {
                    result = new BlacklistQueryRequest();
                }

                if (temp.CommandCode.SequenceEqual(BlacklistDownloadRequest.FixCommandCode) &&
                   rawDatagram.Length == BlacklistDownloadRequest.Length)
                {
                    result = new BlacklistDownloadRequest();
                }

                if (temp.CommandCode.SequenceEqual(CurrencyRequest.FixCommandCode) &&
                    rawDatagram.Length == CurrencyRequest.Length)
                {
                    result = new CurrencyRequest();
                }

                if (result != null)
                {
                    result.Parse(rawDatagram);
                }
            }

            return result;
        }
예제 #28
0
        public async Task <(string, IEnumerable <double>)> GetCurrencyValues(CurrencyRequest currencyRequest)
        {
            string errorMessage = null;

            if (currencyRequest.Symbol == null || currencyRequest.Symbol == "")
            {
                errorMessage = "Symbol cannot be null";
                return(errorMessage, null);
            }
            client ??= new HttpClient
            {
                BaseAddress = new Uri(url)
            };

            currencyRequest.DateStart ??= DateTime.Now;
            currencyRequest.DateEnd ??= currencyRequest.DateStart;
            List <double> CurrencyValues = new List <double>();

            while (currencyRequest.DateEnd >= currencyRequest.DateStart)
            {
                string date = currencyRequest.DateStart.Value.ToString("yyyy-MM-dd");
                HttpResponseMessage response = await client.GetAsync($"{date}?base={currencyRequest.Symbol}&symbols=RUB");

                if (response.IsSuccessStatusCode)
                {
                    string json = await response.Content.ReadAsStringAsync();

                    JObject jObj = JObject.Parse(json);
                    if (jObj["error"] != null)
                    {
                        errorMessage = $"{jObj["error"]}";
                        return(errorMessage, null);
                    }

                    var value = jObj["rates"];
                    CurrencyValues.Add(double.Parse($"{value["RUB"]}"));
                }
                else
                {
                    errorMessage = "Incorrect data was found in the request";
                    return(errorMessage, null);
                }

                currencyRequest.DateStart = currencyRequest.DateStart.Value.AddDays(1);
            }

            return(errorMessage, CurrencyValues);
        }
예제 #29
0
 public IActionResult GetAccountsForCurrency(CurrencyRequest request)
 {
     if (ModelState.IsValid)
     {
         var response = new SingleResponse <List <Account> >()
         {
             ResultCode = ResultCodes.normal
         };
         response.Result = _xbService.GetAccountsForCurrency(request.Currency);
         return(ResponseExtensions.ToHttpResponse(response));
     }
     else
     {
         return(ValidationError.GetValidationErrorResponse(ModelState));
     }
 }
예제 #30
0
        public static async Task TestGetRateWhenCurrencyDateCalculationResultNotExists()
        {
            // Arrange
            CurrencyService currencyService = new CurrencyService(GetCurrencyProvider(null, null), GetCurrencyDateCalculator(null), 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);
        }
        public async Task ReturnsNullIfExchangeRateGatewayError()
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = "GBP",
                TargetCurrency = "EUR"
            };

            _exchangeRateServiceMock.Setup(x => x.GetExchangeRatesAsync(currencyRequest.SourceCurrency))
            .Returns(Task.FromResult((CurrencyExchangeResponse)null));

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().BeNull();
        }
예제 #32
0
        public void SendCurrency()
        {
            if (this.IsConnected)
            {
                if (this.TargetCurrencyCount > 0)
                {
                    CurrencyRequest currency = new CurrencyRequest();

                    currency.DeviceNumber = this.DeviceNumberHex;
                    currency.Key = new byte[] { 0x00 };
                    currency.OperateTime = new byte[] { 0x0C, 0x0A, 0x1E, 0x12, 0x08, 0x15 };
                    currency.OperatorNumber = new byte[] { 0x00 };
                    currency.ClientCardNumber = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
                    currency.BusinessType = new byte[] { 0x03 };
                    currency.BatchNumber = new byte[] { 0x12, 0x08, 0x16 };
                    currency.OrderNumber = new byte[] { 0x00, 0x01 };
                    currency.CurrencyType = new byte[] { 0x00 };
                    currency.CurrencyAmount = new byte[] { 0x00, 0x64 };
                    currency.CurrencyVersion = new byte[] { 0x07, 0xD5 };
                    currency.CurrencyFlag = new byte[] { 0x11 };
                    currency.CurrencyReal = new byte[] { 0x00 };
                    currency.CurrencyNumber = new byte[] { 0x57, 0x4F, 0x37, 0x37, 0x37, 0x30, 0x33, 0x31, 0x34, 0x34, 0x00, 0x00, 0x00 };
                    currency.CurrencyNumberImageType = new byte[] { 0x02 };
                    currency.CurrencyNumberImage = new byte[]
                    {
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x3F, 0x00, 0x1F, 0xFE, 0x07, 0xFC, 0x3F, 0x80,
                        0x0F, 0xF0, 0x01, 0xFE, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xFE, 0x30, 0x0E,
                        0x30, 0x07, 0x30, 0x07, 0x38, 0x0E, 0x3F, 0xFE, 0x07, 0xF0,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
                        0x30, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0x3F, 0x00, 0x3C, 0x00,
                        0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
                        0x60, 0x00, 0x60, 0x00, 0x60, 0x1F, 0x61, 0xFF, 0x67, 0xE0,
                        0x7E, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x1F,
                        0x61, 0xFF, 0x67, 0xF8, 0x7F, 0x00, 0x78, 0x00, 0x78, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
                        0x3F, 0xFF, 0x78, 0x07, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03,
                        0x78, 0x0F, 0x3F, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x08, 0x38, 0x0E, 0x38, 0x0F, 0x61, 0x83,
                        0x61, 0x83, 0x63, 0x83, 0x3F, 0xC7, 0x3E, 0xFE, 0x00, 0x7C,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00,
                        0x38, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0xF8, 0x01, 0xF8, 0x07, 0xB8,0x3E, 0x38, 0x3F, 0xFF,
                        0x3F, 0xFF, 0x00, 0x38, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x78, 0x01, 0xF8,0x07, 0x98, 0x1E, 0x18,
                        0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x18,0x00, 0x00, 0x00, 0x00
                    };
                    currency.Reserve = new byte[] { 0x00 };
                    currency.Foot = currency.BuildFoot();

                    this.LocalSocket.BeginSend(currency.BuildFull());
                }
            }
        }
예제 #33
0
        public void SendCurrency()
        {
            if (this.IsConnected)
            {
                if (this.TargetCurrencyCount > 0)
                {
                    CurrencyRequest currency = new CurrencyRequest();

                    currency.DeviceNumber = this.DeviceNumberHex;
                    currency.Key = new byte[] { 0x00 };
                    currency.OperateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.AddDays(this.SendDayCount).Day, ThreadSafeRandom.Next(8, 19), DateTime.Now.Minute, DateTime.Now.Second).GetBytes(); //new byte[] { 0x0C, 0x0A, 0x1E, 0x12, 0x08, 0x15 };
                    currency.OperatorNumber = new byte[] { 0x00 };
                    currency.ClientCardNumber = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
                    currency.BusinessType = new byte[] { 0x03 };
                    currency.BatchNumber = new byte[] { 0x12, 0x08, 0x16 };
                    currency.OrderNumber = new byte[] { 0x00, 0x01 };
                    currency.CurrencyType = new byte[] { 0x00 };
                    currency.CurrencyAmount = Helper.GetCurrencyFaceAmount(); //new byte[] { 0x00, 0x64 };
                    currency.CurrencyVersion = new byte[] { 0x07, 0xD5 };
                    currency.CurrencyFlag = new byte[] { 0x11 };
                    currency.CurrencyReal = new byte[] { 0x00 };
                    currency.CurrencyNumber = Helper.GetCurrencyNumber(); //new byte[] { 0x57, 0x4F, 0x37, 0x37, 0x37, 0x30, 0x33, 0x31, 0x34, 0x34, 0x00, 0x00, 0x00 };
                    currency.CurrencyNumberImageType = new byte[] { 0x02 };
                    currency.CurrencyNumberImage = new byte[]
                    {
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x3F, 0x00, 0x1F, 0xFE, 0x07, 0xFC, 0x3F, 0x80,
                        0x0F, 0xF0, 0x01, 0xFE, 0x3F, 0xFE, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x1F, 0xFC, 0x3F, 0xFE, 0x30, 0x0E,
                        0x30, 0x07, 0x30, 0x07, 0x38, 0x0E, 0x3F, 0xFE, 0x07, 0xF0,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00,
                        0x30, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0x3F, 0x00, 0x3C, 0x00,
                        0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
                        0x60, 0x00, 0x60, 0x00, 0x60, 0x1F, 0x61, 0xFF, 0x67, 0xE0,
                        0x7E, 0x00, 0x78, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x1F,
                        0x61, 0xFF, 0x67, 0xF8, 0x7F, 0x00, 0x78, 0x00, 0x78, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC,
                        0x3F, 0xFF, 0x78, 0x07, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03,
                        0x78, 0x0F, 0x3F, 0xFF, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x08, 0x38, 0x0E, 0x38, 0x0F, 0x61, 0x83,
                        0x61, 0x83, 0x63, 0x83, 0x3F, 0xC7, 0x3E, 0xFE, 0x00, 0x7C,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00,
                        0x38, 0x00, 0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                        0x00, 0xF8, 0x01, 0xF8, 0x07, 0xB8,0x3E, 0x38, 0x3F, 0xFF,
                        0x3F, 0xFF, 0x00, 0x38, 0x00, 0x00,0x00, 0x00, 0x00, 0x00,
                        0x00, 0x00, 0x00, 0x78, 0x01, 0xF8,0x07, 0x98, 0x1E, 0x18,
                        0x3F, 0xFF, 0x3F, 0xFF, 0x00, 0x18,0x00, 0x00, 0x00, 0x00
                    };
                    currency.Reserve = new byte[] { 0x00 };
                    currency.Foot = currency.BuildFoot();

                    this.LocalSocket.BeginSend(currency.BuildFull());

                    this.LastRecieveDatTime = DateTime.Now;
                }
            }
        }