This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit b99353a17dd1e1e9163fba45425b520bca8c5e48
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Mon Dec 18 17:54:10 2023 +0100

    JAMES-3944 Forcing local copy out of forwards rule
---
 .../mailets/FilterForwardIntegrationTest.java      | 12 ++++++-----
 .../james/mailets/ForwardLoopIntegrationTest.java  | 24 ++++------------------
 .../james/jmap/mailet/filter/ActionApplier.java    |  9 ++++++--
 3 files changed, 18 insertions(+), 27 deletions(-)

diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterForwardIntegrationTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterForwardIntegrationTest.java
index a3e8654734..adeb67b63b 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterForwardIntegrationTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterForwardIntegrationTest.java
@@ -126,14 +126,16 @@ public class FilterForwardIntegrationTest {
             .authenticate(ALICE.asString(), PASSWORD)
             .sendMessage(ALICE.asString(), BOB.asString());
 
-        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1L);
+        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2L);
 
         SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
-            Mail mail1 = mailRepositoryProbe.listMails(CUSTOM_REPOSITORY)
-                .findAny().get();
+            Mail mail1 = mailRepositoryProbe.listMails(CUSTOM_REPOSITORY, 
BOB.asMailAddress()).get(0);
+            
softly.assertThat(mail1.getRecipients()).containsOnly(BOB.asMailAddress());
+            
softly.assertThat(mail1.getMaybeSender().asOptional()).contains(ALICE.asMailAddress());
 
-            
softly.assertThat(mail1.getRecipients()).containsOnly(BOB.asMailAddress(), 
CEDRIC.asMailAddress());
-            
softly.assertThat(mail1.getMaybeSender().asOptional()).contains(BOB.asMailAddress());
+            Mail mail2 = mailRepositoryProbe.listMails(CUSTOM_REPOSITORY, 
CEDRIC.asMailAddress()).get(0);
+            
softly.assertThat(mail2.getRecipients()).containsOnly(CEDRIC.asMailAddress());
+            
softly.assertThat(mail2.getMaybeSender().asOptional()).contains(BOB.asMailAddress());
         }));
     }
 
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
index a2f665a869..5c86a41d6e 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
@@ -27,6 +27,7 @@ import static 
org.apache.james.mailets.configuration.Constants.PASSWORD;
 
 import java.io.File;
 import java.util.List;
+import java.util.stream.Stream;
 
 import org.apache.james.core.Username;
 import org.apache.james.jmap.api.filtering.Rule;
@@ -140,14 +141,7 @@ public class ForwardLoopIntegrationTest {
             .sendMessage(SENDER.asString(), ALICE.asString());
 
         Awaitility.await().until(() -> 
jamesServer.getProbe(SpoolerProbe.class).processingFinished());
-        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1L);
-
-        SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
-            List<Mail> mails = mailRepositoryProbe.listMails(CUSTOM_REPOSITORY)
-                .collect(ImmutableList.toImmutableList());
-
-            
softly.assertThat(mails.get(0).getRecipients()).containsOnly(CEDRIC.asMailAddress());
-        }));
+        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 0L);
     }
 
     @Test
@@ -161,14 +155,11 @@ public class ForwardLoopIntegrationTest {
             .sendMessage(SENDER.asString(), ALICE.asString());
 
         Awaitility.await().until(() -> 
jamesServer.getProbe(SpoolerProbe.class).processingFinished());
-        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 2L);
+        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1L);
 
         SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
             List<Mail> mailListOne = 
mailRepositoryProbe.listMails(CUSTOM_REPOSITORY, ALICE.asMailAddress());
             
softly.assertThat(mailListOne.get(0).getRecipients()).containsOnly(ALICE.asMailAddress());
-
-            List<Mail> mailListTwo = 
mailRepositoryProbe.listMails(CUSTOM_REPOSITORY, CEDRIC.asMailAddress());
-            
softly.assertThat(mailListTwo.get(0).getRecipients()).containsOnly(CEDRIC.asMailAddress());
         }));
     }
 
@@ -218,14 +209,7 @@ public class ForwardLoopIntegrationTest {
             .sendMessage(SENDER.asString(), ALICE.asString());
 
         Awaitility.await().until(() -> 
jamesServer.getProbe(SpoolerProbe.class).processingFinished());
-        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 1L);
-
-        SoftAssertions.assertSoftly(Throwing.consumer(softly -> {
-            List<Mail> mails = mailRepositoryProbe.listMails(CUSTOM_REPOSITORY)
-                .collect(ImmutableList.toImmutableList());
-
-            
softly.assertThat(mails.get(0).getRecipients()).containsOnly(CEDRIC.asMailAddress());
-        }));
+        Awaitility.await().until(() -> 
mailRepositoryProbe.getRepositoryMailCount(CUSTOM_REPOSITORY) == 0L);
     }
 
     @Test
diff --git 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
index 1be918cc68..f5c2038223 100644
--- 
a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
+++ 
b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Stream;
 
+import com.google.common.collect.Sets;
 import javax.inject.Inject;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
@@ -140,9 +141,13 @@ public class ActionApplier {
                 }
 
                 Set<MailAddress> newRecipients = getNewRecipients(forward, 
recordedRecipients);
-                if (!newRecipients.isEmpty()) {
+                Set<MailAddress> forwardRecipients = 
Sets.difference(newRecipients, ImmutableSet.of(mailAddress));
+
+                if (!forwardRecipients.isEmpty()) {
+                    sendACopy(recordedRecipients, forwardRecipients);
+                }
+                if (!newRecipients.contains(mailAddress)) {
                     removeFromRecipients();
-                    sendACopy(mailetContext, mailAddress, recordedRecipients, 
newRecipients);
                 }
             }));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org
For additional commands, e-mail: notifications-h...@james.apache.org

Reply via email to