コード例 #1
0
        public async Task <Transaction> GetTransactionFromNodeAsync(string transactionHash)
        {
            var body = new Models.Node.JsonRpcBody("eth_getTransactionByHash", 1);

            body.AddParam(transactionHash);

            var client = new RestClient(GetNodeUrl());

            var request = new RestRequest(Method.POST);

            request.AddParameter("application/json; charset=utf-8", Newtonsoft.Json.JsonConvert.SerializeObject(body), ParameterType.RequestBody);
            request.RequestFormat = DataFormat.Json;

            var cancellationTokenSource = new CancellationTokenSource();
            var restResponse            = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);

            if (restResponse.StatusCode == HttpStatusCode.OK)
            {
                var response = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.Node.GetTransactionResponse>(restResponse.Content);
                return(response.result != null?ConversionService.Convert(response.result) : null);
            }
            else
            {
                if (string.IsNullOrEmpty(restResponse.Content))
                {
                    throw new Exception($"Error posting to node: {restResponse.ErrorException}");
                }
                else
                {
                    throw new Exception($"Error posting to node: {restResponse.Content}");
                }
            }
        }
コード例 #2
0
        public async Task <Models.DTOs.Block> GetBlockFromNodeAsync(ulong blockNumber)
        {
            var body = new Models.Node.JsonRpcBody("eth_getBlockByNumber", 1);

            body.AddParam(blockNumber.ToHexString());
            body.AddParam(true);

            var client = new RestClient(GetNodeUrl());

            var request = new RestRequest(Method.POST);

            request.AddParameter("application/json; charset=utf-8", JsonConvert.SerializeObject(body), ParameterType.RequestBody);
            request.RequestFormat = DataFormat.Json;

            var cancellationTokenSource = new CancellationTokenSource();
            var restResponse            = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);

            if (restResponse.StatusCode == HttpStatusCode.OK)
            {
                var response = JsonConvert.DeserializeObject <Models.Node.GetBlockResponse>(restResponse.Content);
                return(ConversionService.Convert(response.result));
            }
            else
            {
                if (string.IsNullOrEmpty(restResponse.Content))
                {
                    throw new Exception($"Error posting to node: {restResponse.ErrorException}");
                }
                else
                {
                    throw new Exception($"Error posting to node: {restResponse.Content}");
                }
            }
        }
コード例 #3
0
        public async Task Convert_should_return_problem_details_when_rate_service_returns_problem_details()
        {
            const int    code            = 499;
            const string details         = "Error message";
            var          rateServiceMock = new Mock <IRateService>();

            rateServiceMock.Setup(m => m.Get(It.IsAny <Currencies>(), It.IsAny <Currencies>()))
            .ReturnsAsync(Result.Failure <decimal, ProblemDetails>(new ProblemDetails {
                Detail = details, Status = code
            }));

            var service = new ConversionService(new NullLoggerFactory(), rateServiceMock.Object, _fixture.Factory);

            var(_, isFailure, _, error) = await service.Convert(Currencies.USD, Currencies.AED, _values);

            Assert.True(isFailure);
            Assert.Equal(code, error.Status);
            Assert.Equal(details, error.Detail);
        }
コード例 #4
0
        public void ConvertCorrectly(string fromName, string toName, decimal amount, decimal rate)
        {
            //Arrange
            var mockCurrencySet = new Mock <DbSet <Currency> >();

            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.Provider).Returns(Currencies.Provider);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.Expression).Returns(Currencies.Expression);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.ElementType).Returns(Currencies.ElementType);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.GetEnumerator()).Returns(Currencies.GetEnumerator());

            var mockConversionSet = new Mock <DbSet <Conversion> >();

            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.Provider).Returns(Conversions.Provider);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.Expression).Returns(Conversions.Expression);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.ElementType).Returns(Conversions.ElementType);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.GetEnumerator()).Returns(Conversions.GetEnumerator());

            var mockLogger = new Mock <ILogger <BaseService> >();

            var mockContext = new Mock <MainDbContext>();

            mockContext.Setup(c => c.Currencies).Returns(mockCurrencySet.Object);
            mockContext.Setup(c => c.Conversions).Returns(mockConversionSet.Object);

            var mockConversionService = new Mock <IConversionAuditService>();

            var from = Currencies.Single(x => x.Name == fromName);
            var to   = Currencies.Single(x => x.Name == toName);

            var expected = amount * rate;

            //Act

            var sut    = new ConversionService(mockContext.Object, mockConversionService.Object, mockLogger.Object);
            var actual = sut.Convert(from, to, amount).Result;

            //Assert

            //When this method was created it threw a not implemented exception
            //Red Assert Assert.That(() => sut.Convert(Currencies[0], Currencies[3]), Throws.Exception.TypeOf<NotImplementedException>());

            Assert.AreEqual(actual, expected);
        }
