1 package com.atlassian.plugins.codegen.modules.common;
2
3 import com.atlassian.plugins.codegen.AbstractModuleCreatorTestCase;
4 import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
5 import com.atlassian.plugins.codegen.modules.common.web.AbstractConditionsProperties;
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 public abstract class AbstractConditionTest<T extends AbstractConditionsProperties> extends AbstractModuleCreatorTestCase<T>
17 {
18 public static final String XPATH_ALL_CONDITIONS = "//conditions";
19 public static final String XPATH_TOP_CONDITIONS = "/atlassian-plugin/*[not(self::conditions)]/conditions";
20 public static final String XPATH_CONDITIONS_RELATIVE = "conditions";
21 public static final String XPATH_ALL_CONDITION = "//condition";
22 public static final String XPATH_TOP_CONDITION = "/atlassian-plugin/*[not(self::conditions)]/condition";
23 public static final String XPATH_CONDITION_RELATIVE = "condition";
24 public static final String JIRA_GLOBAL_PERMISSION = "com.atlassian.jira.plugin.webfragment.conditions.JiraGlobalPermissionCondition";
25 public static final String JIRA_HAS_ISSUE_PERMISSION = "com.atlassian.jira.plugin.webfragment.conditions.HasIssuePermissionCondition";
26 public static final String XPATH_PARAM_RELATIVE = "param";
27
28 protected AbstractConditionTest(String moduleType, PluginModuleCreator<T> creator)
29 {
30 super(moduleType, creator);
31 }
32
33 @Test
34 public void emptyConditionsAreNotIncluded() throws Exception
35 {
36 assertEquals(0, getGeneratedModule().selectNodes("//condition").size());
37 }
38
39 @Test
40 public void singleConditionAdded() throws Exception
41 {
42 props.getConditions().add(new Condition(JIRA_GLOBAL_PERMISSION));
43
44 assertNotNull(getGeneratedModule().selectSingleNode("//condition"));
45 }
46
47 @Test
48 public void conditionHasClass() throws Exception
49 {
50 props.getConditions().add(new Condition(JIRA_GLOBAL_PERMISSION));
51
52 assertEquals(JIRA_GLOBAL_PERMISSION, getGeneratedModule().selectSingleNode("//condition/@class").getText());
53 }
54
55 @Test
56 public void conditionIsNotInverted() throws Exception
57 {
58 props.getConditions().add(new Condition(JIRA_GLOBAL_PERMISSION));
59
60 assertNull(JIRA_GLOBAL_PERMISSION, getGeneratedModule().selectSingleNode("//condition/@invert"));
61 }
62
63 @Test
64 public void invertedConditionHasAttribute() throws Exception
65 {
66 Condition jiraCondition = new Condition(JIRA_GLOBAL_PERMISSION);
67 jiraCondition.setInvert(true);
68
69 props.getConditions().add(jiraCondition);
70
71 assertEquals("true", getGeneratedModule().selectSingleNode("//condition/@invert").getText());
72 }
73
74 @Test
75 public void singleANDConditionsAdded() throws Exception
76 {
77 createSingleConditions(Conditions.AND);
78
79 assertNotNull(getGeneratedModule().selectSingleNode("//conditions"));
80 }
81
82 @Test
83 public void singleANDConditionsHasType() throws Exception
84 {
85 createSingleConditions(Conditions.AND);
86
87 assertEquals(Conditions.AND, getGeneratedModule().selectSingleNode("//conditions/@type").getText());
88 }
89
90 @Test
91 public void singleANDConditionsHasCondition() throws Exception
92 {
93 createSingleConditions(Conditions.AND);
94
95 assertNotNull(getGeneratedModule().selectSingleNode("//conditions/condition"));
96 }
97
98 @Test
99 public void singleORConditionsAdded() throws Exception
100 {
101 createSingleConditions(Conditions.OR);
102
103 assertNotNull(getGeneratedModule().selectSingleNode("//conditions"));
104 }
105
106 @Test
107 public void singleORConditionsHasType() throws Exception
108 {
109 createSingleConditions(Conditions.OR);
110
111 assertEquals(Conditions.OR, getGeneratedModule().selectSingleNode("//conditions/@type").getText());
112 }
113
114 @Test
115 public void nestedMixedConditionsAdded() throws Exception
116 {
117 createNestedMixedConditions();
118
119 assertNotNull(getGeneratedModule().selectSingleNode("//conditions"));
120 }
121
122 @Test
123 public void nestedMixedConditionsHasType() throws Exception
124 {
125 createNestedMixedConditions();
126
127 assertEquals(Conditions.AND, getGeneratedModule().selectSingleNode("//conditions/@type").getText());
128 }
129
130 @Test
131 public void nestedMixedConditionsHasNestedType() throws Exception
132 {
133 createNestedMixedConditions();
134
135 assertEquals(Conditions.OR, getGeneratedModule().selectSingleNode("//conditions/conditions/@type").getText());
136 }
137
138 @Test
139 public void nestedMixedConditionsHasClass() throws Exception
140 {
141 createNestedMixedConditions();
142
143 assertEquals(JIRA_GLOBAL_PERMISSION, getGeneratedModule().selectSingleNode("//conditions/condition/@class").getText());
144 }
145
146 @Test
147 public void nestedMixedConditionsHasNestedClass() throws Exception
148 {
149 createNestedMixedConditions();
150
151 assertEquals(JIRA_HAS_ISSUE_PERMISSION, getGeneratedModule().selectSingleNode("//conditions/conditions/condition/@class").getText());
152 }
153
154 @Test
155 public void conditionCanBeSiblingOfConditions() throws Exception
156 {
157 Conditions conditionsRoot = new Conditions(Conditions.AND);
158 conditionsRoot.addCondition(new Condition(JIRA_GLOBAL_PERMISSION));
159
160 Condition singleCondition = new Condition(JIRA_HAS_ISSUE_PERMISSION);
161
162 props.getConditions().add(conditionsRoot);
163 props.getConditions().add(singleCondition);
164
165 assertNotNull(getGeneratedModule().selectSingleNode("//condition"));
166 }
167
168 @Test
169 public void conditionsCanBeSiblingOfConditions() throws Exception
170 {
171 Conditions conditionsRoot = new Conditions(Conditions.AND);
172 conditionsRoot.addCondition(new Condition(JIRA_GLOBAL_PERMISSION));
173
174 Condition singleCondition = new Condition(JIRA_HAS_ISSUE_PERMISSION);
175
176 props.getConditions().add(conditionsRoot);
177 props.getConditions().add(singleCondition);
178
179 assertNotNull(getGeneratedModule().selectSingleNode("//conditions/condition"));
180 }
181
182 @Test
183 public void conditionParamsAreAdded() throws Exception
184 {
185 Condition condition = new Condition(JIRA_GLOBAL_PERMISSION);
186 condition.getParams().put("permission", "admin");
187 condition.getParams().put("username", "user");
188
189 props.getConditions().add(condition);
190
191 assertEquals(2, getGeneratedModule().selectNodes("//condition/param").size());
192 }
193
194 @Test
195 public void conditionParamHasName() throws Exception
196 {
197 Condition condition = new Condition(JIRA_GLOBAL_PERMISSION);
198 condition.getParams().put("permission", "admin");
199
200 props.getConditions().add(condition);
201
202 assertEquals("permission", getGeneratedModule().selectSingleNode("//condition/param/@name").getText());
203 }
204
205 @Test
206 public void conditionParamHasValue() throws Exception
207 {
208 Condition condition = new Condition(JIRA_GLOBAL_PERMISSION);
209 condition.getParams().put("permission", "admin");
210
211 props.getConditions().add(condition);
212
213 assertEquals("admin", getGeneratedModule().selectSingleNode("//condition/param/@value").getText());
214 }
215
216 protected void createSingleConditions(String type)
217 {
218 Conditions conditionsRoot = new Conditions(type);
219 conditionsRoot.addCondition(new Condition(JIRA_GLOBAL_PERMISSION));
220
221 props.getConditions().add(conditionsRoot);
222 }
223
224 protected void createNestedMixedConditions()
225 {
226 Conditions conditionsRoot = new Conditions(Conditions.AND);
227 conditionsRoot.addCondition(new Condition(JIRA_GLOBAL_PERMISSION));
228
229 Conditions nestedConditions = new Conditions(Conditions.OR);
230 nestedConditions.addCondition(new Condition(JIRA_HAS_ISSUE_PERMISSION));
231
232 conditionsRoot.addCondition(nestedConditions);
233 props.getConditions().add(conditionsRoot);
234 }
235 }