1
2
3
4
5
6
7
8
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 }