1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.role;
17
18 import org.junit.Test;
19 import org.kuali.rice.kew.engine.RouteContext;
20 import org.kuali.rice.kew.routeheader.DocumentContent;
21 import org.kuali.rice.kew.routeheader.StandardDocumentContent;
22 import org.kuali.rice.kew.rule.bo.RuleAttribute;
23 import org.kuali.rice.test.BaseRiceTestCase;
24
25 import java.util.List;
26 import java.util.Map;
27
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.fail;
30
31
32
33
34
35
36
37 public class XPathQualifierResolverTest extends BaseRiceTestCase {
38
39 private static final String SIMPLE_CONFIG_1 = "<resolverConfig>" +
40 "<baseXPathExpression>/xmlData/accountNumbers</baseXPathExpression>" +
41 "<qualifier name=\"accountNumber\">" +
42 "<xPathExpression>./accountNumber</xPathExpression>" +
43 "</qualifier>" +
44 "</resolverConfig>";
45
46 private static final String SIMPLE_DOC_XML_1 = "<xmlData>" +
47 "<accountNumbers>" +
48 "<accountNumber>12345</accountNumber>" +
49 "<accountNumber>54321</accountNumber>" +
50 "<accountNumber>102030</accountNumber>" +
51 "<accountNumber>302010</accountNumber>" +
52 "</accountNumbers>" +
53 "</xmlData>";
54
55 private static final String SIMPLE_CONFIG_2 = "<resolverConfig>" +
56 "<qualifier name=\"accountNumber\">" +
57 "<xPathExpression>//accountNumber</xPathExpression>" +
58 "</qualifier>" +
59 "</resolverConfig>";
60
61 private static final String COMPOUND_CONFIG_1 = "<resolverConfig>" +
62 "<baseXPathExpression>/xmlData/chartOrg</baseXPathExpression>" +
63 "<qualifier name=\"chart\">" +
64 "<xPathExpression>./chart</xPathExpression>" +
65 "</qualifier>" +
66 "<qualifier name=\"org\">" +
67 "<xPathExpression>./org</xPathExpression>" +
68 "</qualifier>" +
69 "</resolverConfig>";
70
71 private static final String COMPOUND_CONFIG_2 = "<resolverConfig>" +
72 "<qualifier name=\"chart\">" +
73 "<xPathExpression>//chart</xPathExpression>" +
74 "</qualifier>" +
75 "<qualifier name=\"org\">" +
76 "<xPathExpression>//org</xPathExpression>" +
77 "</qualifier>" +
78 "</resolverConfig>";
79
80
81 private static final String COMPOUND_DOC_XML_1 = "<xmlData>" +
82 "<chartOrg>" +
83 "<chart>BL</chart>" +
84 "<org>BUS</org>" +
85 "</chartOrg>" +
86 "<chartOrg>" +
87 "<chart>IN</chart>" +
88 "<org>MED</org>" +
89 "</chartOrg>" +
90 "</xmlData>";
91
92 private static final String COMPOUND_DOC_XML_2 = "<xmlData>" +
93 "<chartOrg>" +
94 "<chart>BL</chart>" +
95 "<org>BUS</org>" +
96 "<chart>IN</chart>" +
97 "<org>MED</org>" +
98 "</chartOrg>" +
99 "</xmlData>";
100
101 private static final String COMPOUND_DOC_XML_3 = "<xmlData>" +
102 "<chartOrg>" +
103 "<chart>BL</chart>" +
104 "<org>BUS</org>" +
105 "</chartOrg>" +
106 "</xmlData>";
107
108 @Test
109 public void testResolve_simpleMap() throws Exception {
110 XPathQualifierResolver resolver = new XPathQualifierResolver();
111
112 RuleAttribute ruleAttribute = new RuleAttribute();
113 ruleAttribute.setXmlConfigData(SIMPLE_CONFIG_1);
114 resolver.setRuleAttribute(ruleAttribute);
115
116 RouteContext context = new RouteContext();
117 DocumentContent docContent = new StandardDocumentContent(SIMPLE_DOC_XML_1);
118 context.setDocumentContent(docContent);
119
120 List<Map<String, String>> maps = resolver.resolve(context);
121 verifyAccountmaps(maps);
122 }
123
124 @Test
125 public void testResolve_simpleMap_noBaseXPath() throws Exception {
126 XPathQualifierResolver resolver = new XPathQualifierResolver();
127
128 RuleAttribute ruleAttribute = new RuleAttribute();
129 ruleAttribute.setXmlConfigData(SIMPLE_CONFIG_2);
130 resolver.setRuleAttribute(ruleAttribute);
131
132 RouteContext context = new RouteContext();
133 DocumentContent docContent = new StandardDocumentContent(SIMPLE_DOC_XML_1);
134 context.setDocumentContent(docContent);
135
136 List<Map<String, String>> maps = resolver.resolve(context);
137 verifyAccountmaps(maps);
138
139 }
140
141 private void verifyAccountmaps(List<Map<String, String>> maps) {
142 assertEquals("Incorrect number of attribute sets.", 4, maps.size());
143
144 String acctNumKey = "accountNumber";
145 Map<String, String> map1 = maps.get(0);
146 assertEquals(1, map1.size());
147 assertEquals("12345", map1.get(acctNumKey));
148 Map<String, String> map2 = maps.get(1);
149 assertEquals(1, map2.size());
150 assertEquals("54321", map2.get(acctNumKey));
151 Map<String, String> map3 = maps.get(2);
152 assertEquals(1, map3.size());
153 assertEquals("102030", map3.get(acctNumKey));
154 Map<String, String> map4 = maps.get(3);
155 assertEquals(1, map4.size());
156 assertEquals("302010", map4.get(acctNumKey));
157 }
158
159 @Test
160 public void testResolve_compoundMap1() throws Exception {
161 XPathQualifierResolver resolver = new XPathQualifierResolver();
162
163 RuleAttribute ruleAttribute = new RuleAttribute();
164 ruleAttribute.setXmlConfigData(COMPOUND_CONFIG_1);
165 resolver.setRuleAttribute(ruleAttribute);
166
167 RouteContext context = new RouteContext();
168 DocumentContent docContent = new StandardDocumentContent(COMPOUND_DOC_XML_1);
169 context.setDocumentContent(docContent);
170
171 List<Map<String, String>> maps = resolver.resolve(context);
172 assertEquals("Incorrect number of attribute sets", 2, maps.size());
173
174 String chartKey = "chart";
175 String orgKey = "org";
176
177 Map<String, String> map1 = maps.get(0);
178 assertEquals(2, map1.size());
179 assertEquals("BL", map1.get(chartKey));
180 assertEquals("BUS", map1.get(orgKey));
181
182 Map<String, String> map2 = maps.get(1);
183 assertEquals(2, map2.size());
184 assertEquals("IN", map2.get(chartKey));
185 assertEquals("MED", map2.get(orgKey));
186 }
187
188 @Test
189 public void testResolve_compoundMap() throws Exception {
190 XPathQualifierResolver resolver = new XPathQualifierResolver();
191
192 RuleAttribute ruleAttribute = new RuleAttribute();
193 ruleAttribute.setXmlConfigData(COMPOUND_CONFIG_1);
194 resolver.setRuleAttribute(ruleAttribute);
195
196 RouteContext context = new RouteContext();
197 DocumentContent docContent = new StandardDocumentContent(COMPOUND_DOC_XML_2);
198 context.setDocumentContent(docContent);
199
200
201
202 try {
203 resolver.resolve(context);
204 fail("Invalid XML was encountered, resolver should have thrown an exception");
205 } catch (Exception e) {
206 e.printStackTrace();
207 }
208
209
210
211 context = new RouteContext();
212 docContent = new StandardDocumentContent(COMPOUND_DOC_XML_3);
213 context.setDocumentContent(docContent);
214
215 List<Map<String, String>> maps = resolver.resolve(context);
216 assertEquals(1, maps.size());
217 assertEquals("BL", maps.get(0).get("chart"));
218 assertEquals("BUS", maps.get(0).get("org"));
219 }
220
221 @Test
222 public void testResolve_compoundMap_noBaseXPath() throws Exception {
223 XPathQualifierResolver resolver = new XPathQualifierResolver();
224
225 RuleAttribute ruleAttribute = new RuleAttribute();
226 ruleAttribute.setXmlConfigData(COMPOUND_CONFIG_2);
227 resolver.setRuleAttribute(ruleAttribute);
228
229 RouteContext context = new RouteContext();
230 DocumentContent docContent = new StandardDocumentContent(COMPOUND_DOC_XML_2);
231 context.setDocumentContent(docContent);
232
233
234
235 try {
236 resolver.resolve(context);
237 fail("Invalid XML was encountered, resolver should have thrown an exception");
238 } catch (Exception e) {
239 e.printStackTrace();
240 }
241
242
243
244 context = new RouteContext();
245 docContent = new StandardDocumentContent(COMPOUND_DOC_XML_3);
246 context.setDocumentContent(docContent);
247
248 List<Map<String, String>> maps = resolver.resolve(context);
249 assertEquals(1, maps.size());
250 assertEquals("BL", maps.get(0).get("chart"));
251 assertEquals("BUS", maps.get(0).get("org"));
252
253 }
254
255 }