View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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.commons.lang3.StringUtils;
25  import org.apache.syncope.client.console.wicket.markup.html.form.IndicatingOnConfirmAjaxLink;
26  import org.apache.syncope.client.ui.commons.Constants;
27  import org.apache.wicket.Component;
28  import org.apache.wicket.markup.html.basic.Label;
29  import org.apache.wicket.markup.html.form.TextField;
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 GroupsITCase 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 read() {
47          TESTER.clickLink("body:realmsLI:realms", false);
48          TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
49  
50          Component component = findComponentByProp("name", CONTAINER
51                  + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "artDirector");
52          assertNotNull(component);
53  
54          TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
55          TESTER.clickLink(TAB_PANEL
56                  + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
57                  + "actions:actions:actionRepeater:2:action:action");
58  
59          FormTester formTester = TESTER.newFormTester(TAB_PANEL
60                  + "outerObjectsRepeater:8:outer:container:content:togglePanelContainer:membersForm");
61  
62          formTester.select("type:dropDownChoiceField", 0);
63          formTester.submit("changeit");
64  
65          TESTER.assertModelValue(TAB_PANEL
66                  + "outerObjectsRepeater:7:outer:dialog:header:header-label", "USER members of artDirector");
67          assertNotNull(findComponentByProp("username", TAB_PANEL
68                  + "outerObjectsRepeater:7:outer:form:content:searchResult:container:content:"
69                  + "searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "puccini"));
70  
71          TESTER.executeAjaxEvent(TAB_PANEL
72                  + "outerObjectsRepeater:7:outer:dialog:footer:buttons:0:button", Constants.ON_CLICK);
73      }
74  
75      @Test
76      public void filteredSearch() {
77          TESTER.clickLink("body:realmsLI:realms", false);
78          TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
79  
80          TESTER.clickLink(
81                  "body:content:body:container:content:tabbedPanel:panel:accordionPanel:tabs:0:title");
82  
83          TESTER.executeAjaxEvent(
84                  "body:content:body:container:content:tabbedPanel:panel:accordionPanel:tabs:0:body:"
85                  + "content:searchFormContainer:search:multiValueContainer:innerForm:content:view:0:panelPlus:add",
86                  Constants.ON_CLICK);
87  
88          TESTER.assertComponent(
89                  "body:content:body:container:content:tabbedPanel:panel:accordionPanel:tabs:0:body:"
90                  + "content:searchFormContainer:search:multiValueContainer:innerForm:content:view:0:panel:container:"
91                  + "value:textField", TextField.class);
92      }
93  
94      private static void cloneGroup(final String group) {
95          TESTER.clickLink("body:realmsLI:realms", false);
96          TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
97  
98          Component component = findComponentByProp("name", CONTAINER
99                  + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", group);
100         assertNotNull(component);
101 
102         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
103         TESTER.clickLink(TAB_PANEL
104                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
105                 + "actions:actions:actionRepeater:9:action:action");
106 
107         TESTER.assertComponent(TAB_PANEL
108                 + "outerObjectsRepeater:0:outer:form:content:form:view:name:textField",
109                 TextField.class);
110 
111         FormTester formTester = TESTER.newFormTester(TAB_PANEL
112                 + "outerObjectsRepeater:0:outer:form:content:form");
113         assertNotNull(formTester);
114         formTester.setValue("view:name:textField", group + "_clone");
115         formTester.submit("buttons:finish");
116 
117         assertSuccessMessage();
118         TESTER.cleanupFeedbackMessages();
119 
120         TESTER.clickLink(TAB_PANEL
121                 + "outerObjectsRepeater:0:outer:form:content:action:actionRepeater:0:action:action");
122 
123         component = findComponentByProp("name", CONTAINER
124                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", group + "_clone");
125         assertNotNull(component);
126     }
127 
128     @Test
129     public void clickToCloneGroup() {
130         cloneGroup("director");
131 
132         Component component = findComponentByProp("name", CONTAINER
133                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "director_clone");
134         assertNotNull(component);
135 
136         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
137         TESTER.getRequest().addParameter("confirm", "true");
138         TESTER.clickLink(TAB_PANEL
139                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
140                 + "actions:actions:actionRepeater:9:action:action");
141 
142         TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(TAB_PANEL
143                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
144                 + "actions:actions:actionRepeater:10:action:action"), Constants.ON_CLICK);
145 
146         assertSuccessMessage();
147         TESTER.cleanupFeedbackMessages();
148     }
149 
150     @Test
151     public void editGroup() {
152         cloneGroup("director");
153 
154         Component component = findComponentByProp("name", CONTAINER
155                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "director_clone");
156         assertNotNull(component);
157 
158         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
159         TESTER.clickLink(TAB_PANEL
160                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
161                 + "actions:actions:actionRepeater:0:action:action");
162 
163         TESTER.assertComponent(TAB_PANEL
164                 + "outerObjectsRepeater:0:outer:form:content:form:view:name:textField",
165                 TextField.class);
166 
167         FormTester formTester = TESTER.newFormTester(TAB_PANEL
168                 + "outerObjectsRepeater:0:outer:form:content:form");
169         assertNotNull(formTester);
170         formTester.submit("buttons:next");
171 
172         // -------------------------
173         // SYNCOPE-1026
174         // -------------------------
175         assertEquals(TESTER.getComponentFromLastRenderedPage(
176                 "body:content:body:container:content:tabbedPanel:panel:"
177                 + "searchResult:outerObjectsRepeater:0:outer:form:content:form:view:ownerContainer:search:userOwner:"
178                 + "textField").getDefaultModelObjectAsString(), "[823074dc-d280-436d-a7dd-07399fae48ec] puccini");
179 
180         TESTER.clickLink(
181                 "body:content:body:container:content:tabbedPanel:panel:searchResult:outerObjectsRepeater:0:"
182                 + "outer:form:content:form:view:ownerContainer:search:userOwnerReset");
183 
184         assertEquals(TESTER.getComponentFromLastRenderedPage(
185                 "body:content:body:container:content:tabbedPanel:panel:"
186                 + "searchResult:outerObjectsRepeater:0:outer:form:content:form:view:ownerContainer:search:userOwner:"
187                 + "textField").getDefaultModelObjectAsString(), StringUtils.EMPTY);
188         // -------------------------
189 
190         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
191         assertNotNull(formTester);
192         formTester.submit("buttons:next");
193 
194         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
195         assertNotNull(formTester);
196         formTester.submit("buttons:next");
197 
198         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
199         assertNotNull(formTester);
200         formTester.submit("buttons:next");
201 
202         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
203         assertNotNull(formTester);
204         formTester.submit("buttons:next");
205 
206         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
207         assertNotNull(formTester);
208         formTester.submit("buttons:next");
209 
210         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
211         assertNotNull(formTester);
212         formTester.submit("buttons:next");
213 
214         formTester = TESTER.newFormTester(TAB_PANEL + "outerObjectsRepeater:0:outer:form:content:form");
215         assertNotNull(formTester);
216         formTester.submit("buttons:finish");
217 
218         assertSuccessMessage();
219         TESTER.cleanupFeedbackMessages();
220 
221         TESTER.assertComponent(TAB_PANEL
222                 + "outerObjectsRepeater:0:outer:form:content:customResultBody:resources:firstLevelContainer:first:"
223                 + "container:content:group:beans:0:fields:0:field", Label.class);
224 
225         TESTER.clickLink(TAB_PANEL
226                 + "outerObjectsRepeater:0:outer:form:content:action:actionRepeater:0:action:action");
227 
228         component = findComponentByProp("name", CONTAINER
229                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "director_clone");
230         assertNotNull(component);
231 
232         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
233         TESTER.getRequest().addParameter("confirm", "true");
234         TESTER.clickLink(TESTER.getComponentFromLastRenderedPage(TAB_PANEL
235                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
236                 + "actions:actions:actionRepeater:10:action:action"));
237 
238         TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(TAB_PANEL
239                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
240                 + "actions:actions:actionRepeater:10:action:action"), Constants.ON_CLICK);
241 
242         assertSuccessMessage();
243         TESTER.cleanupFeedbackMessages();
244     }
245 
246     @Test
247     public void checkDeleteGroupLink() {
248         TESTER.clickLink("body:realmsLI:realms", false);
249         TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:2:link");
250 
251         Component component = findComponentByProp("name", CONTAINER
252                 + ":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", "director");
253         assertNotNull(component);
254 
255         TESTER.executeAjaxEvent(component.getPageRelativePath(), Constants.ON_CLICK);
256         TESTER.assertComponent(TAB_PANEL
257                 + "outerObjectsRepeater:1:outer:container:content:togglePanelContainer:container:"
258                 + "actions:actions:actionRepeater:10:action:action", IndicatingOnConfirmAjaxLink.class);
259     }
260 }