1   package test.atlassian.mail.server.util;
2   
3   import com.atlassian.mail.Email;
4   import com.atlassian.mail.MailException;
5   import com.atlassian.mail.server.impl.util.MessageCreator;
6   import com.sun.mail.util.PropUtil;
7   import org.junit.Before;
8   import org.junit.Test;
9   import org.junit.runner.RunWith;
10  import org.mockito.Mock;
11  import org.powermock.api.mockito.PowerMockito;
12  import org.powermock.core.classloader.annotations.PrepareForTest;
13  import org.powermock.modules.junit4.PowerMockRunner;
14  
15  import javax.mail.MessagingException;
16  import javax.mail.NoSuchProviderException;
17  import javax.mail.Session;
18  import javax.mail.internet.InternetAddress;
19  import javax.mail.internet.MimeMessage;
20  
21  import java.io.UnsupportedEncodingException;
22  
23  import static org.junit.Assert.assertEquals;
24  import static org.mockito.Mockito.mock;
25  import static org.mockito.Mockito.when;
26  
27  @RunWith(PowerMockRunner.class)
28  @PrepareForTest({Session.class, PropUtil.class})
29  public class TestMessageCreator
30  {
31      private Session mockSession;
32  
33      @Before
34      public void setupMockSessionAndTransport() throws NoSuchProviderException {
35          mockSession = PowerMockito.mock(Session.class);
36          PowerMockito.mockStatic(PropUtil.class);
37          when(PropUtil.getBooleanSessionProperty(mockSession, "mail.mime.address.strict", true)).thenReturn(false);
38      }
39  
40      MimeMessage message = new MimeMessage(mockSession);
41      MessageCreator messageCreator = new MessageCreator();
42  
43      @Test
44      public void testDefaultFromContainsPersonalName() throws MessagingException, UnsupportedEncodingException, MailException
45      {
46          _testFromName("Default Personal Name <from@example.com>", null, "Default Personal Name", "from@example.com");
47      }
48  
49      @Test
50      public void testFromNameOverriddenByDefaultFromName() throws MessagingException, UnsupportedEncodingException, MailException //JRA-5000
51      {
52          _testFromName("Default Personal Name <from@example.com>", "Personal From Name", "Default Personal Name", "from@example.com");
53      }
54  
55      private void _testFromName(String defaultFrom, String fromName, String expectedPersonalName, String expectedFromAddress) throws MessagingException, UnsupportedEncodingException, MailException
56      {
57          Email email = new Email("to@example.com");
58          if (fromName != null)
59              email.setFromName(fromName);
60  
61          messageCreator.updateMimeMessage(email, defaultFrom, "[EMAIL]",message);
62          InternetAddress fromAddress = (InternetAddress) message.getFrom()[0];
63  
64          assertEquals(expectedFromAddress, fromAddress.getAddress());
65          assertEquals(expectedPersonalName, fromAddress.getPersonal());
66      }
67  
68  }