1
2
3
4
5
6
7 package org.mule.transformers.simple;
8
9 import org.mule.DefaultMuleEvent;
10 import org.mule.DefaultMuleMessage;
11 import org.mule.api.MuleEvent;
12 import org.mule.api.MuleMessage;
13 import org.mule.api.expression.RequiredValueException;
14 import org.mule.construct.SimpleFlowConstruct;
15 import org.mule.expression.transformers.BeanBuilderTransformer;
16 import org.mule.expression.transformers.ExpressionArgument;
17 import org.mule.expression.transformers.ExpressionTransformer;
18 import org.mule.tck.junit4.FunctionalTestCase;
19 import org.mule.tck.testmodels.fruit.Apple;
20 import org.mule.tck.testmodels.fruit.Banana;
21 import org.mule.tck.testmodels.fruit.FruitBasket;
22 import org.mule.tck.testmodels.fruit.FruitBowl;
23
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
28 import org.junit.Test;
29
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertNotNull;
33 import static org.junit.Assert.assertNull;
34 import static org.junit.Assert.assertTrue;
35 import static org.junit.Assert.fail;
36
37 public class ExpressionTransformerTestCase extends FunctionalTestCase
38 {
39
40 @Override
41 protected String getConfigResources()
42 {
43 return "org/mule/test/transformers/expression-transformers-test.xml";
44 }
45
46 @Test
47 public void testTransformerConfig() throws Exception
48 {
49 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
50 assertNotNull(transformer);
51 assertNotNull(transformer.getArguments());
52 assertEquals(2, transformer.getArguments().size());
53 ExpressionArgument arg1 = transformer.getArguments().get(0);
54 assertEquals("payload", arg1.getEvaluator());
55 assertEquals("org.mule.tck.testmodels.fruit.FruitBasket", arg1.getExpression());
56 assertFalse(arg1.isOptional());
57
58 ExpressionArgument arg2 = transformer.getArguments().get(1);
59 assertEquals("headers", arg2.getEvaluator());
60 assertEquals("foo,bar?", arg2.getExpression());
61 assertTrue(arg2.isOptional());
62 }
63
64 @Test
65 public void testBeanBuilderTransformerConfig() throws Exception
66 {
67 BeanBuilderTransformer transformer = (BeanBuilderTransformer) muleContext.getRegistry().lookupTransformer("testTransformer3");
68 assertNotNull(transformer);
69 assertNotNull(transformer.getArguments());
70 assertEquals(3, transformer.getArguments().size());
71 ExpressionArgument arg1 = transformer.getArguments().get(0);
72 assertEquals("brand", arg1.getName());
73 assertEquals("mule", arg1.getEvaluator());
74 assertEquals("message.payload", arg1.getExpression());
75 assertFalse(arg1.isOptional());
76
77 ExpressionArgument arg2 = transformer.getArguments().get(1);
78 assertEquals("segments", arg2.getName());
79 assertEquals("mule", arg2.getEvaluator());
80 assertEquals("message.header(SEGMENTS)", arg2.getExpression());
81 assertTrue(arg2.isOptional());
82 }
83
84 @Test
85 public void testExecutionWithCorrectMessage() throws Exception
86 {
87 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
88 Map<String, Object> props = new HashMap<String, Object>();
89 props.put("foo", "moo");
90 props.put("bar", "mar");
91
92 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
93
94 Object result = transformer.transform(message);
95 assertNotNull(result);
96 assertTrue(result.getClass().isArray());
97 Object o1 = ((Object[]) result)[0];
98 assertTrue(o1 instanceof FruitBasket);
99
100 Object o2 = ((Object[]) result)[1];
101 assertTrue(o2 instanceof Map<?, ?>);
102 Map<?, ?> map = (Map<?, ?>) o2;
103 assertEquals(2, map.size());
104 assertEquals("moo", map.get("foo"));
105 assertEquals("mar", map.get("bar"));
106 }
107
108 @Test
109 public void testExecutionWithPartialMissingOptionalParams() throws Exception
110 {
111 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
112 Map<String, Object> props = new HashMap<String, Object>();
113 props.put("foo", "moo");
114
115 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
116
117 Object result = transformer.transform(message);
118 assertNotNull(result);
119 assertTrue(result.getClass().isArray());
120 Object o1 = ((Object[]) result)[0];
121 assertTrue(o1 instanceof FruitBasket);
122
123 Object o2 = ((Object[]) result)[1];
124 assertTrue(o2 instanceof Map<?, ?>);
125 Map<?, ?> map = (Map<?, ?>) o2;
126 assertEquals(1, map.size());
127 assertEquals("moo", map.get("foo"));
128 }
129
130 @Test
131 public void testExecutionWithAllMissingOptionalParams() throws Exception
132 {
133 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer");
134
135 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), muleContext);
136
137 Object result = transformer.transform(message);
138 assertNotNull(result);
139 assertTrue(result.getClass().isArray());
140 Object o1 = ((Object[]) result)[0];
141 assertTrue(o1 instanceof FruitBasket);
142
143 assertNull(((Object[]) result)[1]);
144 }
145
146 @Test
147 public void testTransformerConfigWithSingleArgument() throws Exception
148 {
149 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer2");
150 Map<String, Object> props = new HashMap<String, Object>();
151 props.put("foo", "moo");
152 props.put("bar", "mar");
153
154 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
155
156 Object result = transformer.transform(message);
157 assertNotNull(result);
158 assertFalse(result.getClass().isArray());
159 assertTrue(result instanceof List<?>);
160 List<?> list = (List<?>) result;
161 assertTrue(list.contains("moo"));
162 assertTrue(list.contains("mar"));
163 }
164
165 @Test
166 public void testTransformerConfigWithSingleArgumentShortcutConfig() throws Exception
167 {
168 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer4");
169 Map<String, Object> props = new HashMap<String, Object>();
170 props.put("foo", "moo");
171 props.put("bar", "mar");
172
173 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
174
175 Object result = transformer.transform(message);
176 assertNotNull(result);
177 assertFalse(result.getClass().isArray());
178 assertTrue(result instanceof List<?>);
179 List<?> list = (List<?>) result;
180 assertTrue(list.contains("moo"));
181 assertTrue(list.contains("mar"));
182 }
183
184 @Test
185 public void testTransformerConfigWithSingleArgumentShortcutConfigInFlow() throws Exception
186 {
187 SimpleFlowConstruct flow = (SimpleFlowConstruct) muleContext.getRegistry().lookupFlowConstruct("et");
188 Map<String, Object> props = new HashMap<String, Object>();
189 props.put("foo", "moo");
190 props.put("bar", "mar");
191
192 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props,
193 muleContext);
194
195 MuleEvent resultEvent = flow.process(new DefaultMuleEvent(message, getTestInboundEndpoint(""),
196 getTestSession(getTestService(), muleContext)));
197 assertNotNull(resultEvent);
198 assertNotNull(resultEvent.getMessage().getPayload());
199 Object payload = resultEvent.getMessage().getPayload();
200 assertFalse(payload.getClass().isArray());
201 assertTrue(payload instanceof List<?>);
202 List<?> list = (List<?>) payload;
203 assertTrue(list.contains("moo"));
204 assertTrue(list.contains("mar"));
205 }
206
207 @Test(expected = RequiredValueException.class)
208 public void testExecutionWithInCorrectMessage() throws Exception
209 {
210 ExpressionTransformer transformer = (ExpressionTransformer) muleContext.getRegistry().lookupTransformer("testTransformer2");
211 Map<String, Object> props = new HashMap<String, Object>();
212 props.put("foo", "moo");
213
214 MuleMessage message = new DefaultMuleMessage(new FruitBowl(new Apple(), new Banana()), props, muleContext);
215
216 transformer.transform(message);
217 fail("Not all headers present, the transform should have failed");
218 }
219 }