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  }