1 package com.atlassian.plugins.codegen.modules.common.web;
2
3 import com.atlassian.plugins.codegen.modules.common.AbstractConditionTest;
4 import com.atlassian.plugins.codegen.modules.common.Resource;
5
6 import org.junit.Before;
7 import org.junit.Test;
8
9 import static junit.framework.Assert.assertNotNull;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
12
13
14
15
16 public class WebResourceTest extends AbstractConditionTest<WebResourceProperties>
17 {
18 public static final String MODULE_NAME = "Awesome Web Resource";
19 public static final String XPATH_RESOURCE = "/atlassian-plugin/web-resource/resource";
20 public static final String DEPENDENCY1 = "jira.web.resources:ajs";
21 public static final String DEPENDENCY2 = "jira.web.resources:jquery";
22 public static final String CONTEXT1 = "atl.general";
23 public static final String CONTEXT2 = "atl.userprofile";
24
25 public WebResourceTest()
26 {
27 super("web-resource", new WebResourceModuleCreator());
28 }
29
30 @Before
31 public void setupProps() throws Exception
32 {
33 setProps(new WebResourceProperties(MODULE_NAME));
34 props.setIncludeExamples(false);
35 }
36
37 @Test
38 public void moduleHasDefaultKey() throws Exception
39 {
40 assertEquals("awesome-web-resource", getGeneratedModule().attributeValue("key"));
41 }
42
43 @Test
44 public void dependenciesAreAdded() throws Exception
45 {
46 createDependencies();
47
48 assertEquals(2, getGeneratedModule().selectNodes("//dependency").size());
49 }
50
51 @Test
52 public void dependency1HasValue() throws Exception
53 {
54 createDependencies();
55
56 assertNotNull(getGeneratedModule().selectSingleNode("//dependency[text() = '" + DEPENDENCY1 + "'"));
57 }
58
59 @Test
60 public void dependency2HasValue() throws Exception
61 {
62 createDependencies();
63
64 assertNotNull(getGeneratedModule().selectSingleNode("//dependency[text() = '" + DEPENDENCY2 + "'"));
65 }
66
67 @Test
68 public void contextsAreAdded() throws Exception
69 {
70 createContexts();
71
72 assertEquals(2, getGeneratedModule().selectNodes("//context").size());
73 }
74
75 @Test
76 public void context1HasValue() throws Exception
77 {
78 createContexts();
79
80 assertNotNull(getGeneratedModule().selectSingleNode("//context[text() = '" + CONTEXT1 + "'"));
81 }
82
83 @Test
84 public void context2HasValue() throws Exception
85 {
86 createContexts();
87
88 assertNotNull(getGeneratedModule().selectSingleNode("//context[text() = '" + CONTEXT2 + "'"));
89 }
90
91 @Test
92 public void transformationWithSingleTransformerAdded() throws Exception
93 {
94 createSingleTransformer();
95
96 assertNotNull(getGeneratedModule().selectSingleNode("//transformation"));
97 }
98
99 @Test
100 public void transformationWithSingleTransformerHasTransformer() throws Exception
101 {
102 createSingleTransformer();
103
104 assertNotNull(getGeneratedModule().selectSingleNode("//transformation/transformer"));
105 }
106
107 @Test
108 public void transformationWithSingleTransformerHasExtension() throws Exception
109 {
110 createSingleTransformer();
111
112 assertEquals("txt", getGeneratedModule().selectSingleNode("//transformation/@extension").getText());
113 }
114
115 @Test
116 public void transformationWithSingleTransformerHasTransformerKey() throws Exception
117 {
118 createSingleTransformer();
119
120 assertEquals("template", getGeneratedModule().selectSingleNode("//transformation/transformer/@key").getText());
121 }
122
123 @Test
124 public void singleTransformationWithMultipleTransformersAdded() throws Exception
125 {
126 createMultipleTransformers();
127
128 assertEquals(2, getGeneratedModule().selectNodes("//transformation/transformer").size());
129 }
130
131 @Test
132 public void singleTransformationWithMultipleTransformersHasTransformer1Key() throws Exception
133 {
134 createMultipleTransformers();
135
136 assertEquals("template", getGeneratedModule().selectSingleNode("//transformation/transformer[1]/@key").getText());
137 }
138
139 @Test
140 public void singleTransformationWithMultipleTransformersHasTransformer2Key() throws Exception
141 {
142 createMultipleTransformers();
143
144 assertEquals("prefix", getGeneratedModule().selectSingleNode("//transformation/transformer[2]/@key").getText());
145 }
146
147 @Test
148 public void multipleTransformationsAdded() throws Exception
149 {
150 createMultipleTransformations();
151
152 assertEquals(2, getGeneratedModule().selectNodes("//transformation").size());
153 }
154
155 @Test
156 public void multipleTransformationsHasTransformation1Extension() throws Exception
157 {
158 createMultipleTransformations();
159
160 assertEquals("txt", getGeneratedModule().selectSingleNode("//transformation[1]/@extension").getText());
161 }
162
163 @Test
164 public void multipleTransformationsHasTransformation2Extension() throws Exception
165 {
166 createMultipleTransformations();
167
168 assertEquals("css", getGeneratedModule().selectSingleNode("//transformation[2]/@extension").getText());
169 }
170
171 @Test
172 public void multipleTransformationsHasTransformer1Key() throws Exception
173 {
174 createMultipleTransformations();
175
176 assertEquals("template", getGeneratedModule().selectSingleNode("//transformation[1]/transformer/@key").getText());
177 }
178
179 @Test
180 public void multipleTransformationsHasTransformer2Key() throws Exception
181 {
182 createMultipleTransformations();
183
184 assertEquals("prefix", getGeneratedModule().selectSingleNode("//transformation[2]/transformer/@key").getText());
185 }
186
187 @Test
188 public void resourceIsAdded() throws Exception
189 {
190 props.getResources().add(cssResource);
191
192 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
193 }
194
195 @Test
196 public void resourceHasName() throws Exception
197 {
198 props.getResources().add(cssResource);
199
200 assertEquals("style.css", getGeneratedModule().selectSingleNode("resource/@name").getText());
201 }
202
203 @Test
204 public void resourceHasLocation() throws Exception
205 {
206 props.getResources().add(cssResource);
207
208 assertEquals("com/example/plugin/style.css", getGeneratedModule().selectSingleNode("resource/@location").getText());
209 }
210
211 @Test
212 public void resourceHasType() throws Exception
213 {
214 props.getResources().add(cssResource);
215
216 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
217 }
218
219 @Test
220 public void namePatternResourceAdded() throws Exception
221 {
222 props.getResources().add(cssNamePatternResource);
223
224 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
225 }
226
227 @Test
228 public void namePatternResourceHasNamePattern() throws Exception
229 {
230 props.getResources().add(cssNamePatternResource);
231
232 assertEquals("*.css", getGeneratedModule().selectSingleNode("resource/@namePattern").getText());
233 }
234
235 @Test
236 public void namePatternResourceHasLocation() throws Exception
237 {
238 props.getResources().add(cssNamePatternResource);
239
240 assertEquals("com/example/plugin", getGeneratedModule().selectSingleNode("resource/@location").getText());
241 }
242
243 @Test
244 public void namePatternResourceHasType() throws Exception
245 {
246 props.getResources().add(cssNamePatternResource);
247
248 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
249 }
250
251 @Test
252 public void resourceNameChosenOverPattern() throws Exception
253 {
254 cssResource.setNamePattern("*.css");
255 props.getResources().add(cssResource);
256
257 assertNull(getGeneratedModule().selectSingleNode("resource/@namePattern"));
258 }
259
260 @Test
261 public void resourceParamHasName() throws Exception
262 {
263 cssResource.getParams().put("content-type", "text/css");
264 props.getResources().add(cssResource);
265
266 assertEquals("content-type", getGeneratedModule().selectSingleNode("resource/param/@name").getText());
267 }
268
269 @Test
270 public void resourceParamHasValue() throws Exception
271 {
272 cssResource.getParams().put("content-type", "text/css");
273 props.getResources().add(cssResource);
274
275 assertEquals("text/css", getGeneratedModule().selectSingleNode("resource/param/@value").getText());
276 }
277
278 @Test
279 public void secondResourceParamAdded() throws Exception
280 {
281 cssResource.getParams().put("content-type", "text/css");
282 cssResource.getParams().put("awesome", "me");
283 props.getResources().add(cssResource);
284
285 assertEquals("me", getGeneratedModule().selectSingleNode("resource/param[@name='awesome']/@value").getText());
286 }
287
288 @Test
289 public void allResourceParamsAdded() throws Exception
290 {
291 cssResource.getParams().put("content-type", "text/css");
292 cssResource.getParams().put("awesome", "me");
293 props.getResources().add(cssResource);
294
295 assertEquals(2, getGeneratedModule().selectNodes("resource/param").size());
296 }
297
298 @Test
299 public void secondResourceAdded() throws Exception
300 {
301 Resource resource2 = new Resource();
302 resource2.setName("custom.js");
303 resource2.setLocation("com/example/plugin/custom.js");
304 resource2.setType("download");
305
306 props.getResources().add(cssResource);
307 props.getResources().add(resource2);
308
309 assertEquals("com/example/plugin/custom.js",
310 getGeneratedModule().selectSingleNode("resource[@name='custom.js']/@location").getText());
311 }
312
313 @Test
314 public void allResourcesAdded() throws Exception
315 {
316 Resource resource2 = new Resource();
317 resource2.setName("custom.js");
318 resource2.setLocation("com/example/plugin/custom.js");
319 resource2.setType("download");
320
321 props.getResources().add(cssResource);
322 props.getResources().add(resource2);
323
324 assertEquals(2, getGeneratedModule().selectNodes("resource").size());
325 }
326
327 @Test
328 public void nonBatchResourceAdded() throws Exception
329 {
330 cssResource.setBatch(false);
331
332 props.getResources().add(cssResource);
333
334 assertEquals("false", getGeneratedModule().selectSingleNode("//resource/param[@name='batch']/@value").getText());
335 }
336
337 protected void createDependencies()
338 {
339 props.getResources().add(cssResource);
340
341 props.addDependency(DEPENDENCY1);
342 props.addDependency(DEPENDENCY2);
343 }
344
345 protected void createContexts()
346 {
347 props.getResources().add(cssResource);
348
349 props.addContext(CONTEXT1);
350 props.addContext(CONTEXT2);
351 }
352
353 protected void createSingleTransformer()
354 {
355 props.getResources().add(cssResource);
356
357 WebResourceTransformation transformation = new WebResourceTransformation("txt");
358 transformation.addTransformerKey("template");
359
360 props.addTransformation(transformation);
361 }
362
363 protected void createMultipleTransformers()
364 {
365 props.getResources().add(cssResource);
366
367 WebResourceTransformation transformation = new WebResourceTransformation("txt");
368 transformation.addTransformerKey("template");
369 transformation.addTransformerKey("prefix");
370
371 props.addTransformation(transformation);
372 }
373
374 protected void createMultipleTransformations()
375 {
376 props.getResources().add(cssResource);
377
378 WebResourceTransformation txtTrans = new WebResourceTransformation("txt");
379 txtTrans.addTransformerKey("template");
380
381 WebResourceTransformation cssTrans = new WebResourceTransformation("css");
382 cssTrans.addTransformerKey("prefix");
383
384 props.addTransformation(txtTrans);
385 props.addTransformation(cssTrans);
386 }
387 }