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

---
 duniter4j-client/pom.xml                      |  2 +-
 duniter4j-core-client/pom.xml                 |  2 +-
 .../service/bma/TransactionRemoteService.java |  2 ++
 .../bma/TransactionRemoteServiceImpl.java     |  4 +++
 .../bma/TransactionRemoteServiceTest.java     | 27 ++++++++++++++++---
 .../duniter4j-core-client-test.properties     |  4 +--
 duniter4j-core-shared/pom.xml                 |  2 +-
 .../org/duniter/core/test/TestFixtures.java   | 13 ++++++---
 pom.xml                                       |  2 +-
 9 files changed, 46 insertions(+), 12 deletions(-)

diff --git a/duniter4j-client/pom.xml b/duniter4j-client/pom.xml
index 6c415140..bd508489 100644
--- a/duniter4j-client/pom.xml
+++ b/duniter4j-client/pom.xml
@@ -3,7 +3,7 @@
     <parent>
         <artifactId>duniter4j</artifactId>
         <groupId>org.duniter</groupId>
-        <version>1.5.1-SNAPSHOT</version>
+        <version>1.5.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/duniter4j-core-client/pom.xml b/duniter4j-core-client/pom.xml
index 1a9a49ea..e732b9db 100644
--- a/duniter4j-core-client/pom.xml
+++ b/duniter4j-core-client/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.duniter</groupId>
     <artifactId>duniter4j</artifactId>
-    <version>1.5.1-SNAPSHOT</version>
+    <version>1.5.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>duniter4j-core-client</artifactId>
diff --git a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
index 0bed305a..41fa40d6 100644
--- a/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
+++ b/duniter4j-core-client/src/main/java/org/duniter/core/client/service/bma/TransactionRemoteService.java
@@ -72,6 +72,8 @@ public interface TransactionRemoteService extends Service {
 	String transfer(Wallet wallet, String destPubKey, long amount,
                     String comment) throws InsufficientCreditException;
 
+    String transfer(Wallet wallet, Map<String,Long> mapPubkeyAmount, String comment) throws InsufficientCreditException;
+
     TxSource getSources(Peer peer, String pubKey);
 	TxSource getSources(String currencyId, String pubKey);
 
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 4faf0a2f..7f5b9b99 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
@@ -87,6 +87,10 @@ public class TransactionRemoteServiceImpl extends BaseRemoteServiceImpl implemen
 		return transfer(null, wallet, destPubKey, amount, comment);
 	}
 
+	@Override
+	public String transfer(Wallet wallet, Map<String, Long> mapPubkeyAmount, String comment) throws InsufficientCreditException {
+		return transfer(null, wallet, mapPubkeyAmount, comment);
+	}
 
 	public String transfer(Peer peer, Wallet wallet, String destPubKey, long amount,
 						   String comment) throws InsufficientCreditException {
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 d3e00fa5..0b465aa0 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
@@ -23,6 +23,9 @@ package org.duniter.core.client.service.bma;
  */
 
 
+import com.google.common.collect.ImmutableMap;
+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.TxSource;
@@ -35,12 +38,12 @@ import org.junit.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Map;
 import java.util.Objects;
 
+@Slf4j
 public class TransactionRemoteServiceTest {
 
-	private static final Logger log = LoggerFactory.getLogger(TransactionRemoteServiceTest.class);
-
 	@ClassRule
 	public static final TestResource resource = TestResource.create();
 	
@@ -62,13 +65,31 @@ public class TransactionRemoteServiceTest {
 		try {
 			service.transfer(
 					createTestWallet(),
-					resource.getFixtures().getOtherUserPublicKey(),
+					resource.getFixtures().getOtherUserPublicKey(0),
 					1,
 					"my comments" + System.currentTimeMillis());
 		} catch (InsufficientCreditException e) {
 			// OK continue
 		}
 	}
+
+	@Test
+	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)
+			.build();
+
+		try {
+			service.transfer(
+				createTestWallet(),
+				destPubkeyAmount,
+				"my comments" + System.currentTimeMillis());
+		} catch (InsufficientCreditException e) {
+			// OK continue
+		}
+	}
 	
 	@Test
 	public void getSources() throws Exception {
diff --git a/duniter4j-core-client/src/test/resources/duniter4j-core-client-test.properties b/duniter4j-core-client/src/test/resources/duniter4j-core-client-test.properties
index de6f268f..9e152261 100644
--- a/duniter4j-core-client/src/test/resources/duniter4j-core-client-test.properties
+++ b/duniter4j-core-client/src/test/resources/duniter4j-core-client-test.properties
@@ -1,5 +1,5 @@
 duniter4j.node.host=g1-test.duniter.org
 duniter4j.node.port=10900
 
-duniter4j.node.elasticsearch.host=localhost
-duniter4j.node.elasticsearch.port=9200
+duniter4j.node.elasticsearch.host=g1-test.data.e-is.pro
+duniter4j.node.elasticsearch.port=80
diff --git a/duniter4j-core-shared/pom.xml b/duniter4j-core-shared/pom.xml
index 84b2a11f..b6721a5c 100644
--- a/duniter4j-core-shared/pom.xml
+++ b/duniter4j-core-shared/pom.xml
@@ -5,7 +5,7 @@
   <parent>
     <groupId>org.duniter</groupId>
     <artifactId>duniter4j</artifactId>
-    <version>1.5.1-SNAPSHOT</version>
+    <version>1.5.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>duniter4j-core-shared</artifactId>
diff --git a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
index 37af62d8..949d70fc 100644
--- a/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
+++ b/duniter4j-core-shared/src/main/java/org/duniter/core/test/TestFixtures.java
@@ -85,9 +85,16 @@ public class TestFixtures {
      * Get a public key of another user, encode in base 58.
      * @return
      */
-    public String getOtherUserPublicKey() {
-    	// = kimamila
-        return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of";
+    public String getOtherUserPublicKey(int index) {
+        switch (index) {
+            case 0:
+            default:
+                // = kimamila
+                return "5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of";
+            case 1:
+                // = ji_emme_test
+                return "BubEHcMEAkC5trxru2D9GAkRsdFbLMQ1Mbgya5ZyndN7";
+        }
     }
 
 }
diff --git a/pom.xml b/pom.xml
index 7982bfaf..60b8405d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
 
   <groupId>org.duniter</groupId>
   <artifactId>duniter4j</artifactId>
-  <version>1.5.1-SNAPSHOT</version>
+  <version>1.5.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Duniter4j</name>
   <description>a Duniter Java Client API</description>
-- 
GitLab