1
2
3
4
5
6
7
8
9
10
11 package org.mule.transport.email.functional;
12
13 import static org.junit.Assert.assertNotNull;
14 import static org.junit.Assert.assertTrue;
15
16 import org.mule.tck.functional.CountdownCallback;
17 import org.mule.tck.functional.FunctionalTestComponent;
18 import org.mule.transport.email.GreenMailUtilities;
19 import org.mule.transport.email.ImapConnector;
20
21 import com.icegreen.greenmail.store.StoredMessage;
22 import com.icegreen.greenmail.user.UserManager;
23
24 import java.util.Arrays;
25 import java.util.Collection;
26 import java.util.List;
27
28 import javax.mail.Flags;
29 import javax.mail.internet.MimeMessage;
30
31 import org.junit.Test;
32 import org.junit.runners.Parameterized.Parameters;
33
34 public class ImapCustomSeenHandlingTestCase extends AbstractEmailFunctionalTestCase
35 {
36 private CountdownCallback messageReceived = new CountdownCallback(1);
37
38 public ImapCustomSeenHandlingTestCase(ConfigVariant variant, String configResources)
39 {
40 super(variant, false, ImapConnector.IMAP, configResources);
41
42
43 setStartContext(false);
44 }
45
46 @Override
47 protected String getConfigResources()
48 {
49 return "imap-custom-seen-flag.xml";
50 }
51
52 @Parameters
53 public static Collection<Object[]> parameters()
54 {
55 return Arrays.asList(new Object[][]{
56 {ConfigVariant.SERVICE, "imap-functional-test-service.xml"},
57 {ConfigVariant.FLOW, "imap-functional-test-service.xml"}
58 });
59 }
60
61 @Test
62 public void testMessagesMatchingFilterGetCustomFlagSet() throws Exception
63 {
64 putMailMessageMatchingFilterIntoImapServer();
65 setupTestComponentListener();
66
67
68 muleContext.start();
69
70
71 assertTrue(messageReceived.await(RECEIVE_TIMEOUT));
72 assertMessageIsFlagged();
73 }
74
75 private void putMailMessageMatchingFilterIntoImapServer() throws Exception
76 {
77 String email = "barney@mule.org";
78
79 UserManager userManager = server.getManagers().getUserManager();
80 MimeMessage message = GreenMailUtilities.toMessage(TEST_MESSAGE, email, null);
81 GreenMailUtilities.storeEmail(userManager, email, DEFAULT_USER, DEFAULT_PASSWORD, message);
82 }
83
84 private void setupTestComponentListener() throws Exception
85 {
86 FunctionalTestComponent component = getFunctionalTestComponent("custom-flags");
87 assertNotNull(component);
88
89 component.setEventCallback(messageReceived);
90 }
91
92 private void assertMessageIsFlagged() throws Exception
93 {
94
95
96 boolean flaggedMessageFound = anyMessageIsFlagged();
97 assertTrue("no FLAGGED message found", flaggedMessageFound);
98 }
99
100 private boolean anyMessageIsFlagged()
101 {
102 for (StoredMessage message : allImapMessages())
103 {
104 if (message.getFlags().contains(Flags.Flag.FLAGGED))
105 {
106 return true;
107 }
108 }
109 return false;
110 }
111
112
113
114
115
116
117 @SuppressWarnings("unchecked")
118 private List<StoredMessage> allImapMessages()
119 {
120 return server.getManagers().getImapHostManager().getAllMessages();
121 }
122 }