Search in sources :

Example 11 with Folder

use of jakarta.mail.Folder in project spring-integration by spring-projects.

the class Pop3MailReceiverTests method receiveAndDontSetDeleteWithoutUrl.

@Test
public void receiveAndDontSetDeleteWithoutUrl() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver();
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> null).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.DELETED, true);
    verify(msg2, times(0)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) Test(org.junit.jupiter.api.Test)

Example 12 with Folder

use of jakarta.mail.Folder in project spring-integration by spring-projects.

the class Pop3MailReceiverTests method receiveAndDelete.

@Test
public void receiveAndDelete() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver();
    receiver.setShouldDeleteMessages(true);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
        int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode");
        if (folderOpenMode != Folder.READ_WRITE) {
            throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode");
        }
        return null;
    }).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(1)).setFlag(Flag.DELETED, true);
    verify(msg2, times(1)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) Test(org.junit.jupiter.api.Test)

Example 13 with Folder

use of jakarta.mail.Folder in project spring-integration by spring-projects.

the class Pop3MailReceiverTests method receiveAndDontSetDeleteWithUrl.

@Test
public void receiveAndDontSetDeleteWithUrl() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver("pop3://some.host");
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> null).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.DELETED, true);
    verify(msg2, times(0)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) Test(org.junit.jupiter.api.Test)

Example 14 with Folder

use of jakarta.mail.Folder in project spring-integration by spring-projects.

the class ImapIdleIntegrationTests method testWithTransactionSynchronization.

@SuppressWarnings("resource")
@Test
public void testWithTransactionSynchronization() throws Exception {
    final AtomicBoolean block = new AtomicBoolean(false);
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("imap-idle-mock-integration-config.xml", this.getClass());
    PostTransactionProcessor processor = context.getBean("syncProcessor", PostTransactionProcessor.class);
    ImapIdleChannelAdapter adapter = context.getBean("customAdapter", ImapIdleChannelAdapter.class);
    assertThat(TestUtils.getPropertyValue(adapter, "applicationEventPublisher")).isNotNull();
    ImapMailReceiver receiver = TestUtils.getPropertyValue(adapter, "mailReceiver", ImapMailReceiver.class);
    // setup mock scenario
    receiver = spy(receiver);
    doAnswer(invocation -> {
        // to emulate the behavior of IDLE
        if (block.get()) {
            Thread.sleep(5000);
        }
        block.set(true);
        return null;
    }).when(receiver).waitForNewMessages();
    Message m1 = mock(Message.class);
    doReturn(new Message[] { m1 }).when(receiver).receive();
    Folder folder = mock(Folder.class);
    when(folder.isOpen()).thenReturn(true);
    Field folderField = ReflectionUtils.findField(ImapMailReceiver.class, "folder");
    folderField.setAccessible(true);
    folderField.set(receiver, folder);
    Field mrField = ImapIdleChannelAdapter.class.getDeclaredField("mailReceiver");
    mrField.setAccessible(true);
    mrField.set(adapter, receiver);
    // end mock setup
    final CountDownLatch txProcessorLatch = new CountDownLatch(1);
    doAnswer(invocation -> {
        txProcessorLatch.countDown();
        return null;
    }).when(processor).process(any(Message.class));
    adapter.start();
    assertThat(txProcessorLatch.await(10, TimeUnit.SECONDS)).isTrue();
    adapter.stop();
    context.close();
}
Also used : AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Field(java.lang.reflect.Field) ImapMailReceiver(org.springframework.integration.mail.ImapMailReceiver) Message(jakarta.mail.Message) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) ImapIdleChannelAdapter(org.springframework.integration.mail.ImapIdleChannelAdapter) Folder(jakarta.mail.Folder) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.jupiter.api.Test)

Example 15 with Folder

use of jakarta.mail.Folder in project spring-integration by spring-projects.

the class MailReceiverTests method testStoreConnect.

@Test
public void testStoreConnect() throws Exception {
    AbstractMailReceiver receiver = new AbstractMailReceiver() {

        @Override
        protected Message[] searchForNewMessages() {
            return null;
        }
    };
    Properties props = new Properties();
    Session session = Session.getInstance(props);
    receiver.setSession(session);
    receiver.setProtocol("imap");
    Store store = session.getStore("imap");
    store = spy(store);
    new DirectFieldAccessor(receiver).setPropertyValue("store", store);
    when(store.isConnected()).thenReturn(false);
    Folder folder = mock(Folder.class);
    when(folder.exists()).thenReturn(true);
    when(folder.isOpen()).thenReturn(false);
    doReturn(folder).when(store).getFolder((URLName) null);
    doNothing().when(store).connect();
    receiver.openFolder();
    receiver.openFolder();
    verify(store, times(2)).connect();
}
Also used : Message(jakarta.mail.Message) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) Store(jakarta.mail.Store) Properties(java.util.Properties) Folder(jakarta.mail.Folder) Session(jakarta.mail.Session) Test(org.junit.jupiter.api.Test)

Aggregations

Folder (jakarta.mail.Folder)27 Message (jakarta.mail.Message)18 Flags (jakarta.mail.Flags)16 Test (org.junit.jupiter.api.Test)16 BeanFactory (org.springframework.beans.factory.BeanFactory)15 MimeMessage (jakarta.mail.internet.MimeMessage)14 Field (java.lang.reflect.Field)14 IMAPFolder (com.sun.mail.imap.IMAPFolder)12 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)9 ServerSetupTest (com.icegreen.greenmail.util.ServerSetupTest)8 MessagingException (jakarta.mail.MessagingException)7 Store (jakarta.mail.Store)4 SearchTerm (jakarta.mail.search.SearchTerm)4 XPathException (org.exist.xquery.XPathException)4 IntegerValue (org.exist.xquery.value.IntegerValue)4 NotTerm (jakarta.mail.search.NotTerm)3 Method (java.lang.reflect.Method)3 URLName (jakarta.mail.URLName)2 FolderClosedException (jakarta.mail.FolderClosedException)1 Session (jakarta.mail.Session)1