Example #1
0
        public async Task Build_transfer_coins_transaction()
        {
            //ARRANGE
            string transactionResponse = "transactionResponse";

            var client = PrepareClient <AppSettings>((options) =>
            {
                var aggregator = CreateMocksAndSetupFactories(options);

                options.IntegrationName = $"{nameof(TransactionExecutorClientTests)}+{nameof(Build_transfer_coins_transaction)}";
                aggregator.HealthProvider.Setup(x => x.GetDiseaseAsync()).ReturnsAsync(Disease);
                aggregator.TransferCoinsTransactionsBuilder
                .Setup(x => x.BuildTransferCoinsAsync(It.IsAny <BuildTransferCoinsTransactionRequest>()))
                .ReturnsAsync(new BuildTransactionResponse(Base64String.Encode(transactionResponse)));
            });

            //ACT
            var coinsToSpend = new[]
            {
                new CoinToSpend(new CoinId("tx1", 0),
                                new Asset("assetId"),
                                UMoney.Create(1000, 4),
                                new Address("0x1"),
                                Base64String.Encode("context"),
                                1),
            };
            var coinsToReceive = new[]
            {
                new CoinToReceive(0,
                                  new Asset("assetId"),
                                  UMoney.Create(1000, 4),
                                  new Address("0x2"),
                                  new AddressTag("tag"),
                                  AddressTagType.Text
                                  ),
            };
            var expirationOptions = new ExpirationOptions(DateTime.Now + TimeSpan.FromDays(1));

            var request = new BuildTransferCoinsTransactionRequest(coinsToSpend, coinsToReceive, expirationOptions);
            var result  = await client.BuildTransferCoinsTransactionAsync(request);

            //ASSERT

            Assert.True(result != null);
            Assert.True(result.TransactionContext.DecodeToString() == transactionResponse);
        }
Example #2
0
        public void Bad_request_transfer_coins_transaction()
        {
            //ARRANGE

            var client = PrepareClient <AppSettings>((options) =>
            {
                var aggregator = CreateMocksAndSetupFactories(options);

                options.IntegrationName = $"{nameof(TransactionExecutorClientTests)}+{nameof(Bad_request_transfer_coins_transaction)}";
                aggregator.HealthProvider.Setup(x => x.GetDiseaseAsync()).ReturnsAsync(Disease);
                aggregator.TransferCoinsTransactionsBuilder
                .Setup(x => x.BuildTransferCoinsAsync(It.IsAny <BuildTransferCoinsTransactionRequest>()))
                .ThrowsAsync(new TransactionBuildingException(TransactionBuildingError.RetryLater, "some error"));
            });

            //ACT && ASSERT
            var coinsToSpend = new[]
            {
                new CoinToSpend(new CoinId("tx1", 0),
                                new Asset("assetId"),
                                UMoney.Create(1000, 4),
                                new Address("0x1"),
                                Base64String.Encode("context"),
                                1),
            };
            var coinsToReceive = new[]
            {
                new CoinToReceive(0,
                                  new Asset("assetId"),
                                  UMoney.Create(1000, 4),
                                  new Address("0x2"),
                                  new AddressTag("tag"),
                                  AddressTagType.Text
                                  ),
            };
            var expirationOptions = new ExpirationOptions(DateTime.Now + TimeSpan.FromDays(1));

            Assert.ThrowsAsync <TransactionBuildingWebApiException>(async() =>
            {
                var request = new BuildTransferCoinsTransactionRequest(coinsToSpend, coinsToReceive, expirationOptions);
                await client.BuildTransferCoinsTransactionAsync(request);
            });
        }
        public async Task <BuildTransactionResponse> BuildTransferCoinsAsync(BuildTransferCoinsTransactionRequest request)
        {
            // TODO: prepare data required for signing, return as base58 encoded string
            //
            // Throw:
            // - Lykke.Bil2.Contract.Common.Exceptions.RequestValidationException:
            //     if a transaction can’t be built with the given parameters and
            //     it will be never possible to build the transaction with exactly the same parameters.
            //
            // - Lykke.Bil2.Sdk.TransactionsExecutor.Exceptions.TransactionBuildingException:
            //     if a transaction cannot be built and the reason can be mapped
            //     to the Lykke.Bil2.Contract.TransactionsExecutor.SendingTransactionBuildingError
            //
            // - Lykke.Bil2.Sdk.Exceptions.OperationNotSupportedException:
            //     if "transfer coins" transactions model is not supported by the blockchain.
            //
            // - System.Exception:
            //     if there are any other errors.
            //     Likely a temporary issue with infrastructure or configuration,
            //     request should be repeated later.


            throw new System.NotImplementedException();
        }
 public Task <BuildTransactionResponse> BuildTransferCoinsAsync(BuildTransferCoinsTransactionRequest request)
 {
     throw new OperationNotSupportedException("Integration does not support \"Transfer coins\" transactions model.");
 }
        public async Task <ActionResult <BuildTransactionResponse> > BuildTransferCoins([FromBody] BuildTransferCoinsTransactionRequest request)
        {
            try
            {
                var response = await _transferCoinsTransactionsBuilder.BuildTransferCoinsAsync(request);

                if (response == null)
                {
                    throw new InvalidOperationException("Not null response object expected");
                }

                return(Ok(response));
            }
            catch (TransactionBuildingException ex)
            {
                var errorResponse = BlockchainErrorResponse.CreateFromCode(ex.Error, ex.Message);

                return(BadRequest(errorResponse));
            }
        }