View Javadoc

1   /*
2    * $Id: ValueExtractorTransformerTestCase.java 23202 2011-10-17 21:16:01Z pablo.kraan $
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.transformer.simple;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.transport.PropertyScope;
16  import org.mule.tck.junit4.AbstractMuleContextTestCase;
17  
18  import java.util.ArrayList;
19  import java.util.List;
20  import java.util.Set;
21  
22  import org.junit.Test;
23  
24  import static org.junit.Assert.assertEquals;
25  import static org.junit.Assert.assertTrue;
26  
27  public class ValueExtractorTransformerTestCase extends AbstractMuleContextTestCase
28  {
29  
30      @Test
31      public void testDoesNotFailIfNoExpressionMatchesWithNoDefaultValue() throws Exception
32      {
33          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
34          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TESTw+TEST", "#[header:INVOCATION:propName]", false, null));
35          ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TEST", enrichExpressionPairs);
36          DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
37  
38          Object response = transformer.transform(testMessage);
39  
40          DefaultMuleMessage responseMessage = (DefaultMuleMessage) response;
41          Set<String> propertyNames = responseMessage.getPropertyNames(PropertyScope.INVOCATION);
42          assertEquals("Should not match any property", 0, propertyNames.size());
43      }
44  
45      @Test
46      public void testUsesDefaultIfNoExpressionMatches() throws Exception
47      {
48          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
49          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TESTw+TEST", "#[header:INVOCATION:propName]", false, "foo"));
50          ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TEST", enrichExpressionPairs);
51          DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
52  
53          Object response = transformer.transform(testMessage);
54          DefaultMuleMessage responseMessage = (DefaultMuleMessage) response;
55          assertPropertyAddedToMessage(responseMessage, "propName", "foo", PropertyScope.INVOCATION);
56      }
57  
58      @Test(expected = IllegalStateException.class)
59      public void testFailIfNoExpressionMatchesAndNoDefaultValueSpecified() throws Exception
60      {
61          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
62          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TESTw+TEST", "#[header:INVOCATION:propName]", true, null));
63          ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TEST", enrichExpressionPairs);
64          DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
65  
66          transformer.transform(testMessage);
67      }
68  
69      @Test(expected = IllegalStateException.class)
70      public void testFailsIfExpressionMatchesMultipleValues() throws Exception
71      {
72          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
73          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TEST(\\w+)TEST(\\w+)", "#[header:INVOCATION:propName]", true, null));
74          ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TESTfooTESTbar", enrichExpressionPairs);
75          DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
76  
77          transformer.transform(testMessage);
78      }
79  
80      @Test
81      public void testAddsSingleValue() throws Exception
82      {
83          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
84          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TEST(\\w+)TEST", "#[header:INVOCATION:propName]", false, null));
85          ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TESTfooTEST", enrichExpressionPairs);
86  
87          DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
88  
89          Object response = transformer.transform(testMessage);
90          DefaultMuleMessage responseMessage = (DefaultMuleMessage) response;
91          assertPropertyAddedToMessage(responseMessage, "propName", "foo", PropertyScope.INVOCATION);
92      }
93  
94      @Test
95      public void testAddsMultipleValues() throws Exception
96      {
97          List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
98          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TEST(\\w+)TEST\\w+TEST", "#[header:INVOCATION:propName1]", false, null));
99          enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TEST\\w+TEST(\\w+)TEST", "#[header:INVOCATION:propName2]", false, null));
100         ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("TESTfooTESTbarTEST", enrichExpressionPairs);
101 
102         DefaultMuleMessage testMessage = new DefaultMuleMessage("TEST", muleContext);
103 
104         Object response = transformer.transform(testMessage);
105 
106         DefaultMuleMessage responseMessage = (DefaultMuleMessage) response;
107         assertPropertyAddedToMessage(responseMessage, "propName1", "foo", PropertyScope.INVOCATION);
108         assertPropertyAddedToMessage(responseMessage, "propName2", "bar", PropertyScope.INVOCATION);
109     }
110 
111     @Test
112     public void testAddsSingleValueUsingSourceExpression() throws Exception
113     {
114         List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs = new ArrayList<ValueExtractorTransformer.ValueExtractorTemplate>();
115         enrichExpressionPairs.add(new ValueExtractorTransformer.ValueExtractorTemplate("TEST(\\w+)TEST", "#[header:INVOCATION:propName]", false, null));
116 
117         ValueExtractorTransformer transformer = createPropertyGeneratorTransformer("#[payload:]", enrichExpressionPairs);
118 
119         DefaultMuleMessage testMessage = new DefaultMuleMessage("TESTfooTEST", muleContext);
120 
121         Object response = transformer.transform(testMessage);
122         DefaultMuleMessage responseMessage = (DefaultMuleMessage) response;
123 
124         assertPropertyAddedToMessage(responseMessage, "propName", "foo", PropertyScope.INVOCATION);
125     }
126 
127     private void assertPropertyAddedToMessage(MuleMessage message, String propertyName, String value, PropertyScope scope)
128     {
129         Set<String> propertyNames = message.getPropertyNames(scope);
130         assertTrue(String.format("Property '%s' was not added to the message", propertyName), propertyNames.contains(propertyName));
131         assertEquals(value, message.getProperty(propertyName, scope));
132     }
133 
134     private ValueExtractorTransformer createPropertyGeneratorTransformer(String source, List<ValueExtractorTransformer.ValueExtractorTemplate> enrichExpressionPairs) throws Exception
135     {
136         ValueExtractorTransformer transformer = new ValueExtractorTransformer();
137         transformer.setSource(source);
138         transformer.setValueExtractorTemplates(enrichExpressionPairs);
139         transformer.setMuleContext(muleContext);
140 
141         return transformer;
142     }
143 
144 }