1 package com.atlassian.plugins.codegen.modules.common.web;
2
3 import java.util.List;
4
5 import com.atlassian.plugins.codegen.modules.common.AbstractConditionTest;
6 import com.atlassian.plugins.codegen.modules.common.Resource;
7
8 import org.dom4j.Document;
9 import org.dom4j.Node;
10 import org.junit.Test;
11
12 import static org.junit.Assert.assertEquals;
13 import static org.junit.Assert.assertNotNull;
14
15
16
17
18
19 public abstract class AbstractWebFragmentTest<T extends AbstractWebFragmentProperties> extends AbstractConditionTest<T>
20 {
21
22 public static final String JIRA_MODIFIER_KEY_CTX_PROVIDER = "com.atlassian.jira.plugin.webfragment.contextproviders.ModifierKeyContextProvider";
23 public static final String XPATH_CTX_PROVIDER = "//context-provider";
24 public static final String XPATH_RESOURCE = "/atlassian-plugin/*//resource";
25 public static final String XPATH_PARAM_RELATIVE = "param";
26
27 @Test
28 public void contextProviderIsAdded() throws Exception
29 {
30 props.setContextProvider(JIRA_MODIFIER_KEY_CTX_PROVIDER);
31 creator.createModule(moduleLocation, props);
32
33 Document pluginDoc = getXmlDocument(pluginXml);
34
35 List<Node> ctxProviderList = pluginDoc.selectNodes(XPATH_CTX_PROVIDER);
36 assertEquals("wrong number of context providers", 1, ctxProviderList.size());
37
38 Node ctxProviderNode = ctxProviderList.get(0);
39 assertEquals("wrong context provider class", JIRA_MODIFIER_KEY_CTX_PROVIDER, ctxProviderNode.selectSingleNode("@class")
40 .getStringValue());
41 }
42
43 @Test
44 public void singleResourceAdded() throws Exception
45 {
46 Resource resource = new Resource();
47 resource.setName("style.css");
48 resource.setLocation("com/example/plugin/style.css");
49 resource.setType("download");
50
51 props.getResources()
52 .add(resource);
53
54 creator.createModule(moduleLocation, props);
55
56 Document pluginDoc = getXmlDocument(pluginXml);
57 List<Node> resourceList = pluginDoc.selectNodes(XPATH_RESOURCE);
58
59 assertEquals("expected single resource", 1, resourceList.size());
60
61 String nodeXpath = "//resource[@name='style.css' and @location='com/example/plugin/style.css' and @type='download']";
62 assertNotNull("single resource not found", pluginDoc.selectSingleNode(nodeXpath));
63
64 }
65
66 @Test
67 public void singleResourceNamePatternAdded() throws Exception
68 {
69 Resource resource = new Resource();
70 resource.setNamePattern("*.css");
71 resource.setLocation("com/example/plugin/style.css");
72 resource.setType("download");
73
74 props.getResources()
75 .add(resource);
76
77 creator.createModule(moduleLocation, props);
78
79 Document pluginDoc = getXmlDocument(pluginXml);
80 List<Node> resourceList = pluginDoc.selectNodes(XPATH_RESOURCE);
81
82 assertEquals("expected single resource", 1, resourceList.size());
83
84 String nodeXpath = "//resource[@namePattern='*.css' and @location='com/example/plugin/style.css' and @type='download']";
85 assertNotNull("single resource not found", pluginDoc.selectSingleNode(nodeXpath));
86
87 }
88
89 @Test
90 public void nameChosenOverPattern() throws Exception
91 {
92 Resource resource = new Resource();
93 resource.setName("style.css");
94 resource.setNamePattern("*.css");
95 resource.setLocation("com/example/plugin/style.css");
96 resource.setType("download");
97
98 props.getResources()
99 .add(resource);
100
101 creator.createModule(moduleLocation, props);
102
103 Document pluginDoc = getXmlDocument(pluginXml);
104 List<Node> resourceList = pluginDoc.selectNodes(XPATH_RESOURCE);
105
106 assertEquals("expected single resource", 1, resourceList.size());
107
108 String nodeXpath = "//resource[not(@namePattern) and @name='style.css' and @location='com/example/plugin/style.css' and @type='download']";
109 assertNotNull("single resource not found", pluginDoc.selectSingleNode(nodeXpath));
110
111 }
112
113 @Test
114 public void resourceParamsAdded() throws Exception
115 {
116 Resource resource = new Resource();
117 resource.setName("style.css");
118 resource.setLocation("com/example/plugin/style.css");
119 resource.setType("download");
120 resource.getParams()
121 .put("content-type", "text/css");
122 resource.getParams()
123 .put("awesome", "me");
124
125 props.getResources()
126 .add(resource);
127
128 creator.createModule(moduleLocation, props);
129
130 Document pluginDoc = getXmlDocument(pluginXml);
131 List<Node> resourceList = pluginDoc.selectNodes(XPATH_RESOURCE);
132
133 assertEquals("expected single resource", 1, resourceList.size());
134
135 String nodeXpath = "//resource[not(@namePattern) and @name='style.css' and @location='com/example/plugin/style.css' and @type='download']";
136 Node resourceNode = pluginDoc.selectSingleNode(nodeXpath);
137
138 List<Node> paramList = resourceNode.selectNodes(XPATH_PARAM_RELATIVE);
139 assertEquals("expected resource params", 2, paramList.size());
140
141 assertNotNull("missing content param", resourceNode.selectSingleNode("param[@name='content-type' and @value='text/css']"));
142 assertNotNull("missing awesome param", resourceNode.selectSingleNode("param[@name='awesome' and @value='me']"));
143
144 }
145
146 @Test
147 public void multipleResourcesAdded() throws Exception
148 {
149 Resource resource = new Resource();
150 resource.setName("style.css");
151 resource.setLocation("com/example/plugin/style.css");
152 resource.setType("download");
153 resource.getParams()
154 .put("content-type", "text/css");
155 resource.getParams()
156 .put("awesome", "me");
157
158 Resource resource2 = new Resource();
159 resource2.setName("custom.js");
160 resource2.setLocation("com/example/plugin/custom.js");
161 resource2.setType("download");
162
163 props.getResources()
164 .add(resource);
165 props.getResources()
166 .add(resource2);
167
168 creator.createModule(moduleLocation, props);
169
170 Document pluginDoc = getXmlDocument(pluginXml);
171 List<Node> resourceList = pluginDoc.selectNodes(XPATH_RESOURCE);
172
173 assertEquals("expected multiple resources", 2, resourceList.size());
174
175 String nodeXpath = "//resource[not(@namePattern) and @name='style.css' and @location='com/example/plugin/style.css' and @type='download']";
176 String node2Xpath = "//resource[not(@namePattern) and @name='custom.js' and @location='com/example/plugin/custom.js' and @type='download']";
177
178 assertNotNull("missing css resource", pluginDoc.selectSingleNode(nodeXpath));
179 assertNotNull("missing js resource", pluginDoc.selectSingleNode(node2Xpath));
180
181 }
182 }