SpamAssassinListener implements SpamEventListener { @VisibleForTesting boolean isMessageMovedOutOfSpamMailbox(MessageMoveEvent event) { try { MailboxId spamMailboxId = systemMailboxesProvider.findMailbox(Role.SPAM, event.getUsername()).getId(); MailboxId trashMailboxId = systemMailboxesProvider.findMailbox(Role.TRASH, event.getUsername()).getId(); return event.getMessageMoves().removedMailboxIds().contains(spamMailboxId) && !event.getMessageMoves().addedMailboxIds().contains(trashMailboxId); } catch (MailboxException e) { LOGGER.warn("Could not resolve Spam mailbox", e); return false; } } @Inject  SpamAssassinListener(SpamAssassin spamAssassin, SystemMailboxesProvider systemMailboxesProvider, MailboxManager mailboxManager, MailboxSessionMapperFactory mapperFactory, ExecutionMode executionMode); @Override Group getDefaultGroup(); @Override ExecutionMode getExecutionMode(); @Override boolean isHandling(Event event); @Override void event(Event event);  }
@Test void isMessageMovedOutOfSpamMailboxShouldReturnFalseWhenMessageMovedBetweenNonSpamMailboxes() { MessageMoveEvent messageMoveEvent = MessageMoveEvent.builder() .session(MAILBOX_SESSION) .messageMoves(MessageMoves.builder() .previousMailboxIds(mailboxId1) .targetMailboxIds(mailboxId2) .build()) .messageId(MESSAGE_ID) .build(); assertThat(listener.isMessageMovedOutOfSpamMailbox(messageMoveEvent)).isFalse(); }
@Test void isMessageMovedOutOfSpamMailboxShouldReturnFalseWhenMessageMovedOutOfCapitalSpamMailbox() { MessageMoveEvent messageMoveEvent = MessageMoveEvent.builder() .session(MAILBOX_SESSION) .messageMoves(MessageMoves.builder() .previousMailboxIds(spamCapitalMailboxId) .targetMailboxIds(mailboxId2) .build()) .messageId(MESSAGE_ID) .build(); assertThat(listener.isMessageMovedOutOfSpamMailbox(messageMoveEvent)).isFalse(); }
@Test void isMessageMovedOutOfSpamMailboxShouldReturnTrueWhenMessageMovedOutOfSpamMailbox() { MessageMoveEvent messageMoveEvent = MessageMoveEvent.builder() .session(MAILBOX_SESSION) .messageMoves(MessageMoves.builder() .previousMailboxIds(spamMailboxId) .targetMailboxIds(mailboxId2) .build()) .messageId(MESSAGE_ID) .build(); assertThat(listener.isMessageMovedOutOfSpamMailbox(messageMoveEvent)).isTrue(); }
@Test void isMessageMovedOutOfSpamMailboxShouldReturnFalseWhenMessageMovedToTrash() { MessageMoveEvent messageMoveEvent = MessageMoveEvent.builder() .session(MAILBOX_SESSION) .messageMoves(MessageMoves.builder() .previousMailboxIds(spamMailboxId) .targetMailboxIds(trashMailboxId) .build()) .messageId(MESSAGE_ID) .build(); assertThat(listener.isMessageMovedOutOfSpamMailbox(messageMoveEvent)).isFalse(); }