コード例 #5
0
        public async Task <List <Transaction> > GetPendingTransactionsFromNodeAsync()
        {
            var body = new Models.Node.JsonRpcBody("eth_getBlockByNumber", 1);

            body.AddParam("pending");
            body.AddParam(true);

            var client = new RestClient(GetNodeUrl());

            var request = new RestRequest(Method.POST);

            request.AddParameter("application/json; charset=utf-8", Newtonsoft.Json.JsonConvert.SerializeObject(body), ParameterType.RequestBody);
            request.RequestFormat = DataFormat.Json;

            var cancellationTokenSource = new CancellationTokenSource();
            var restResponse            = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);

            if (restResponse.StatusCode == HttpStatusCode.OK)
            {
                var response = Newtonsoft.Json.JsonConvert.DeserializeObject <Models.Node.GetBlockResponse>(restResponse.Content);

                var transactions = new List <Transaction>();
                if (response.result != null)
                {
                    foreach (var transaction in response.result.transactions)
                    {
                        transactions.Add(ConversionService.Convert(transaction));
                    }
                }
                return(transactions);
            }
            else
            {
                if (string.IsNullOrEmpty(restResponse.Content))
                {
                    throw new Exception($"Error posting to node: {restResponse.ErrorException}");
                }
                else
                {
                    throw new Exception($"Error posting to node: {restResponse.Content}");
                }
            }
        }
コード例 #6
0
        public async Task Convert_should_return_initial_values_when_source_and_target_currencies_are_the_same()
        {
            var rateServiceMock = new Mock <IRateService>();

            rateServiceMock.Setup(s => s.Get(It.IsAny <Currencies>(), It.IsAny <Currencies>()))
            .ReturnsAsync(Result.Success <decimal, ProblemDetails>(1));

            var service = new ConversionService(new NullLoggerFactory(), rateServiceMock.Object, _fixture.Factory);

            var(isSuccess, _, values, _) = await service.Convert(Currencies.USD, Currencies.USD, _values);

            Assert.True(isSuccess);
            Assert.Equal(_values.Count, values.Count);
            Assert.All(values, pair =>
            {
                var(k, v) = pair;
                Assert.Equal(k, v);
                Assert.Contains(k.Amount, _values);
            });
        }
コード例 #7
0
        public async Task Convert_should_return_values_when_source_and_rate_service_returns_rates()
        {
            const decimal rate            = 100m;
            var           rateServiceMock = new Mock <IRateService>();

            rateServiceMock.Setup(m => m.Get(It.IsAny <Currencies>(), It.IsAny <Currencies>()))
            .ReturnsAsync(Result.Success <decimal, ProblemDetails>(rate));

            var service = new ConversionService(new NullLoggerFactory(), rateServiceMock.Object, _fixture.Factory);

            var(isSuccess, _, values, _) = await service.Convert(Currencies.USD, Currencies.AED, _values);

            Assert.True(isSuccess);
            Assert.Equal(_values.Count, values.Count);
            Assert.All(values, pair =>
            {
                var(k, v) = pair;
                Assert.Equal(k.Amount * rate, v.Amount);
                Assert.Contains(k.Amount, _values);
            });
        }
コード例 #8
0
        public void Should_conversion_EUR_USD_49_fail_with_not_connected_currencies()
        {
            // ARRANGE
            List <ExchangeRate> exchangeRates = ConversionServiceFake.ExchangeRatesNotConnected;
            var conversionRequest             = new ConversionRequest("USD", "UAH", 1);

            var mock = new Mock <IShortestPathService>();

            mock.Setup(m => m.Get(It.IsAny <ConversionRequest>(), It.IsAny <IEnumerable <ExchangeRate> >()))
            .Returns(new ShortestPathResult(false, null));

            var svc = new ConversionService(mock.Object);

            // ACT
            var result = svc.Convert(conversionRequest, exchangeRates);

            // ASSERT
            result.IsSuccess.Should().BeFalse();
            result.Amount.Should().BeNull();
            result.ErrorMessage.Should().Be(ConversionErrorMessage.NoPath);
        }
