INT-3994: Add Option to Map MimeMessage

JIRA: https://jira.spring.io/browse/INT-3994

If a header mapper is injected into the mail receiver, a mapped
message is result instead of a message with the raw `MimeMessage`.

`MimeMessage` properties are mapped as discrete headers; in addition
the raw email headers are provided as a multivalue map in the headers.

Handle Multipart

Since a Multipart content has a reference to the original MimeMessage,
convert to a simple byte[] by default.

Add an option in case the user wants to map the message but still
interpret the Multipart intact.

Namespace and Docs

Polishing

Polishing - PR Comments
This commit is contained in:
Gary Russell
2016-04-21 11:39:09 -04:00
committed by Artem Bilan
parent 8df487c96f
commit 439559f255
23 changed files with 657 additions and 186 deletions

View File

@@ -16,10 +16,13 @@
package org.springframework.integration.mail;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
@@ -29,7 +32,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.OutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Properties;
import java.util.concurrent.CountDownLatch;
@@ -80,15 +83,15 @@ import org.springframework.integration.history.MessageHistory;
import org.springframework.integration.mail.ImapIdleChannelAdapter.ImapIdleExceptionEvent;
import org.springframework.integration.mail.PoorMansMailServer.ImapServer;
import org.springframework.integration.mail.config.ImapIdleChannelAdapterParserTests;
import org.springframework.integration.mail.support.DefaultMailHeaderMapper;
import org.springframework.integration.test.support.LongRunningIntegrationTest;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.PollableChannel;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.util.FileCopyUtils;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPMessage;
/**
* @author Oleg Zhurakousky
@@ -136,18 +139,26 @@ public class ImapMailReceiverTests {
}
}
});
testIdleWithServerGuts(receiver);
testIdleWithServerGuts(receiver, false);
}
@Test
public void testIdleWithServerDefaultSearch() throws Exception {
ImapMailReceiver receiver = new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getPort()
+ "/INBOX");
testIdleWithServerGuts(receiver);
testIdleWithServerGuts(receiver, false);
assertTrue(imapIdleServer.assertReceived("searchWithUserFlag"));
}
public void testIdleWithServerGuts(ImapMailReceiver receiver) throws MessagingException {
@Test
public void testIdleWithMessageMapping() throws Exception {
ImapMailReceiver receiver = new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getPort()
+ "/INBOX");
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
testIdleWithServerGuts(receiver, true);
}
public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped) throws MessagingException {
imapIdleServer.resetServer();
Properties mailProps = new Properties();
mailProps.put("mail.debug", "true");
@@ -168,12 +179,23 @@ public class ImapMailReceiverTests {
adapter.setOutputChannel(channel);
adapter.setTaskScheduler(taskScheduler);
adapter.start();
@SuppressWarnings("unchecked")
org.springframework.messaging.Message<MimeMessage> received =
(org.springframework.messaging.Message<MimeMessage>) channel.receive(10000);
assertNotNull(received);
assertNotNull(received.getPayload().getReceivedDate());
assertTrue(received.getPayload().getLineCount() > -1);
if (!mapped) {
@SuppressWarnings("unchecked")
org.springframework.messaging.Message<MimeMessage> received =
(org.springframework.messaging.Message<MimeMessage>) channel.receive(10000);
assertNotNull(received);
assertNotNull(received.getPayload().getReceivedDate());
assertTrue(received.getPayload().getLineCount() > -1);
}
else {
org.springframework.messaging.Message<?> received = channel.receive(10000);
assertNotNull(received);
assertNotNull(received.getHeaders().get(MailHeaders.RAW_HEADERS));
assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
equalTo("TEXT/PLAIN; charset=ISO-8859-1"));
}
assertNotNull(channel.receive(10000)); // new message after idle
assertNull(channel.receive(10000)); // no new message after second and third idle
verify(logger).debug("Canceling IDLE");
@@ -838,12 +860,52 @@ public class ImapMailReceiverTests {
@Test
public void testAttachments() throws Exception {
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
Folder folder = testAttachmentsGuts(receiver);
Message[] messages = (Message[]) receiver.receive();
Object content = messages[0].getContent();
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());
assertSame(folder, messages[0].getFolder());
}
@Test
public void testAttachmentsWithMappingMultiAsBytes() throws Exception {
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
testAttachmentsGuts(receiver);
org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
.receive();
org.springframework.messaging.Message<?> received = messages[0];
Object content = received.getPayload();
assertThat(content, instanceOf(byte[].class));
assertThat((String) received.getHeaders().get(MailHeaders.CONTENT_TYPE),
equalTo("multipart/mixed;\r\n boundary=\"------------040903000701040401040200\""));
assertThat((String) received.getHeaders().get(MessageHeaders.CONTENT_TYPE),
equalTo("application/octet-stream"));
}
@Test
public void testAttachmentsWithMapping() throws Exception {
final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
receiver.setHeaderMapper(new DefaultMailHeaderMapper());
receiver.setEmbeddedPartsAsBytes(false);
testAttachmentsGuts(receiver);
org.springframework.messaging.Message<?>[] messages = (org.springframework.messaging.Message<?>[]) receiver
.receive();
Object content = messages[0].getPayload();
assertThat(content, instanceOf(Multipart.class));
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
assertEquals("foo", ((Multipart) content).getBodyPart(1).getContent().toString().trim());
}
private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws MessagingException, IOException {
Store store = mock(Store.class);
Folder folder = mock(Folder.class);
when(folder.exists()).thenReturn(true);
when(folder.isOpen()).thenReturn(true);
IMAPMessage message = mock(IMAPMessage.class);
Message message = new MimeMessage(null, new ClassPathResource("test.mail").getInputStream());
when(folder.search((SearchTerm) Mockito.any())).thenReturn(new Message[]{message});
when(store.getFolder(Mockito.any(URLName.class))).thenReturn(folder);
when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
@@ -852,20 +914,7 @@ public class ImapMailReceiverTests {
receiver.setBeanFactory(mock(BeanFactory.class));
receiver.afterPropertiesSet();
doAnswer(new Answer<Object>() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
OutputStream os = (OutputStream) invocation.getArguments()[0];
FileCopyUtils.copy(new ClassPathResource("test.mail").getInputStream(), os);
return null;
}
}).when(message).writeTo(Mockito.any(OutputStream.class));
Message[] messages = receiver.receive();
Object content = messages[0].getContent();
assertEquals("bar", ((Multipart) content).getBodyPart(0).getContent().toString().trim());
assertSame(folder, messages[0].getFolder());
return folder;
}
@Test
@@ -922,10 +971,10 @@ public class ImapMailReceiverTests {
}
ImapMailReceiver receiver = new TestReceiver();
Message[] received = receiver.receive();
Message[] received = (Message[]) receiver.receive();
assertEquals(1, received.length);
assertSame(message1, received[0]);
received = receiver.receive();
received = (Message[]) receiver.receive();
assertEquals(1, received.length);
assertSame(messages2, received);
assertSame(message2, received[0]);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -60,6 +60,7 @@ public class MailReceivingMessageSourceTests {
private final ConcurrentLinkedQueue<javax.mail.Message[]> messages = new ConcurrentLinkedQueue<javax.mail.Message[]>();
@Override
public javax.mail.Message[] receive() {
return messages.poll();
}
@@ -74,16 +75,6 @@ public class MailReceivingMessageSourceTests {
public void stop() {
}
public MailReceiverContext getTransactionContext() {
return null;
}
public void closeContextAfterSuccess(MailReceiverContext context) {
}
public void closeContextAfterFailure(MailReceiverContext context) {
}
}
}

View File

@@ -16,13 +16,7 @@
package org.springframework.integration.mail;
import static org.mockito.Mockito.mock;
import javax.mail.Folder;
import org.springframework.integration.mail.MailReceiver.MailReceiverContext;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.messaging.Message;
@@ -77,13 +71,4 @@ public class MailTestsHelper {
.build();
}
public static MailReceiverContext setupContextHolder(AbstractMailReceiver receiver) {
@SuppressWarnings("unchecked")
ThreadLocal<MailReceiverContext> contextHolder = TestUtils.getPropertyValue(receiver, "contextHolder", ThreadLocal.class);
Folder folder = mock(Folder.class);
MailReceiverContext context = new MailReceiverContext(folder);
contextHolder.set(context);
return context;
}
}

View File

@@ -35,8 +35,12 @@
store-uri="imap:foo"
channel="channel"
auto-startup="false"
header-mapper="mapper"
embedded-parts-as-bytes="false"
should-delete-messages="true"/>
<bean id="mapper" class="org.springframework.integration.mail.support.DefaultMailHeaderMapper" />
<mail:imap-idle-channel-adapter id="simpleAdapterWithErrorChannel"
store-uri="imap:foo"
channel="channel"

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,6 +40,7 @@ import org.springframework.integration.mail.ImapMailReceiver;
import org.springframework.integration.mail.SearchTermStrategy;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.MessageChannel;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -51,6 +52,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@DirtiesContext
public class ImapIdleChannelAdapterParserTests {
@Autowired
@@ -82,7 +84,10 @@ public class ImapIdleChannelAdapterParserTests {
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead"));
assertNull(adapterAccessor.getPropertyValue("errorChannel"));
assertNull(adapterAccessor.getPropertyValue("adviceChain"));
assertEquals(Boolean.FALSE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
assertNotNull(receiverAccessor.getPropertyValue("headerMapper"));
}
@Test
public void simpleAdapterWithErrorChannel() {
Object adapter = context.getBean("simpleAdapterWithErrorChannel");
@@ -102,7 +107,10 @@ public class ImapIdleChannelAdapterParserTests {
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldDeleteMessages"));
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead"));
assertSame(context.getBean("errorChannel"), adapterAccessor.getPropertyValue("errorChannel"));
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
assertNull(receiverAccessor.getPropertyValue("headerMapper"));
}
@Test
public void simpleAdapterWithMarkeMessagesAsRead() {
Object adapter = context.getBean("simpleAdapterMarkAsRead");

View File

@@ -13,14 +13,24 @@
<!-- INT-982 -->
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrue" store-uri="pop3:test" channel="testChannel" should-delete-messages="true" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrue"
store-uri="pop3:test" channel="testChannel" should-delete-messages="true"
header-mapper="mapper" embedded-parts-as-bytes="false"
auto-startup="false" />
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalse" store-uri="pop3:test" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalse"
store-uri="pop3:test" channel="testChannel" should-delete-messages="false"
auto-startup="false" />
<mail:inbound-channel-adapter id="imapShouldDeleteTrue" store-uri="imap:test" channel="testChannel" should-delete-messages="true" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapShouldDeleteTrue"
store-uri="imap:test" channel="testChannel" should-delete-messages="true"
auto-startup="false" />
<mail:inbound-channel-adapter id="imapShouldDeleteFalse" store-uri="imap:test" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapShouldDeleteFalse"
store-uri="imap:test" channel="testChannel" should-delete-messages="false"
auto-startup="false" />
<bean id="mapper" class="org.springframework.integration.mail.support.DefaultMailHeaderMapper" />
<!-- INT-1158 -->
@@ -31,46 +41,75 @@
<prop key="mail.delete.false">false</prop>
</util:properties>
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrueProperty" store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.true}" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3ShouldDeleteTrueProperty"
store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.true}"
auto-startup="false" />
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalseProperty" store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.false}" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3ShouldDeleteFalseProperty"
store-uri="pop3:test" channel="testChannel" should-delete-messages="${mail.delete.false}"
auto-startup="false" />
<mail:inbound-channel-adapter id="imapShouldDeleteTrueProperty" store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.true}" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapShouldDeleteTrueProperty"
store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.true}"
auto-startup="false" />
<mail:inbound-channel-adapter id="imapShouldDeleteFalseProperty" store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.false}" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapShouldDeleteFalseProperty"
store-uri="imap:test" channel="testChannel" should-delete-messages="${mail.delete.false}"
auto-startup="false" />
<!-- INT-1159 -->
<mail:inbound-channel-adapter id="pop3WithAuthenticator" store-uri="pop3:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3WithAuthenticator"
store-uri="pop3:test" authenticator="testAuthenticator" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:inbound-channel-adapter id="imapWithAuthenticator" store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapWithAuthenticator"
store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:imap-idle-channel-adapter id="imapIdleWithAuthenticator" store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:imap-idle-channel-adapter id="imapIdleWithAuthenticator"
store-uri="imap:test" authenticator="testAuthenticator" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<bean id="testAuthenticator" class="org.springframework.integration.mail.config.InboundChannelAdapterParserTests$TestAuthenticator"/>
<bean id="testAuthenticator"
class="org.springframework.integration.mail.config.InboundChannelAdapterParserTests$TestAuthenticator" />
<!-- INT-1160 -->
<mail:inbound-channel-adapter id="pop3WithMaxFetchSize" store-uri="pop3:test" max-fetch-size="11" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3WithMaxFetchSize"
store-uri="pop3:test" max-fetch-size="11" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:inbound-channel-adapter id="pop3WithMaxFetchSizeFallsBackToPollerMax" store-uri="pop3:test" channel="testChannel" should-delete-messages="false" auto-startup="false">
<si:poller max-messages-per-poll="99" fixed-rate="30000"/>
<mail:inbound-channel-adapter
id="pop3WithMaxFetchSizeFallsBackToPollerMax" store-uri="pop3:test"
channel="testChannel" should-delete-messages="false" auto-startup="false">
<si:poller max-messages-per-poll="99" fixed-rate="30000" />
</mail:inbound-channel-adapter>
<mail:inbound-channel-adapter id="imapWithMaxFetchSize" store-uri="imap:test" max-fetch-size="22" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapWithMaxFetchSize"
store-uri="imap:test" max-fetch-size="22" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:imap-idle-channel-adapter id="imapIdleWithMaxFetchSize" store-uri="imap:test" max-fetch-size="33" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:imap-idle-channel-adapter id="imapIdleWithMaxFetchSize"
store-uri="imap:test" max-fetch-size="33" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<!-- INT-1161 -->
<mail:inbound-channel-adapter id="pop3WithSession" store-uri="pop3:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3WithSession"
store-uri="pop3:test" session="testSession" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:inbound-channel-adapter id="imapWithSession" store-uri="imap:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapWithSession"
store-uri="imap:test" session="testSession" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<mail:imap-idle-channel-adapter id="imapIdleWithSession" store-uri="imap:test" session="testSession" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:imap-idle-channel-adapter id="imapIdleWithSession"
store-uri="imap:test" session="testSession" channel="testChannel"
should-delete-messages="false" auto-startup="false" />
<bean id="testSession" class="javax.mail.Session" factory-method="getInstance">
<constructor-arg>
@@ -86,17 +125,28 @@
<!-- INT-1162 -->
<mail:inbound-channel-adapter id="pop3WithoutStoreUri" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="pop3WithoutStoreUri"
channel="testChannel" protocol="pop3" should-delete-messages="false"
auto-startup="false" />
<mail:inbound-channel-adapter id="imapWithoutStoreUri" channel="testChannel" protocol="imap" should-delete-messages="false" auto-startup="false"/>
<mail:inbound-channel-adapter id="imapWithoutStoreUri"
channel="testChannel" protocol="imap" should-delete-messages="false"
auto-startup="false" />
<mail:imap-idle-channel-adapter id="imapIdleWithoutStoreUri" channel="testChannel" should-delete-messages="false" auto-startup="false"/>
<mail:imap-idle-channel-adapter id="imapIdleWithoutStoreUri"
channel="testChannel" should-delete-messages="false" auto-startup="false" />
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadTrue" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="true"/>
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadTrue"
channel="testChannel" protocol="pop3" should-delete-messages="false"
auto-startup="false" should-mark-messages-as-read="true" />
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadFalse" channel="testChannel" protocol="pop3" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="false"/>
<mail:inbound-channel-adapter id="pop3ShouldMarkAsReadFalse"
channel="testChannel" protocol="pop3" should-delete-messages="false"
auto-startup="false" should-mark-messages-as-read="false" />
<mail:inbound-channel-adapter id="imapShouldMarkAsReadTrue" channel="testChannel" protocol="imap" should-delete-messages="false" auto-startup="false" should-mark-messages-as-read="true"/>
<mail:inbound-channel-adapter id="imapShouldMarkAsReadTrue"
channel="testChannel" protocol="imap" should-delete-messages="false"
auto-startup="false" should-mark-messages-as-read="true" />
<!-- INT-2407 -->

View File

@@ -45,6 +45,7 @@ import org.springframework.integration.mail.Pop3MailReceiver;
import org.springframework.integration.mail.SearchTermStrategy;
import org.springframework.integration.test.util.TestUtils;
import org.springframework.messaging.MessageChannel;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -56,6 +57,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
*/
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
@DirtiesContext
public class InboundChannelAdapterParserTests {
@Autowired
@@ -73,16 +75,22 @@ public class InboundChannelAdapterParserTests {
public void pop3ShouldDeleteTrue() {
AbstractMailReceiver receiver = this.getReceiver("pop3ShouldDeleteTrue");
assertEquals(Pop3MailReceiver.class, receiver.getClass());
Boolean value = (Boolean) new DirectFieldAccessor(receiver).getPropertyValue("shouldDeleteMessages");
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
Boolean value = (Boolean) receiverAccessor.getPropertyValue("shouldDeleteMessages");
assertTrue(value);
assertEquals(Boolean.FALSE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
assertNotNull(receiverAccessor.getPropertyValue("headerMapper"));
}
@Test
public void imapShouldMarkMessagesAsRead() {
AbstractMailReceiver receiver = this.getReceiver("imapShouldMarkAsReadTrue");
assertEquals(ImapMailReceiver.class, receiver.getClass());
Boolean value = (Boolean) new DirectFieldAccessor(receiver).getPropertyValue("shouldMarkMessagesAsRead");
DirectFieldAccessor receiverAccessor = new DirectFieldAccessor(receiver);
Boolean value = (Boolean) receiverAccessor.getPropertyValue("shouldMarkMessagesAsRead");
assertTrue(value);
assertEquals(Boolean.TRUE, receiverAccessor.getPropertyValue("embeddedPartsAsBytes"));
assertNull(receiverAccessor.getPropertyValue("headerMapper"));
}
@Test