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 488ebd20d69c99492006750a5296d3b2343df361 Author: Benoit Tellier <[email protected]> AuthorDate: Sun Apr 5 15:30:48 2020 +0700 JAMES-3078 JMAP Get/Set filter should be reactive --- .../jmap/api/filtering/FilteringManagement.java | 10 ++-- .../impl/EventSourcingFilteringManagement.java | 4 +- .../api/filtering/FilteringManagementContract.java | 21 +++++---- .../james/jmap/draft/methods/GetFilterMethod.java | 33 +++++-------- .../james/jmap/draft/methods/SetFilterMethod.java | 55 ++++++++++++---------- .../jmap/mailet/filter/JMAPFilteringExtension.java | 4 +- .../jmap/mailet/filter/JMAPFilteringTest.java | 30 ++++++------ 7 files changed, 80 insertions(+), 77 deletions(-) diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java index 6e780f9..3305ead 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java @@ -29,14 +29,14 @@ import com.google.common.collect.ImmutableList; public interface FilteringManagement { - void defineRulesForUser(Username username, List<Rule> rules); + Publisher<Void> defineRulesForUser(Username username, List<Rule> rules); - default void defineRulesForUser(Username username, Rule... rules) { - defineRulesForUser(username, Arrays.asList(rules)); + default Publisher<Void> defineRulesForUser(Username username, Rule... rules) { + return defineRulesForUser(username, Arrays.asList(rules)); } - default void clearRulesForUser(Username username) { - defineRulesForUser(username, ImmutableList.of()); + default Publisher<Void> clearRulesForUser(Username username) { + return defineRulesForUser(username, ImmutableList.of()); } Publisher<Rule> listRulesForUser(Username username); diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java index 429cc79..72af24d 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java @@ -54,8 +54,8 @@ public class EventSourcingFilteringManagement implements FilteringManagement { } @Override - public void defineRulesForUser(Username username, List<Rule> rules) { - Mono.from(eventSourcingSystem.dispatch(new DefineRulesCommand(username, rules))).block(); + public Publisher<Void> defineRulesForUser(Username username, List<Rule> rules) { + return eventSourcingSystem.dispatch(new DefineRulesCommand(username, rules)); } @Override diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java index 7a355d4..6dcf8c6 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java @@ -36,6 +36,7 @@ import org.apache.james.jmap.api.filtering.impl.EventSourcingFilteringManagement import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; public interface FilteringManagementContract { @@ -63,7 +64,7 @@ public interface FilteringManagementContract { default void listingRulesShouldReturnDefinedRules(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - testee.defineRulesForUser(USERNAME, RULE_1, RULE_2); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_1, RULE_2)).block(); assertThat(Flux.from(testee.listRulesForUser(USERNAME)).toStream()) .containsExactly(RULE_1, RULE_2); @@ -73,8 +74,8 @@ public interface FilteringManagementContract { default void listingRulesShouldReturnLastDefinedRules(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - testee.defineRulesForUser(USERNAME, RULE_1, RULE_2); - testee.defineRulesForUser(USERNAME, RULE_2, RULE_1); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_1, RULE_2)).block(); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_2, RULE_1)).block(); assertThat(Flux.from(testee.listRulesForUser(USERNAME)).toStream()) .containsExactly(RULE_2, RULE_1); @@ -84,7 +85,7 @@ public interface FilteringManagementContract { default void definingRulesShouldThrowWhenDuplicateRules(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - assertThatThrownBy(() -> testee.defineRulesForUser(USERNAME, RULE_1, RULE_1)) + assertThatThrownBy(() -> Mono.from(testee.defineRulesForUser(USERNAME, RULE_1, RULE_1)).block()) .isInstanceOf(IllegalArgumentException.class); } @@ -92,7 +93,7 @@ public interface FilteringManagementContract { default void definingRulesShouldThrowWhenNullUser(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - assertThatThrownBy(() -> testee.defineRulesForUser(null, RULE_1, RULE_1)) + assertThatThrownBy(() -> Mono.from(testee.defineRulesForUser(null, RULE_1, RULE_1)).block()) .isInstanceOf(NullPointerException.class); } @@ -101,14 +102,14 @@ public interface FilteringManagementContract { FilteringManagement testee = instantiateFilteringManagement(eventStore); List<Rule> rules = null; - assertThatThrownBy(() -> testee.defineRulesForUser(USERNAME, rules)) + assertThatThrownBy(() -> Mono.from(testee.defineRulesForUser(USERNAME, rules)).block()) .isInstanceOf(NullPointerException.class); } @Test default void definingRulesShouldKeepOrdering(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - testee.defineRulesForUser(USERNAME, RULE_3, RULE_2, RULE_1); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_3, RULE_2, RULE_1)).block(); assertThat(Flux.from(testee.listRulesForUser(USERNAME)).toStream()) .containsExactly(RULE_3, RULE_2, RULE_1); @@ -118,8 +119,8 @@ public interface FilteringManagementContract { default void definingEmptyRuleListShouldRemoveExistingRules(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - testee.defineRulesForUser(USERNAME, RULE_3, RULE_2, RULE_1); - testee.clearRulesForUser(USERNAME); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_3, RULE_2, RULE_1)).block(); + Mono.from(testee.clearRulesForUser(USERNAME)).block(); assertThat(Flux.from(testee.listRulesForUser(USERNAME)).toStream()).isEmpty(); } @@ -128,7 +129,7 @@ public interface FilteringManagementContract { default void allFieldsAndComparatorShouldWellBeStored(EventStore eventStore) { FilteringManagement testee = instantiateFilteringManagement(eventStore); - testee.defineRulesForUser(USERNAME, RULE_FROM, RULE_RECIPIENT, RULE_SUBJECT, RULE_TO, RULE_1); + Mono.from(testee.defineRulesForUser(USERNAME, RULE_FROM, RULE_RECIPIENT, RULE_SUBJECT, RULE_TO, RULE_1)).block(); assertThat(Flux.from(testee.listRulesForUser(USERNAME)).toStream()) .containsExactly(RULE_FROM, RULE_RECIPIENT, RULE_SUBJECT, RULE_TO, RULE_1); diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetFilterMethod.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetFilterMethod.java index 618d862..6c1ca63 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetFilterMethod.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetFilterMethod.java @@ -19,7 +19,7 @@ package org.apache.james.jmap.draft.methods; -import java.util.stream.Stream; +import static org.apache.james.util.ReactorUtils.context; import javax.inject.Inject; @@ -67,7 +67,7 @@ public class GetFilterMethod implements Method { } @Override - public Stream<JmapResponse> processToStream(JmapRequest request, MethodCallId methodCallId, MailboxSession mailboxSession) { + public Flux<JmapResponse> process(JmapRequest request, MethodCallId methodCallId, MailboxSession mailboxSession) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(methodCallId); Preconditions.checkNotNull(mailboxSession); @@ -75,26 +75,21 @@ public class GetFilterMethod implements Method { GetFilterRequest filterRequest = (GetFilterRequest) request; - - return MDCBuilder.create() - .addContext(MDCBuilder.ACTION, "GET_FILTER") - .wrapArround( - () -> metricFactory.runPublishingTimerMetricLogP99(JMAP_PREFIX + METHOD_NAME.getName(), - () -> process(methodCallId, mailboxSession, filterRequest))) - .get(); + return Flux.from(metricFactory.runPublishingTimerMetricLogP99(JMAP_PREFIX + METHOD_NAME.getName(), + () -> process(methodCallId, mailboxSession, filterRequest) + .subscriberContext(context("GET_FILTER", MDCBuilder.of(MDCBuilder.ACTION, "GET_FILTER"))))); } - private Stream<JmapResponse> process(MethodCallId methodCallId, MailboxSession mailboxSession, GetFilterRequest request) { - try { - return retrieveFilter(methodCallId, mailboxSession.getUser()); - } catch (Exception e) { - LOGGER.warn("Failed to retrieve filter"); + private Mono<JmapResponse> process(MethodCallId methodCallId, MailboxSession mailboxSession, GetFilterRequest request) { + return retrieveFilter(methodCallId, mailboxSession.getUser()) + .onErrorResume(e -> { + LOGGER.warn("Failed to retrieve filter", e); - return Stream.of(unKnownError(methodCallId)); - } + return Mono.just(unKnownError(methodCallId)); + }); } - private Stream<JmapResponse> retrieveFilter(MethodCallId methodCallId, Username username) { + private Mono<JmapResponse> retrieveFilter(MethodCallId methodCallId, Username username) { return Flux.from(filteringManagement.listRulesForUser(username)) .collect(Guavate.toImmutableList()) .map(rules -> GetFilterResponse.builder() @@ -104,9 +99,7 @@ public class GetFilterMethod implements Method { .methodCallId(methodCallId) .response(getFilterResponse) .responseName(RESPONSE_NAME) - .build()) - .flatMapMany(Mono::just) - .toStream(); + .build()); } private JmapResponse unKnownError(MethodCallId methodCallId) { diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetFilterMethod.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetFilterMethod.java index b6e82d7..f0ac91a 100644 --- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetFilterMethod.java +++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetFilterMethod.java @@ -19,11 +19,13 @@ package org.apache.james.jmap.draft.methods; +import static org.apache.james.jmap.http.LoggingHelper.jmapAction; +import static org.apache.james.util.ReactorUtils.context; + import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.inject.Inject; @@ -38,13 +40,18 @@ import org.apache.james.jmap.draft.model.SetFilterResponse; import org.apache.james.mailbox.MailboxSession; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; +import org.apache.james.util.ReactorUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.steveash.guavate.Guavate; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableListMultimap; +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; + public class SetFilterMethod implements Method { public static class DuplicatedRuleException extends Exception { @@ -102,7 +109,7 @@ public class SetFilterMethod implements Method { } @Override - public Stream<JmapResponse> processToStream(JmapRequest request, MethodCallId methodCallId, MailboxSession mailboxSession) { + public Flux<JmapResponse> process(JmapRequest request, MethodCallId methodCallId, MailboxSession mailboxSession) { Preconditions.checkNotNull(request); Preconditions.checkNotNull(methodCallId); Preconditions.checkNotNull(mailboxSession); @@ -111,52 +118,50 @@ public class SetFilterMethod implements Method { SetFilterRequest setFilterRequest = (SetFilterRequest) request; - return MDCBuilder.create() - .addContext(MDCBuilder.ACTION, "SET_FILTER") - .addContext("update", setFilterRequest.getSingleton()) - .wrapArround( - () -> metricFactory.runPublishingTimerMetricLogP99(JMAP_PREFIX + METHOD_NAME.getName(), - () -> process(methodCallId, mailboxSession, setFilterRequest))) - .get(); + return Flux.from(metricFactory.runPublishingTimerMetricLogP99(JMAP_PREFIX + METHOD_NAME.getName(), + () -> process(methodCallId, mailboxSession, setFilterRequest) + .subscriberContext(jmapAction("SET_FILTER")) + .subscriberContext(context("SET_FILTER", MDCBuilder.of("update", setFilterRequest.getSingleton()))))); } - private Stream<JmapResponse> process(MethodCallId methodCallId, MailboxSession mailboxSession, SetFilterRequest request) { + private Mono<JmapResponse> process(MethodCallId methodCallId, MailboxSession mailboxSession, SetFilterRequest request) { try { - return updateFilter(methodCallId, request, mailboxSession.getUser()); + return updateFilter(methodCallId, request, mailboxSession.getUser()) + .doOnEach(ReactorUtils.logOnError(e -> LOGGER.warn("Failed setting Rules", e))) + .onErrorResume(e -> Mono.just(unKnownError(methodCallId))); } catch (MultipleMailboxIdException e) { LOGGER.debug("Rule targeting several mailboxes", e); - return Stream.of(multipleMailboxesError(methodCallId, e)); + return Mono.just(multipleMailboxesError(methodCallId, e)); } catch (DuplicatedRuleException e) { LOGGER.debug("Duplicated rules", e); - return Stream.of(duplicatedIdsError(methodCallId, e)); - } catch (Exception e) { + return Mono.just(duplicatedIdsError(methodCallId, e)); + } catch (Exception e) { LOGGER.warn("Failed setting Rules", e); - return Stream.of(unKnownError(methodCallId)); + return Mono.just(unKnownError(methodCallId)); } } - private Stream<JmapResponse> updateFilter(MethodCallId methodCallId, SetFilterRequest request, Username username) throws DuplicatedRuleException, MultipleMailboxIdException { + private Mono<JmapResponse> updateFilter(MethodCallId methodCallId, SetFilterRequest request, Username username) throws DuplicatedRuleException, MultipleMailboxIdException { ImmutableList<Rule> rules = request.getSingleton().stream() .map(JmapRuleDTO::toRule) - .collect(ImmutableList.toImmutableList()); + .collect(Guavate.toImmutableList()); ensureNoDuplicatedRules(rules); ensureNoMultipleMailboxesRules(rules); - filteringManagement.defineRulesForUser(username, rules); - - return Stream.of(JmapResponse.builder() - .methodCallId(methodCallId) - .responseName(RESPONSE_NAME) - .response(SetFilterResponse.updated()) - .build()); + return Mono.from(filteringManagement.defineRulesForUser(username, rules)) + .thenReturn(JmapResponse.builder() + .methodCallId(methodCallId) + .responseName(RESPONSE_NAME) + .response(SetFilterResponse.updated()) + .build()); } private void ensureNoMultipleMailboxesRules(ImmutableList<Rule> rules) throws MultipleMailboxIdException { ImmutableList<Rule.Id> idWithMultipleMailboxes = rules.stream() .filter(rule -> rule.getAction().getAppendInMailboxes().getMailboxIds().size() > 1) .map(Rule::getId) - .collect(ImmutableList.toImmutableList()); + .collect(Guavate.toImmutableList()); if (!idWithMultipleMailboxes.isEmpty()) { throw new MultipleMailboxIdException(idWithMultipleMailboxes); diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java index 4232100..6ad8f2e 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java @@ -53,6 +53,8 @@ import org.junit.jupiter.api.extension.ParameterResolver; import com.google.common.collect.ImmutableList; +import reactor.core.publisher.Mono; + public class JMAPFilteringExtension implements BeforeEachCallback, ParameterResolver { private static final DomainList NO_DOMAIN_LIST = null; @@ -114,7 +116,7 @@ public class JMAPFilteringExtension implements BeforeEachCallback, ParameterReso .build()) .collect(ImmutableList.toImmutableList()); - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, rules); + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, rules)).block(); } public FakeMail asMail(MimeMessageBuilder mimeMessageBuilder) throws MessagingException { diff --git a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java index b28d8e1..27d503a 100644 --- a/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java +++ b/server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java @@ -80,6 +80,8 @@ import com.github.fge.lambdas.Throwing; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import reactor.core.publisher.Mono; + @ExtendWith(JMAPFilteringExtension.class) class JMAPFilteringTest { @@ -692,7 +694,7 @@ class JMAPFilteringTest { MailboxId mailbox2Id = testSystem.createMailbox(RECIPIENT_1_USERNAME, "RECIPIENT_1_MAILBOX_2"); MailboxId mailbox3Id = testSystem.createMailbox(RECIPIENT_1_USERNAME, "RECIPIENT_1_MAILBOX_3"); - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") @@ -710,7 +712,7 @@ class JMAPFilteringTest { .name("rule 3") .condition(Rule.Condition.of(TO, EXACTLY_EQUALS, USER_3_ADDRESS)) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(mailbox3Id.serialize()))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(USER_2_ADDRESS) @@ -729,7 +731,7 @@ class JMAPFilteringTest { MailboxId mailbox2Id = testSystem.createMailbox(RECIPIENT_1_USERNAME, "RECIPIENT_1_MAILBOX_2"); MailboxId mailbox3Id = testSystem.createMailbox(RECIPIENT_1_USERNAME, "RECIPIENT_1_MAILBOX_3"); - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") @@ -738,7 +740,7 @@ class JMAPFilteringTest { mailbox3Id.serialize(), mailbox2Id.serialize(), mailbox1Id.serialize())))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .setSubject(UNSCRAMBLED_SUBJECT)); @@ -753,7 +755,7 @@ class JMAPFilteringTest { void rulesWithEmptyMailboxIdsShouldBeSkept(JMAPFilteringTestSystem testSystem) throws Exception { MailboxId mailbox1Id = testSystem.createMailbox(RECIPIENT_1_USERNAME, "RECIPIENT_1_MAILBOX_1"); - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") @@ -766,7 +768,7 @@ class JMAPFilteringTest { .condition(Rule.Condition.of(SUBJECT, CONTAINS, UNSCRAMBLED_SUBJECT)) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(ImmutableList.of( mailbox1Id.serialize())))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .setSubject(UNSCRAMBLED_SUBJECT)); @@ -822,13 +824,13 @@ class JMAPFilteringTest { @Test void serviceShouldNotThrowWhenUnknownMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") .condition(Rule.Condition.of(FROM, CONTAINS, FRED_MARTIN_FULLNAME)) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(unknownMailboxId))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); @@ -840,13 +842,13 @@ class JMAPFilteringTest { @Test void mailDirectiveShouldNotBeSetWhenUnknownMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") .condition(Rule.Condition.of(FROM, CONTAINS, FRED_MARTIN_FULLNAME)) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(unknownMailboxId))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); @@ -860,7 +862,7 @@ class JMAPFilteringTest { @Test void rulesWithInvalidMailboxIdsShouldBeSkept(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") @@ -873,7 +875,7 @@ class JMAPFilteringTest { .condition(Rule.Condition.of(FROM, CONTAINS, FRED_MARTIN_FULLNAME)) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds( testSystem.getRecipient1MailboxId().serialize()))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); @@ -888,7 +890,7 @@ class JMAPFilteringTest { void rulesWithMultipleMailboxIdsShouldFallbackWhenInvalidFirstMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; - testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, + Mono.from(testSystem.getFilteringManagement().defineRulesForUser(RECIPIENT_1_USERNAME, Rule.builder() .id(Rule.Id.of("1")) .name("rule 1") @@ -896,7 +898,7 @@ class JMAPFilteringTest { .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds( unknownMailboxId, testSystem.getRecipient1MailboxId().serialize()))) - .build()); + .build())).block(); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
