1   /*
2    * $Id: MailMessageTransformersTestCase.java 10787 2008-02-12 18:51:50Z dfeist $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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.TransformerException;
15  import org.mule.api.transformer.Transformer;
16  import org.mule.lifecycle.AlreadyInitialisedException;
17  import org.mule.transformer.AbstractTransformer;
18  import org.mule.transformer.AbstractTransformerTestCase;
19  import org.mule.transport.email.transformers.EmailMessageToString;
20  import org.mule.transport.email.transformers.StringToEmailMessage;
21  
22  import java.util.Properties;
23  
24  import javax.mail.Message;
25  import javax.mail.MessagingException;
26  import javax.mail.Session;
27  import javax.mail.internet.MimeMessage;
28  
29  public class MailMessageTransformersTestCase extends AbstractTransformerTestCase
30  {
31      private Message message;
32  
33      public Transformer getTransformer() throws Exception
34      {
35          return new EmailMessageToString();
36      }
37  
38      public Transformer getRoundTripTransformer() throws Exception
39      {
40          StringToEmailMessage trans = new StringToEmailMessage();
41          ImmutableEndpoint endpoint = muleContext.getRegistry().lookupEndpointFactory().getOutboundEndpoint(
42              "smtp://a:a@a.com");
43  
44          // We need to init the connector without actually connecting for this test
45          // case
46          try
47          {
48              endpoint.getConnector().initialise();
49          }
50          catch (AlreadyInitialisedException e)
51          {
52              assertNotNull(e);
53          }
54  
55          trans.setEndpoint(endpoint);
56  
57          return trans;
58      }
59  
60      public Object getTestData()
61      {
62          if (message == null)
63          {
64              message = new MimeMessage(Session.getDefaultInstance(new Properties()));
65              try
66              {
67                  message.setContent(getResultData(), "text/plain");
68              }
69              catch (MessagingException e)
70              {
71                  throw new RuntimeException("Failed to create Mime Message: " + e.getMessage(), e);
72              }
73          }
74          return message;
75      }
76  
77      public Object getResultData()
78      {
79          return "Test Email Message";
80      }
81  
82      public boolean compareResults(Object src, Object result)
83      {
84          if (src instanceof Message)
85          {
86              Object objSrc;
87              Object objRes;
88              try
89              {
90                  objSrc = ((Message) src).getContent();
91                  objRes = ((Message) result).getContent();
92              }
93              catch (Exception e)
94              {
95                  throw new RuntimeException(e.getMessage(), e);
96              }
97              if (objSrc == null || objRes == null)
98              {
99                  return false;
100             }
101             return objRes.equals(objSrc);
102         }
103         return super.compareResults(src, result);
104     }
105 
106     public void testStringSourceType() throws Exception
107     {
108         try
109         {
110             assertFalse(getTransformer().isSourceTypeSupported(String.class));
111             getTransformer().transform(getResultData());
112             fail("Should throw exception for string source type");
113         }
114         catch (TransformerException e)
115         {
116             // expected
117             assertTrue(true);
118         }
119     }
120 
121     public void testStringSourceTypeWithIgnoreBadInput() throws Exception
122     {
123         AbstractTransformer trans = (AbstractTransformer) getTransformer();
124         trans.setIgnoreBadInput(true);
125         Object result = trans.transform(getResultData());
126         trans.setIgnoreBadInput(false);
127         assertSame(result, getResultData());
128     }
129 }