View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.email.transformers;
8   
9   import org.mule.api.endpoint.ImmutableEndpoint;
10  import org.mule.api.transformer.Transformer;
11  import org.mule.api.transformer.TransformerException;
12  import org.mule.transformer.AbstractTransformer;
13  import org.mule.transformer.AbstractTransformerTestCase;
14  import org.mule.transformer.types.DataTypeFactory;
15  
16  import java.util.Properties;
17  
18  import javax.mail.Message;
19  import javax.mail.MessagingException;
20  import javax.mail.Session;
21  import javax.mail.internet.MimeMessage;
22  
23  import org.junit.Test;
24  
25  import static org.junit.Assert.assertEquals;
26  import static org.junit.Assert.assertFalse;
27  import static org.junit.Assert.assertNotNull;
28  import static org.junit.Assert.assertTrue;
29  import static org.junit.Assert.fail;
30  
31  public class MailMessageTransformersTestCase extends AbstractTransformerTestCase
32  {
33      private Message message;
34  
35      @Override
36      public Transformer getTransformer() throws Exception
37      {
38          return createObject(EmailMessageToString.class);
39      }
40  
41      @Override
42      public Transformer getRoundTripTransformer() throws Exception
43      {
44          StringToEmailMessage trans = createObject(StringToEmailMessage.class);
45          ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getOutboundEndpoint(
46              "smtp://a:a@a.com");
47  
48          // We need to init the connector without actually connecting for this test
49          // case
50          try
51          {
52              endpoint.getConnector().initialise();
53          }
54          catch (IllegalStateException e)
55          {
56              assertNotNull(e);
57          }
58  
59          trans.setEndpoint(endpoint);
60  
61          return trans;
62      }
63  
64      @Override
65      public Object getTestData()
66      {
67          if (message == null)
68          {
69              message = new MimeMessage(Session.getDefaultInstance(new Properties()));
70              try
71              {
72                  message.setContent(getResultData(), getContentType());
73              }
74              catch (MessagingException e)
75              {
76                  throw new RuntimeException("Failed to create Mime Message: " + e.getMessage(), e);
77              }
78          }
79          return message;
80      }
81  
82      
83      protected String getContentType()
84      {
85          return "text/plain";
86      }
87      
88      @Override
89      public Object getResultData()
90      {
91          return "Test Email Message";
92      }
93  
94      @Override
95      public boolean compareResults(Object src, Object result)
96      {
97          if (src instanceof Message)
98          {
99              Object objSrc;
100             Object objRes;
101             try
102             {
103                 objSrc = ((Message) src).getContent();
104                 objRes = ((Message) result).getContent();
105             }
106             catch (Exception e)
107             {
108                 throw new RuntimeException(e.getMessage(), e);
109             }
110             if (objSrc == null || objRes == null)
111             {
112                 return false;
113             }
114             return objRes.equals(objSrc);
115         }
116         return super.compareResults(src, result);
117     }
118 
119     @Test
120     public void testStringSourceType() throws Exception
121     {
122         try
123         {
124             assertFalse(getTransformer().isSourceDataTypeSupported(DataTypeFactory.STRING));
125             getTransformer().transform(getResultData());
126             fail("Should throw exception for string source type");
127         }
128         catch (TransformerException e)
129         {
130             // expected
131             assertTrue(true);
132         }
133     }
134 
135     @Test
136     public void testStringSourceTypeWithIgnoreBadInput() throws Exception
137     {
138         AbstractTransformer trans = (AbstractTransformer) getTransformer();
139         trans.setIgnoreBadInput(true);
140         Object result = trans.transform(getResultData());
141         trans.setIgnoreBadInput(false);
142         assertEquals(result, getResultData());
143     }
144 }