コード例 #9
0
        public void ConvertIncorrectly(string fromName, string toName, decimal amount, decimal rate)
        {
            //Arrange
            var mockCurrencySet = new Mock <DbSet <Currency> >();

            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.Provider).Returns(Currencies.Provider);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.Expression).Returns(Currencies.Expression);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.ElementType).Returns(Currencies.ElementType);
            mockCurrencySet.As <IQueryable <Currency> >().Setup(m => m.GetEnumerator()).Returns(Currencies.GetEnumerator());

            var mockConversionSet = new Mock <DbSet <Conversion> >();

            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.Provider).Returns(Conversions.Provider);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.Expression).Returns(Conversions.Expression);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.ElementType).Returns(Conversions.ElementType);
            mockConversionSet.As <IQueryable <Conversion> >().Setup(m => m.GetEnumerator()).Returns(Conversions.GetEnumerator());

            var mockLogger = new Mock <ILogger <BaseService> >();

            var mockContext = new Mock <MainDbContext>();

            mockContext.Setup(c => c.Currencies).Returns(mockCurrencySet.Object);
            mockContext.Setup(c => c.Conversions).Returns(mockConversionSet.Object);

            var mockConversionService = new Mock <IConversionAuditService>();

            var from = Currencies.Single(x => x.Name == fromName);
            var to   = Currencies.Single(x => x.Name == toName);

            var expected = amount * (rate + 1);

            //Act

            var sut    = new ConversionService(mockContext.Object, mockConversionService.Object, mockLogger.Object);
            var actual = sut.Convert(from, to, amount);

            //Assert

            Assert.AreNotEqual(actual, expected);
        }
コード例 #10
0
        private void StartConversion()
        {
            FileInfo      source     = new FileInfo(SourceFolder);
            DirectoryInfo destFolder = new DirectoryInfo(DestinationFolder);

            if (source.Exists && destFolder.Exists)
            {
                try
                {
                    ConversionService conversionService = new ConversionService();
                    conversionService.Convert(source, destFolder);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Conversion Failed with {ex.Message}", "Conversion Failed");
                }
            }
            else
            {
                MessageBox.Show("One of the files do not exist. Check them and try again", "Input errors");
            }
        }
コード例 #11
0
        public void Should_conversion_45_EUR_return_50_USD_with_connected_currencies()
        {
            // ARRANGE
            List <ExchangeRate> exchangeRates = ConversionServiceFake.ExchangeRatesConnected;
            var conversionRequest             = new ConversionRequest("EUR", "USD", 45);

            var mock = new Mock <IShortestPathService>();

            mock.Setup(m => m.Get(It.IsAny <ConversionRequest>(), It.IsAny <IEnumerable <ExchangeRate> >()))
            .Returns(new ShortestPathResult(true, new List <string> {
                "EUR", "CHF", "USD"
            }.AsEnumerable()));

            var svc = new ConversionService(mock.Object);

            // ACT
            var result = svc.Convert(conversionRequest, exchangeRates);

            // ASSERT
            result.IsSuccess.Should().BeTrue();
            result.Amount.Should().Be(50);
            result.ErrorMessage.Should().BeNull();
        }
コード例 #12
0
        public void Should_conversion_550_EUR_return_59033_JPY_with_connected_currencies_of_exam_instructions()
        {
            // ARRANGE
            List <ExchangeRate> exchangeRates = ConversionServiceFake.ExchangeRatesOfExamInstructions;
            var conversionRequest             = new ConversionRequest("EUR", "JPY", 550);

            // create dependency mock
            var mock = new Mock <IShortestPathService>();

            mock.Setup(m => m.Get(It.IsAny <ConversionRequest>(), It.IsAny <IEnumerable <ExchangeRate> >()))
            .Returns(new ShortestPathResult(true, new List <string> {
                "EUR", "CHF", "AUD", "JPY"
            }.AsEnumerable()));

            var svc = new ConversionService(mock.Object);

            // ACT
            var result = svc.Convert(conversionRequest, exchangeRates);

            // ASSERT
            result.IsSuccess.Should().BeTrue();
            result.Amount.Should().Be(59033);
            result.ErrorMessage.Should().BeNull();
        }
コード例 #13
0
        public void Convert_String32F_returns0C()
        {
            var result = _service.Convert("32", "Fahrenheit", "Celsius");

            Assert.Equal(0m, result);
        }