public Rule.Action.AppendInMailboxes toAppendInMailboxes() { return Rule.Action.AppendInMailboxes.withMailboxIds(mailboxIds); } }
public static Action of(AppendInMailboxes appendInMailboxes) { return new Action(appendInMailboxes); }
public void defineRulesForRecipient1(List<Rule.Condition> conditions) { AtomicInteger counter = new AtomicInteger(); ImmutableList<Rule> rules = conditions .stream() .map(condition -> Rule.builder() .id(Rule.Id.of(String.valueOf(counter.incrementAndGet()))) .name(String.valueOf(counter.incrementAndGet())) .condition(condition) .action(Rule.Action.of(Rule.Action.AppendInMailboxes.withMailboxIds(testSystem.getRecipient1MailboxId().serialize()))) .build()) .collect(ImmutableList.toImmutableList()); testSystem.getFilteringManagement().defineRulesForUser(User.fromUsername(RECIPIENT_1_USERNAME), rules); }
public static ConditionDTO from(Rule.Condition condition) { return new ConditionDTO( condition.getField().asString(), condition.getComparator().asString(), condition.getValue()); }
public static JmapRuleDTO from(Rule rule) { return new JmapRuleDTO(rule.getId().asString(), rule.getName(), ConditionDTO.from(rule.getCondition()), ActionDTO.from(rule.getAction())); }
default void defineRulesForUser(User user, Rule... rules) { defineRulesForUser(user, Arrays.asList(rules)); }
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()); if (!idWithMultipleMailboxes.isEmpty()) { throw new MultipleMailboxIdException(idWithMultipleMailboxes); } }
public void apply(Stream<Rule.Action> actions) { actions.flatMap(action -> action.getAppendInMailboxes().getMailboxIds().stream()) .map(mailboxIdFactory::fromString) .forEach(this::addStorageDirective); }
public Rule.Action toAction() { return Rule.Action.of(appendIn.toAppendInMailboxes()); } }
public static Builder builder() { return new Builder(); }
public static AppendInMailboxes withMailboxIds(List<String> mailboxIds) { Preconditions.checkNotNull(mailboxIds, "mailboxIds should not be null"); return new AppendInMailboxes(mailboxIds); }
public Rule build() { Preconditions.checkState(id.isPresent(), "`id` is mandatory"); Preconditions.checkState(name.isPresent(), "`name` is mandatory"); Preconditions.checkState(condition.isPresent(), "`condition` is mandatory"); Preconditions.checkState(action.isPresent(), "`action` is mandatory"); return new Rule(id.get(), name.get(), condition.get(), action.get()); }
public static AppendInMailboxesDTO from(Rule.Action.AppendInMailboxes appendInMailboxes) { return new AppendInMailboxesDTO(appendInMailboxes.getMailboxIds()); }
@Test void serviceShouldNotThrowWhenUnknownMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; testSystem.getFilteringManagement().defineRulesForUser(User.fromUsername(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()); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); assertThatCode(() -> testSystem.getJmapFiltering().service(mail)) .doesNotThrowAnyException(); }
public static AppendInMailboxes withMailboxIds(String... mailboxIds) { return withMailboxIds(Arrays.asList(mailboxIds)); }
default void clearRulesForUser(User user) { defineRulesForUser(user, ImmutableList.of()); }
@Test void mailDirectiveShouldNotBeSetWhenUnknownMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; testSystem.getFilteringManagement().defineRulesForUser(User.fromUsername(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()); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); testSystem.getJmapFiltering().service(mail); assertThat(mail.getAttribute(DELIVERY_PATH_PREFIX + RECIPIENT_1_USERNAME)) .isNull(); }
@Test void rulesWithMultipleMailboxIdsShouldFallbackWhenInvalidFirstMailboxId(JMAPFilteringTestSystem testSystem) throws Exception { String unknownMailboxId = "4242"; testSystem.getFilteringManagement().defineRulesForUser(User.fromUsername(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, testSystem.getRecipient1MailboxId().serialize()))) .build()); FakeMail mail = testSystem.asMail(mimeMessageBuilder() .addFrom(FRED_MARTIN_FULL_SCRAMBLED_ADDRESS)); testSystem.getJmapFiltering().service(mail); assertThat(mail.getAttribute(DELIVERY_PATH_PREFIX + RECIPIENT_1_USERNAME)) .isEqualTo(RECIPIENT_1_MAILBOX_1); } }