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