1 package com.atlassian.plugins.codegen.modules.common.web;
2
3 import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
4 import com.atlassian.plugins.codegen.modules.common.AbstractConditionTest;
5 import com.atlassian.plugins.codegen.modules.common.Resource;
6
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
17 public abstract class AbstractWebFragmentTest<T extends AbstractWebFragmentProperties> extends AbstractConditionTest<T>
18 {
19 public static final String JIRA_MODIFIER_KEY_CTX_PROVIDER = "com.atlassian.jira.plugin.webfragment.contextproviders.ModifierKeyContextProvider";
20 public static final String XPATH_CTX_PROVIDER = "//context-provider";
21 public static final String MODULE_NAME = "My Web Thing";
22 public static final String MODULE_KEY = "my-web-thing";
23
24 protected AbstractWebFragmentTest(String moduleType, PluginModuleCreator<T> creator)
25 {
26 super(moduleType, creator);
27 }
28
29 @Test
30 public void moduleHasDefaultKey() throws Exception
31 {
32 assertEquals(MODULE_KEY, getGeneratedModule().attributeValue("key"));
33 }
34
35 @Test
36 public void moduleHasDefaultI18nNameKey() throws Exception
37 {
38 assertEquals(MODULE_KEY + ".name", getGeneratedModule().attributeValue("i18n-name-key"));
39 }
40
41 @Test
42 public void contextProviderIsAdded() throws Exception
43 {
44 props.setContextProvider(JIRA_MODIFIER_KEY_CTX_PROVIDER);
45
46 getGeneratedModule();
47 }
48
49 @Test
50 public void contextProviderHasClass() throws Exception
51 {
52 props.setContextProvider(JIRA_MODIFIER_KEY_CTX_PROVIDER);
53
54 assertEquals(JIRA_MODIFIER_KEY_CTX_PROVIDER,
55 getGeneratedModule().selectSingleNode(XPATH_CTX_PROVIDER + "/@class").getText());
56 }
57
58 @Test
59 public void resourceIsAdded() throws Exception
60 {
61 props.getResources().add(cssResource);
62
63 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
64 }
65
66 @Test
67 public void resourceHasName() throws Exception
68 {
69 props.getResources().add(cssResource);
70
71 assertEquals("style.css", getGeneratedModule().selectSingleNode("resource/@name").getText());
72 }
73
74 @Test
75 public void resourceHasLocation() throws Exception
76 {
77 props.getResources().add(cssResource);
78
79 assertEquals("com/example/plugin/style.css", getGeneratedModule().selectSingleNode("resource/@location").getText());
80 }
81
82 @Test
83 public void resourceHasType() throws Exception
84 {
85 props.getResources().add(cssResource);
86
87 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
88 }
89
90 @Test
91 public void namePatternResourceAdded() throws Exception
92 {
93 props.getResources().add(cssNamePatternResource);
94
95 assertNotNull(getGeneratedModule().selectSingleNode("resource"));
96 }
97
98 @Test
99 public void namePatternResourceHasNamePattern() throws Exception
100 {
101 props.getResources().add(cssNamePatternResource);
102
103 assertEquals("*.css", getGeneratedModule().selectSingleNode("resource/@namePattern").getText());
104 }
105
106 @Test
107 public void namePatternResourceHasLocation() throws Exception
108 {
109 props.getResources().add(cssNamePatternResource);
110
111 assertEquals("com/example/plugin", getGeneratedModule().selectSingleNode("resource/@location").getText());
112 }
113
114 @Test
115 public void namePatternResourceHasType() throws Exception
116 {
117 props.getResources().add(cssNamePatternResource);
118
119 assertEquals("download", getGeneratedModule().selectSingleNode("resource/@type").getText());
120 }
121
122 @Test
123 public void resourceNameChosenOverPattern() throws Exception
124 {
125 cssResource.setNamePattern("*.css");
126 props.getResources().add(cssResource);
127
128 assertNull(getGeneratedModule().selectSingleNode("resource/@namePattern"));
129 }
130
131 @Test
132 public void resourceParamHasName() throws Exception
133 {
134 cssResource.getParams().put("content-type", "text/css");
135 props.getResources().add(cssResource);
136
137 assertEquals("content-type", getGeneratedModule().selectSingleNode("resource/param/@name").getText());
138 }
139
140 @Test
141 public void resourceParamHasValue() throws Exception
142 {
143 cssResource.getParams().put("content-type", "text/css");
144 props.getResources().add(cssResource);
145
146 assertEquals("text/css", getGeneratedModule().selectSingleNode("resource/param/@value").getText());
147 }
148
149 @Test
150 public void secondResourceParamAdded() throws Exception
151 {
152 cssResource.getParams().put("content-type", "text/css");
153 cssResource.getParams().put("awesome", "me");
154 props.getResources().add(cssResource);
155
156 assertEquals("me", getGeneratedModule().selectSingleNode("resource/param[@name='awesome']/@value").getText());
157 }
158
159 @Test
160 public void allResourceParamsAdded() throws Exception
161 {
162 cssResource.getParams().put("content-type", "text/css");
163 cssResource.getParams().put("awesome", "me");
164 props.getResources().add(cssResource);
165
166 assertEquals(2, getGeneratedModule().selectNodes("resource/param").size());
167 }
168
169 @Test
170 public void secondResourceAdded() throws Exception
171 {
172 Resource resource2 = new Resource();
173 resource2.setName("custom.js");
174 resource2.setLocation("com/example/plugin/custom.js");
175 resource2.setType("download");
176
177 props.getResources().add(cssResource);
178 props.getResources().add(resource2);
179
180 assertEquals("com/example/plugin/custom.js",
181 getGeneratedModule().selectSingleNode("resource[@name='custom.js']/@location").getText());
182 }
183
184 @Test
185 public void allResourcesAdded() throws Exception
186 {
187 Resource resource2 = new Resource();
188 resource2.setName("custom.js");
189 resource2.setLocation("com/example/plugin/custom.js");
190 resource2.setType("download");
191
192 props.getResources().add(cssResource);
193 props.getResources().add(resource2);
194
195 assertEquals(2, getGeneratedModule().selectNodes("resource").size());
196 }
197 }