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