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.assertNotNull;
22  import static org.junit.jupiter.api.Assertions.assertNull;
23  
24  import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
25  import org.apache.syncope.client.console.pages.Types;
26  import org.apache.syncope.client.console.panels.AjaxDataTablePanel;
27  import org.apache.syncope.client.ui.commons.Constants;
28  import org.apache.wicket.Component;
29  import org.apache.wicket.markup.html.form.DropDownChoice;
30  import org.apache.wicket.util.tester.FormTester;
31  import org.junit.jupiter.api.Test;
32  
33  public class SchemasITCase extends AbstractTypesITCase {
34  
35      @Test
36      public void readPlainSchema() {
37          browsingToPlainSchemas();
38          TESTER.assertLabel(
39                  PLAIN_DATATABLE_PATH
40                  + ":tablePanel:groupForm:"
41                  + "checkgroup:dataTable:body:rows:1:cells:1:cell", "aLong");
42  
43          TESTER.executeAjaxEvent(
44                  PLAIN_DATATABLE_PATH + ":tablePanel:groupForm:checkgroup:dataTable:body:rows:1",
45                  Constants.ON_CLICK);
46  
47          TESTER.clickLink(
48                  "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:1:outer:"
49                  + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:0:action:action");
50  
51          TESTER.assertComponent(
52                  "body:content:tabbedPanel:"
53                  + "panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:"
54                  + "form:content:form:view:kind:dropDownChoiceField", DropDownChoice.class);
55      }
56  
57      @Test
58      public void createPlainSchema() {
59          browsingToPlainSchemas();
60          TESTER.clickLink(
61                  "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:container:content:add");
62  
63          TESTER.assertComponent(
64                  "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer",
65                  Modal.class);
66  
67          FormTester formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
68                  + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
69          formTester.setValue("content:form:view:details:key:textField", "zBoolean");
70          formTester.setValue("content:form:view:details:type:dropDownChoiceField", "3");
71          TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:accordionPanel:tabs:0:"
72                  + "body:content:outerObjectsRepeater:0:outer:form:content:form:buttons:next", Constants.ON_CLICK);
73  
74          formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
75                  + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
76          formTester.submit("content:form:buttons:finish");
77  
78          assertSuccessMessage();
79  
80          TESTER.cleanupFeedbackMessages();
81          TESTER.assertRenderedPage(Types.class);
82      }
83  
84      @Test
85      public void updatePlainSchema() {
86          browsingToPlainSchemas();
87  
88          Component result = findComponentByProp(KEY, PLAIN_DATATABLE_PATH, "ctype");
89  
90          TESTER.assertLabel(result.getPageRelativePath() + ":cells:1:cell", "ctype");
91          assertNotNull(result);
92  
93          TESTER.executeAjaxEvent(result.getPageRelativePath(), Constants.ON_CLICK);
94          TESTER.clickLink(
95                  "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:1:outer:"
96                  + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:0:action:action");
97  
98          TESTER.assertComponent(
99                  "body:content:tabbedPanel:"
100                 + "panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:"
101                 + "form:content:form:view:kind:dropDownChoiceField", DropDownChoice.class);
102 
103         FormTester formTester = TESTER.newFormTester(
104                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
105         formTester.setValue("content:form:view:details:multivalue:checkboxField", "true");
106 
107         TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:accordionPanel:tabs:0:"
108                 + "body:content:outerObjectsRepeater:0:outer:form:content:form:buttons:next", Constants.ON_CLICK);
109 
110         formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
111                 + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
112         formTester.submit("content:form:buttons:finish");
113 
114         assertSuccessMessage();
115     }
116 
117     @Test
118     public void deletePlainSchema() {
119         browsingToPlainSchemas();
120         //create new Plain Schema
121         final String schemaName = "zStringDelete";
122         TESTER.clickLink(
123                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:container:content:add");
124 
125         TESTER.assertComponent(
126                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer",
127                 Modal.class);
128 
129         FormTester formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
130                 + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
131         formTester.setValue("content:form:view:details:key:textField", schemaName);
132         formTester.setValue("content:form:view:details:type:dropDownChoiceField", "0");
133         TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:accordionPanel:tabs:0:"
134                 + "body:content:outerObjectsRepeater:0:outer:form:content:form:buttons:next", Constants.ON_CLICK);
135 
136         formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
137                 + "accordionPanel:tabs:0:body:content:outerObjectsRepeater:0:outer:form");
138         formTester.submit("content:form:buttons:finish");
139 
140         assertSuccessMessage();
141 
142         TESTER.cleanupFeedbackMessages();
143 
144         //delete plain schema
145         TESTER.clickLink(
146                 PLAIN_DATATABLE_PATH
147                 + ":tablePanel:groupForm:checkgroup:dataTable:bottomToolbars:toolbars:3:span:navigator:last");
148 
149         TESTER.assertComponent(PLAIN_DATATABLE_PATH, AjaxDataTablePanel.class);
150 
151         Component result = findComponentByProp(KEY, PLAIN_DATATABLE_PATH, schemaName);
152         assertNotNull(result);
153 
154         TESTER.executeAjaxEvent(result.getPageRelativePath(), Constants.ON_CLICK);
155 
156         TESTER.getRequest().addParameter("confirm", "true");
157         TESTER.clickLink(
158                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:1:outer:"
159                 + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:action:action");
160 
161         TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(
162                 "body:content:tabbedPanel:panel:accordionPanel:tabs:0:body:content:outerObjectsRepeater:1:outer:"
163                 + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:action:action"),
164                 Constants.ON_CLICK);
165 
166         assertSuccessMessage();
167         TESTER.cleanupFeedbackMessages();
168 
169         assertNull(findComponentByProp(KEY, PLAIN_DATATABLE_PATH, schemaName));
170     }
171 
172     @Test
173     public void createVirtualSchema() {
174         browsingToVirtualSchemas();
175         TESTER.clickLink(
176                 "body:content:tabbedPanel:panel:accordionPanel:tabs:2:body:content:container:content:add");
177 
178         TESTER.assertComponent(
179                 "body:content:tabbedPanel:panel:accordionPanel:tabs:2:body:content:outerObjectsRepeater:0:outer",
180                 Modal.class);
181 
182         FormTester formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
183                 + "accordionPanel:tabs:2:body:content:outerObjectsRepeater:0:outer:form");
184 
185         formTester.setValue("content:form:view:details:resource:dropDownChoiceField", "0");
186         TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:"
187                 + "accordionPanel:tabs:2:body:content:outerObjectsRepeater:0:outer:form:"
188                 + "content:form:view:details:resource:dropDownChoiceField", Constants.ON_CHANGE);
189 
190         formTester.setValue("content:form:view:details:key:textField", "mynewvir");
191         formTester.setValue("content:form:view:details:resource:dropDownChoiceField", "0");
192         formTester.setValue("content:form:view:details:anyType:dropDownChoiceField", "0");
193         formTester.setValue("content:form:view:details:extAttrName:textField", "virattr");
194 
195         TESTER.executeAjaxEvent("body:content:tabbedPanel:panel:accordionPanel:tabs:2:"
196                 + "body:content:outerObjectsRepeater:0:outer:form:content:form:buttons:next", Constants.ON_CLICK);
197 
198         formTester = TESTER.newFormTester("body:content:tabbedPanel:panel:"
199                 + "accordionPanel:tabs:2:body:content:outerObjectsRepeater:0:outer:form");
200         formTester.submit("content:form:buttons:finish");
201 
202         assertSuccessMessage();
203         TESTER.cleanupFeedbackMessages();
204         TESTER.assertRenderedPage(Types.class);
205 
206         Component result = findComponentByProp(KEY, VIRTUAL_DATATABLE_PATH, "mynewvir");
207         TESTER.executeAjaxEvent(result.getPageRelativePath(), Constants.ON_CLICK);
208 
209         TESTER.getRequest().addParameter("confirm", "true");
210         TESTER.clickLink(
211                 "body:content:tabbedPanel:panel:accordionPanel:tabs:2:body:content:outerObjectsRepeater:1:outer:"
212                 + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:action:action");
213 
214         TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(
215                 "body:content:tabbedPanel:panel:accordionPanel:tabs:2:body:content:outerObjectsRepeater:1:outer:"
216                 + "container:content:togglePanelContainer:container:actions:actions:actionRepeater:1:action:action"),
217                 Constants.ON_CLICK);
218 
219         assertSuccessMessage();
220         TESTER.cleanupFeedbackMessages();
221 
222         assertNull(findComponentByProp(KEY, VIRTUAL_DATATABLE_PATH, "mynewvir"));
223     }
224 }