View Javadoc

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