1 package test.atlassian.mail.queue;
2
3 import com.atlassian.mail.Email;
4 import com.atlassian.mail.MailFactory;
5 import com.atlassian.mail.queue.MailQueue;
6 import com.atlassian.mail.queue.MailQueueImpl;
7 import com.atlassian.mail.queue.SingleMailQueueItem;
8 import junit.framework.TestCase;
9 import test.mock.mail.server.MockMailServerManager;
10 import test.mock.mail.server.MockSMTPMailServer;
11
12
13 public class TestMailQueue extends TestCase
14 {
15
16 MockMailServerManager mockMailServerManager;
17 MockSMTPMailServer mockMailServer;
18
19 @Override
20 protected void setUp() throws Exception {
21 mockMailServerManager = new MockMailServerManager();
22 MailFactory.setServerManager(mockMailServerManager);
23 }
24
25
26 public void testUnsentMailIsQueued()
27 {
28 MailQueue mq = new MailQueueImpl();
29 SingleMailQueueItem item = new SingleMailQueueItem(new Email("mike@atlassian.com").setSubject("Test Subject").setBody("Test Body"));
30 mq.addItem(item);
31 for (int i= 0; i<10; i++)
32 {
33 mq.sendBuffer();
34 assertEquals("Errors should be empty", 0, mq.errorSize());
35 assertEquals("Queue should contain 1 item", 1, mq.size());
36 }
37 mq.sendBuffer();
38 assertTrue("Mail Item should be in error queue", mq.getErrorQueue().contains(item));
39 }
40
41 public void testMailIsSent()
42 {
43 MailQueue mq = new MailQueueImpl();
44 SingleMailQueueItem item = new SingleMailQueueItem(new Email("mike@atlassian.com").setSubject("Test Subject").setBody("Test Body").setFrom("james@atlassian.com"));
45 mq.addItem(item);
46 mq.sendBuffer();
47 assertFalse("Mail Item should not be in error queue", mq.getErrorQueue().contains(item));
48 assertTrue("Mail Queue should be empty", mq.getQueue().isEmpty());
49 }
50
51 public void testOrdering()
52 {
53 MailQueue mq = new MailQueueImpl();
54 enqueueMailQueueItem(mq, "mike@atlassian.com", "Test Subject 1", "Test Body", "james@atlassian.com");
55 enqueueMailQueueItem (mq, "mike@atlassian.com", "Test Subject 2", "Test Body", "james@atlassian.com");
56 enqueueMailQueueItem (mq, "mike@atlassian.com", "Test Subject 3", "Test Body", null);
57 enqueueMailQueueItem (mq, "mike@atlassian.com", "Test Subject 4", "Test Body", "james@atlassian.com");
58 assertAtFrontOfQueue(mq, "Test Subject 1");
59 mq.sendBuffer();
60 assertAtFrontOfQueue(mq, "Test Subject 3");
61 enqueueMailQueueItem(mq, "mike@atlassian.com", "Test Subject 5", "Test Body", "james@atlassian.com");
62 enqueueMailQueueItem(mq, "mike@atlassian.com", "Test Subject 6", "Test Body", "james@atlassian.com");
63 assertAtFrontOfQueue(mq, "Test Subject 5");
64 }
65
66 private void assertAtFrontOfQueue(MailQueue mq, final String subject) {
67 assertTrue("Correct object at top of queue", mq.getQueue().peek().getSubject().equals(subject));
68 }
69
70 private void enqueueMailQueueItem(final MailQueue mailQueue, final String to, final String subject, final String body, final String from) {
71 Email email = new Email(to).setSubject(subject).setBody(body);
72 if (from != null)
73 {
74 email.setFrom(from);
75 }
76 mailQueue.addItem(new SingleMailQueueItem(email));
77 }
78 }