public MoveProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { super(MoveRequest.class, next, mailboxManager, factory, metricFactory); moveCapabilitySupported = mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move); }
@Override public void initModule() { Preconditions.checkArgument(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move), "MOVE support in MailboxManager is required by JMAP Module"); Preconditions.checkArgument(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL), "ACL support in MailboxManager is required by JMAP Module"); EnumSet<MailboxManager.MessageCapabilities> messageCapabilities = mailboxManager.getSupportedMessageCapabilities(); Preconditions.checkArgument(messageCapabilities.contains(MailboxManager.MessageCapabilities.UniqueID), "MessageIdManager is not defined by this Mailbox implementation"); EnumSet<SearchCapabilities> searchCapabilities = mailboxManager.getSupportedSearchCapabilities(); Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.MultimailboxSearch), "Multimailbox search in MailboxManager is required by JMAP Module"); Preconditions.checkArgument(searchCapabilities.contains(MailboxManager.SearchCapabilities.Attachment), "Attachment Search support in MailboxManager is required by JMAP Module"); Preconditions.checkArgument(searchCapabilities.contains(SearchCapabilities.AttachmentFileName), "Attachment file name Search support in MailboxManager is required by JMAP Module"); }
@Test void startShouldFailWhenNoACLCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(false); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.SearchCapabilities.class)); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Test void startShouldFailWhenNoUniqueIDCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.MessageCapabilities.UniqueID))); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.SearchCapabilities.class)); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Test void startShouldFailWhenNoMoveCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(false); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.SearchCapabilities.class)); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Test void startShouldFailWhenNoAttachmentFileNameSearchCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.AttachmentFileName))); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Test void startShouldSucceedWhenRequiredCapabilities(GuiceJamesServer server) throws Exception { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.SearchCapabilities.class)); server.start(); }
@Test void startShouldFailWhenNoAttachmentSearchCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.Attachment))); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Test void startShouldFailWhenNoMultimailboxSearchCapability(GuiceJamesServer server) { when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)).thenReturn(true); when(mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.ACL)).thenReturn(true); when(mailboxManager.getSupportedMessageCapabilities()) .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class)); when(mailboxManager.getSupportedSearchCapabilities()) .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.SearchCapabilities.MultimailboxSearch))); assertThatThrownBy(server::start).isInstanceOf(IllegalArgumentException.class); }
@Before public void setUp() { mockNextProcessor = mock(ImapProcessor.class); mockMailboxManager = mock(MailboxManager.class); mockStatusResponseFactory = mock(StatusResponseFactory.class); mockResponder = mock(ImapProcessor.Responder.class); mockImapSession = mock(ImapSession.class); mockMailboxSession = mock(MailboxSession.class); when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(true); testee = new MoveProcessor(mockNextProcessor, mockMailboxManager, mockStatusResponseFactory, new NoopMetricFactory()); verify(mockMailboxManager).hasCapability(MailboxCapabilities.Move); }
@Test public void getImplementedCapabilitiesShouldNotContainMoveWhenUnSupportedByMailboxManager() { when(mockMailboxManager.hasCapability(eq(MailboxCapabilities.Move))).thenReturn(false); assertThat(new MoveProcessor(mockNextProcessor, mockMailboxManager, mockStatusResponseFactory, new NoopMetricFactory()) .getImplementedCapabilities(null)).isEmpty(); }
final UnsubscribeProcessor unsubscribeProcessor = new UnsubscribeProcessor(closeProcessor, mailboxManager, subscriptionManager, statusResponseFactory, metricFactory); final SubscribeProcessor subscribeProcessor; if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Annotation)) { final SetAnnotationProcessor setAnnotationProcessor = new SetAnnotationProcessor(unsubscribeProcessor, mailboxManager, statusResponseFactory, metricFactory); capabilityProcessor.addProcessor(setAnnotationProcessor); if (mailboxManager.hasCapability(MailboxManager.MailboxCapabilities.Move)) { final MoveProcessor moveProcessor = new MoveProcessor(copyProcessor, mailboxManager, statusResponseFactory, metricFactory); authenticateProcessor = new AuthenticateProcessor(moveProcessor, mailboxManager, statusResponseFactory, metricFactory);