From 2d091226af9e7257601d7f4bb7295a3a580eaccf Mon Sep 17 00:00:00 2001
From: Benoit Lavenier <benoit.lavenier@e-is.pro>
Date: Tue, 17 May 2022 13:11:23 +0200
Subject: [PATCH] [enh] Add unit test for multi dest transfer

---
 .../bma/TransactionRemoteServiceImpl.java     |  7 +++--
 .../bma/TransactionRemoteServiceTest.java     | 28 +++++++++++++------
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
index 7f5b9b99..f59f74a4 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteServiceImpl.java
@@ -67,6 +67,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 
 
 	private CryptoService cryptoService;
+	private BlockchainRemoteService blockchainService;
 
 	public TransactionRemoteServiceImpl() {
 		super();
@@ -76,6 +77,7 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 	public void afterPropertiesSet() {
 		super.afterPropertiesSet();
         cryptoService = ServiceLocator.instance().getCryptoService();
+		blockchainService = ServiceLocator.instance().getBlockchainRemoteService();
 	}
 
 
@@ -106,14 +108,15 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 		Preconditions.checkArgument(peer != null || wallet.getCurrency() != null);
 
 		peer = peer != null ? peer : peerService.getActivePeerByCurrency(wallet.getCurrency());
+
 		// Get current block
-		BlockchainBlock currentBlock = httpService.executeRequest(peer, BlockchainRemoteServiceImpl.URL_BLOCK_CURRENT, BlockchainBlock.class);
+		BlockchainBlock currentBlock = blockchainService.getCurrentBlock(peer, true);
 
 		// http post /tx/process
 		HttpPost httpPost = new HttpPost(httpService.getPath(peer, URL_TX_PROCESS));
 
 		// compute transaction
-		String transaction = getSignedTransaction(peer, wallet, currentBlock,mapPubkeyAmount , 0,
+		String transaction = getSignedTransaction(peer, wallet, currentBlock, mapPubkeyAmount , 0,
 				comment);
 
 		if (log.isDebugEnabled()) {
diff --git a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
index 0b465aa0..361e782f 100644
--- a/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
+++ b/duniter4j-core-client/src/test/java/org/duniter/core/client/service/bma/TransactionRemoteServiceTest.java
@@ -28,6 +28,8 @@ import com.google.common.collect.Maps;
 import lombok.extern.slf4j.Slf4j;
 import org.duniter.core.client.TestResource;
 import org.duniter.core.client.config.Configuration;
+import org.duniter.core.client.model.bma.BlockchainBlock;
+import org.duniter.core.client.model.bma.BlockchainBlocks;
 import org.duniter.core.client.model.bma.TxSource;
 import org.duniter.core.client.model.local.Peer;
 import org.duniter.core.client.model.local.Wallet;
@@ -48,6 +50,8 @@ public class TransactionRemoteServiceTest {
 	public static final TestResource resource = TestResource.create();
 	
 	private TransactionRemoteService service;
+
+	private int unitbase;
 	
 	@Before
 	public void setUp() {
@@ -57,6 +61,12 @@ public class TransactionRemoteServiceTest {
 		Assume.assumeTrue(
 				"Invalid currencies in test fixtures",
 				Objects.equals(resource.getFixtures().getDefaultCurrency(), resource.getFixtures().getCurrency()));
+
+		// Get the current unit base
+		 BlockchainBlock currentBlock = ServiceLocator.instance().getBlockchainRemoteService()
+			.getCurrentBlock(resource.getFixtures().getDefaultCurrency());
+		 Assume.assumeNotNull(currentBlock);
+		this.unitbase = currentBlock.getUnitbase();
 	}
 
 	@Test
@@ -64,12 +74,12 @@ public class TransactionRemoteServiceTest {
 
 		try {
 			service.transfer(
-					createTestWallet(),
-					resource.getFixtures().getOtherUserPublicKey(0),
-					1,
-					"my comments" + System.currentTimeMillis());
+				createTestWallet(),
+				resource.getFixtures().getOtherUserPublicKey(0),
+				BlockchainBlocks.powBase(1, unitbase),
+				"Unit test Duniter4j at " + System.currentTimeMillis());
 		} catch (InsufficientCreditException e) {
-			// OK continue
+			Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e);
 		}
 	}
 
@@ -77,17 +87,17 @@ public class TransactionRemoteServiceTest {
 	public void transferMulti() throws Exception {
 
 		Map<String, Long> destPubkeyAmount = ImmutableMap.<String, Long>builder()
-			.put(resource.getFixtures().getOtherUserPublicKey(0), 1l)
-			.put(resource.getFixtures().getOtherUserPublicKey(1), 2l)
+			.put(resource.getFixtures().getOtherUserPublicKey(0), BlockchainBlocks.powBase(1, unitbase))
+			.put(resource.getFixtures().getOtherUserPublicKey(1), BlockchainBlocks.powBase(2, unitbase))
 			.build();
 
 		try {
 			service.transfer(
 				createTestWallet(),
 				destPubkeyAmount,
-				"my comments" + System.currentTimeMillis());
+				"Unit test Duniter4j at " + System.currentTimeMillis());
 		} catch (InsufficientCreditException e) {
-			// OK continue
+			Assume.assumeNoException(String.format("No credit on the test wallet '%s'", resource.getFixtures().getUserPublicKey().substring(0,8)), e);
 		}
 	}
 	
-- 
GitLab