1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.fit.console;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23
24 import org.apache.syncope.client.ui.commons.Constants;
25 import org.apache.syncope.client.ui.commons.status.Status;
26 import org.apache.syncope.client.ui.commons.status.StatusBean;
27 import org.apache.wicket.Component;
28 import org.apache.wicket.markup.html.WebMarkupContainer;
29 import org.apache.wicket.markup.html.basic.Label;
30 import org.apache.wicket.util.tester.FormTester;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33
34 public class BatchesITCase extends AbstractConsoleITCase {
35
36 private static final String TAB_PANEL = "body:content:body:container:content:tabbedPanel:panel:searchResult:";
37
38 private static final String CONTAINER = TAB_PANEL + "container:content:";
39
40 @BeforeEach
41 public void login() {
42 doLogin(ADMIN_UNAME, ADMIN_PWD);
43 }
44
45 @Test
46 public void users() {
47 TESTER.clickLink("body:realmsLI:realms", false);
48 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
49
50 Component component = findComponentByProp("username", CONTAINER
51 + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "rossini");
52 assertNotNull(component);
53
54 FormTester formTester = TESTER.newFormTester(CONTAINER
55 + "searchContainer:resultTable:tablePanel:groupForm");
56 assertNotNull(formTester);
57
58 formTester.select("checkgroup", 2);
59
60 TESTER.executeAjaxEvent(CONTAINER + "searchContainer:resultTable:tablePanel:batchLink",
61 Constants.ON_CLICK);
62
63 TESTER.assertComponent(CONTAINER
64 + "searchContainer:resultTable:batchModal:form:content:content:container", WebMarkupContainer.class);
65
66 assertNotNull(findComponentByProp("username", CONTAINER
67 + "searchContainer:resultTable:batchModal:form:content:content:container", "rossini"));
68 }
69
70 @Test
71 public void userResource() {
72 TESTER.clickLink("body:realmsLI:realms", false);
73 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
74
75 Component component = findComponentByProp("username", CONTAINER
76 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "rossini");
77 assertNotNull(component);
78
79 TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
80
81 TESTER.clickLink(
82 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
83 + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:4:"
84 + "action:action");
85
86 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
87 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
88 + "checkgroup:dataTable", WebMarkupContainer.class);
89
90 component = findComponentByProp("resource",
91 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
92 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
93 + "checkgroup:dataTable", "resource-csv");
94 assertNotNull(component);
95
96 FormTester formTester = TESTER.newFormTester(
97 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
98 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
99 assertNotNull(formTester);
100
101 formTester.select("checkgroup", 0);
102
103 TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
104 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
105 Constants.ON_CLICK);
106
107 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
108 + "secondLevelContainer:second:container", WebMarkupContainer.class);
109
110 assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
111 + "form:content:status:secondLevelContainer:second:container", "resource-csv"));
112 }
113
114 @Test
115 public void userStatus() {
116 userStatusBatch(1, "resource-testdb2");
117 }
118
119 @Test
120 public void userStatusOnSyncopeOnly() {
121 userStatusBatch(0, Constants.SYNCOPE);
122 }
123
124 private static void userStatusBatch(final int index, final String resource) {
125
126 TESTER.clickLink("body:realmsLI:realms", false);
127 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
128
129 Component component = findComponentByProp("username", CONTAINER
130 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "rossini");
131 assertNotNull(component);
132
133 TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
134
135 TESTER.clickLink(
136 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
137 + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
138 + "action:action");
139
140 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
141 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
142 + "checkgroup:dataTable", WebMarkupContainer.class);
143
144 component = findComponentByProp("resource",
145 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
146 + "content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", resource);
147
148 component = TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
149 + ":cells:1:cell:check");
150 assertEquals(Status.ACTIVE, StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
151 assertEquals(resource, StatusBean.class.cast(component.getDefaultModelObject()).getResource());
152
153 FormTester formTester = TESTER.newFormTester(
154 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
155 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
156 assertNotNull(formTester);
157
158 formTester.select("checkgroup", index);
159
160 TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
161 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
162 Constants.ON_CLICK);
163
164 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
165 + "secondLevelContainer:second:container", WebMarkupContainer.class);
166
167
168 TESTER.executeAjaxEvent(TAB_PANEL
169 + "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
170 + "second:container:actions:actionRepeater:0:action:action",
171 Constants.ON_CLICK);
172
173 assertSuccessMessage();
174 TESTER.cleanupFeedbackMessages();
175
176 TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
177 + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
178
179 TESTER.executeAjaxEvent(TAB_PANEL
180 + "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
181 Constants.ON_CLICK);
182
183 component = findComponentByProp("resource",
184 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
185 + "content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", resource);
186
187 component = TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
188 + ":cells:1:cell:check");
189 assertEquals(Status.SUSPENDED, StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
190 assertEquals(resource, StatusBean.class.cast(component.getDefaultModelObject()).getResource());
191
192
193 TESTER.clickLink("body:realmsLI:realms", false);
194 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
195
196 component = findComponentByProp("username", CONTAINER
197 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "rossini");
198 assertNotNull(component);
199
200 TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
201
202 TESTER.clickLink(
203 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
204 + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:3:"
205 + "action:action");
206
207 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
208 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
209 + "checkgroup:dataTable", WebMarkupContainer.class);
210
211 formTester = TESTER.newFormTester(
212 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
213 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
214 assertNotNull(formTester);
215
216 formTester.select("checkgroup", index);
217
218 TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
219 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
220 Constants.ON_CLICK);
221
222 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
223 + "secondLevelContainer:second:container", WebMarkupContainer.class);
224
225
226 TESTER.executeAjaxEvent(TAB_PANEL
227 + "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:"
228 + "second:container:actions:actionRepeater:1:action:action",
229 Constants.ON_CLICK);
230
231 assertSuccessMessage();
232 TESTER.cleanupFeedbackMessages();
233
234 TESTER.assertLabel(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
235 + "secondLevelContainer:second:container:selectedObjects:body:rows:1:cells:4:cell", "SUCCESS");
236
237 TESTER.executeAjaxEvent(TAB_PANEL
238 + "outerObjectsRepeater:2:outer:form:content:status:secondLevelContainer:back",
239 Constants.ON_CLICK);
240
241 component = findComponentByProp("resource",
242 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:container:"
243 + "content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", resource);
244
245 component = TESTER.getComponentFromLastRenderedPage(component.getPageRelativePath()
246 + ":cells:1:cell:check");
247 assertEquals(Status.ACTIVE, StatusBean.class.cast(component.getDefaultModelObject()).getStatus());
248 assertEquals(resource, StatusBean.class.cast(component.getDefaultModelObject()).getResource());
249
250 TESTER.executeAjaxEvent(TAB_PANEL
251 + "outerObjectsRepeater:2:outer:dialog:footer:buttons:0:button",
252 Constants.ON_CLICK);
253 }
254
255 @Test
256 public void groupResource() {
257 TESTER.clickLink("body:realmsLI:realms", false);
258 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
259
260 Component component = findComponentByProp("name", CONTAINER
261 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "director");
262 assertNotNull(component);
263
264 TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
265
266 TESTER.clickLink(
267 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
268 + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:5:"
269 + "action:action");
270
271 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
272 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
273 + "checkgroup:dataTable", WebMarkupContainer.class);
274
275 TESTER.clickLink(TAB_PANEL
276 + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
277 + "container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
278 + "toolbars:1:headers:2:header:orderByLink", true);
279
280 component = findComponentByProp("resource",
281 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
282 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
283 + "checkgroup:dataTable", "resource-ldap");
284 assertNotNull(component);
285
286 FormTester formTester = TESTER.newFormTester(
287 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
288 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
289 assertNotNull(formTester);
290
291 formTester.select("checkgroup", 0);
292
293 TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
294 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
295 Constants.ON_CLICK);
296
297 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
298 + "secondLevelContainer:second:container", WebMarkupContainer.class);
299
300 assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
301 + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-ldap"));
302 }
303
304 @Test
305 public void printerResource() {
306 TESTER.clickLink("body:realmsLI:realms", false);
307 TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:3:link");
308
309 Component component = findComponentByProp("key", CONTAINER
310 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
311 "8559d14d-58c2-46eb-a2d4-a7d35161e8f8");
312 assertNotNull(component);
313
314 TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
315
316 TESTER.clickLink(
317 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:1"
318 + ":outer:container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:"
319 + "action:action");
320
321 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
322 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
323 + "checkgroup:dataTable", WebMarkupContainer.class);
324
325 TESTER.clickLink(TAB_PANEL
326 + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:first:"
327 + "container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable:topToolbars:"
328 + "toolbars:1:headers:2:header:orderByLink", true);
329
330 component = findComponentByProp("resource",
331 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
332 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:groupForm:"
333 + "checkgroup:dataTable", "resource-db-scripted");
334 assertNotNull(component);
335
336 FormTester formTester = TESTER.newFormTester(
337 TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:firstLevelContainer:"
338 + "first:container:content:searchContainer:resultTable:tablePanel:groupForm");
339 assertNotNull(formTester);
340
341 formTester.select("checkgroup", 0);
342
343 TESTER.executeAjaxEvent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
344 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
345 Constants.ON_CLICK);
346
347 TESTER.assertComponent(TAB_PANEL + "outerObjectsRepeater:2:outer:form:content:status:"
348 + "secondLevelContainer:second:container", WebMarkupContainer.class);
349
350 assertNotNull(findComponentByProp("resource", TAB_PANEL + "outerObjectsRepeater:2:outer:"
351 + "form:content:status:secondLevelContainer:second:container:selectedObjects", "resource-db-scripted"));
352 }
353
354 @Test
355 public void executePropagationTask() {
356 TESTER.clickLink("body:idmPages:0:idmPageLI:idmPage", false);
357
358 Component component = findComponentByProp("key", "body:resources", "resource-testdb");
359 assertNotNull(component);
360 TESTER.executeAjaxEvent(component.getPageRelativePath() + ":res", Constants.ON_CLICK);
361 TESTER.clickLink(
362 "body:toggle:container:content:togglePanelContainer:container:actions:propagation");
363
364 FormTester formTester = TESTER.newFormTester(
365 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:firstLevelContainer:first:container:"
366 + "content:searchContainer:resultTable:tablePanel:groupForm");
367 assertNotNull(formTester);
368
369 formTester.select("checkgroup", 0);
370
371 TESTER.executeAjaxEvent("body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:"
372 + "firstLevelContainer:first:container:content:searchContainer:resultTable:tablePanel:batchLink",
373 Constants.ON_CLICK);
374
375 TESTER.assertComponent(
376 "body:toggle:outerObjectsRepeater:1:outer:form:content:tasks:secondLevelContainer:"
377 + "second:container:selectedObjects:body:rows:1:cells:1:cell", Label.class);
378 }
379 }