[SYNCOPE-1030] fix + integration test

Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/d0dc9b35
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/d0dc9b35
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/d0dc9b35

Branch: refs/heads/master
Commit: d0dc9b35f8e901c692c6df8b3016fd2384d94d62
Parents: b193aec
Author: fmartelli <fabio.marte...@gmail.com>
Authored: Mon Feb 27 15:18:15 2017 +0100
Committer: fmartelli <fabio.marte...@gmail.com>
Committed: Mon Feb 27 15:19:05 2017 +0100

----------------------------------------------------------------------
 .../client/console/panels/BeanPanel.java        |   4 -
 .../syncope/client/console/panels/Realm.java    |   2 +-
 .../client/console/panels/RealmDetails.java     |   6 +-
 .../client/console/rest/PolicyRestClient.java   |  15 ++
 .../syncope/fit/console/PoliciesITCase.java     | 136 +++++++++++++++++--
 .../apache/syncope/fit/console/UsersITCase.java |   5 +-
 6 files changed, 148 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
index ee4303f..c09fb43 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/BeanPanel.java
@@ -227,10 +227,6 @@ public class BeanPanel<T extends Serializable> extends 
Panel {
                                 new 
PropertyModel<List<String>>(bean.getObject(), fieldName),
                                 new 
ListModel(Arrays.asList(listItemType.getEnumConstants()))).hideLabel();
                     } else {
-                        if (((List) 
wrapper.getPropertyValue(fieldName)).isEmpty()) {
-                            ((List) 
wrapper.getPropertyValue(fieldName)).add(null);
-                        }
-
                         panel = new MultiFieldPanel.Builder<>(
                                 new 
PropertyModel<List<String>>(bean.getObject(), fieldName)).build(
                                 "value",

http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index d210aa7..7837f12 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -220,7 +220,7 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> 
{
                                     
afterObj.getAttrMap().get(ConnIdSpecialAttributeName.NAME).getValues())
                             ? StringUtils.EMPTY
                             : 
afterObj.getAttrMap().get(ConnIdSpecialAttributeName.NAME).getValues().
-                                    iterator().next();
+                            iterator().next();
 
                     return new Label("field", remoteId);
                 } else if ("status".equalsIgnoreCase(key)) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
index 3d646df..603e49b 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmDetails.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.commons.collections4.CollectionUtils;
@@ -64,7 +64,7 @@ public class RealmDetails extends Panel {
 
         @Override
         protected Map<String, String> load() {
-            Map<String, String> res = new HashMap<>();
+            Map<String, String> res = new LinkedHashMap<>();
             for (AbstractPolicyTO policyTO : 
policyRestClient.getPolicies(PolicyType.ACCOUNT)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }
@@ -78,7 +78,7 @@ public class RealmDetails extends Panel {
 
         @Override
         protected Map<String, String> load() {
-            Map<String, String> res = new HashMap<>();
+            Map<String, String> res = new LinkedHashMap<>();
             for (AbstractPolicyTO policyTO : 
policyRestClient.getPolicies(PolicyType.PASSWORD)) {
                 res.put(policyTO.getKey(), policyTO.getDescription());
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
----------------------------------------------------------------------
diff --git 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
index 3bfaef6..759600e 100644
--- 
a/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
+++ 
b/client/console/src/main/java/org/apache/syncope/client/console/rest/PolicyRestClient.java
@@ -18,7 +18,10 @@
  */
 package org.apache.syncope.client.console.rest;
 
+import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 import org.apache.syncope.common.lib.policy.AbstractPolicyTO;
 import org.apache.syncope.common.lib.types.PolicyType;
@@ -47,6 +50,7 @@ public class PolicyRestClient extends BaseRestClient {
 
         try {
             res.addAll((List<T>) getService(PolicyService.class).list(type));
+            Collections.sort(res, new PolicyComparator());
         } catch (Exception ignore) {
             LOG.debug("No policy found", ignore);
         }
@@ -65,4 +69,15 @@ public class PolicyRestClient extends BaseRestClient {
     public void delete(final String key) {
         getService(PolicyService.class).delete(key);
     }
+
+    private class PolicyComparator implements Comparator<AbstractPolicyTO>, 
Serializable {
+
+        private static final long serialVersionUID = -4921433085213223115L;
+
+        @Override
+        public int compare(final AbstractPolicyTO left, final AbstractPolicyTO 
right) {
+            return left == null ? -1 : right == null ? 1 : 
left.getDescription().compareTo(right.getDescription());
+        }
+
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
index 5916ce0..67ed20b 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/PoliciesITCase.java
@@ -18,12 +18,18 @@
  */
 package org.apache.syncope.fit.console;
 
+import static org.apache.syncope.fit.console.AbstractConsoleITCase.TESTER;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
 import de.agilecoders.wicket.core.markup.html.bootstrap.dialog.Modal;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.pages.Policies;
+import org.apache.syncope.client.console.pages.Realms;
 import org.apache.syncope.common.lib.types.ConflictResolutionAction;
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.util.tester.FormTester;
 import org.junit.Assert;
 import org.junit.Before;
@@ -84,8 +90,9 @@ public class PoliciesITCase extends AbstractConsoleITCase {
                 
"body:content:tabbedPanel:panel:outerObjectsRepeater:0:outer:dialog:footer:buttons:0:button",
                 Constants.ON_CLICK);
 
-        Assert.assertNotNull(findComponentByProp("description", 
"body:content:tabbedPanel:panel:container:content:"
-                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
description));
+        component = findComponentByProp("description", 
"body:content:tabbedPanel:panel:container:content:"
+                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
description);
+        Assert.assertNotNull(component);
     }
 
     private void createPasswordPolicy(final String description) {
@@ -423,13 +430,10 @@ public class PoliciesITCase extends AbstractConsoleITCase 
{
         deleteAccountPolicy(description);
     }
 
-    @Test
-    public void createComposeDeleteAccountPolicy() {
-        final String description = "Account Policy To Be Composed";
-        createAccountPolicy(description);
+    private void composeDefaultAccountPolicy(final String policyDescription, 
final String ruleName) {
 
         Component component = findComponentByProp("description", 
"body:content:tabbedPanel:panel:container:content:"
-                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
description);
+                + 
"searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
policyDescription);
 
         Assert.assertNotNull(component);
         TESTER.clickLink(component.getPageRelativePath() + 
":cells:9:cell:panelCompose:composeLink");
@@ -443,7 +447,7 @@ public class PoliciesITCase extends AbstractConsoleITCase {
 
         FormTester formTester = 
TESTER.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:3:"
                 + "outer:form:content:container:content:wizard:form");
-        formTester.setValue("view:name:textField", "myrule");
+        formTester.setValue("view:name:textField", ruleName);
         formTester.setValue("view:configuration:dropDownChoiceField", "0");
         formTester.submit("buttons:next");
 
@@ -452,6 +456,7 @@ public class PoliciesITCase extends AbstractConsoleITCase {
 
         formTester = 
TESTER.newFormTester("body:content:tabbedPanel:panel:outerObjectsRepeater:3:"
                 + "outer:form:content:container:content:wizard:form");
+        formTester.setValue("view:bean:propView:1:value:spinner", "6");
         formTester.submit("buttons:finish");
 
         TESTER.assertInfoMessages("Operation executed successfully");
@@ -459,7 +464,7 @@ public class PoliciesITCase extends AbstractConsoleITCase {
 
         component = findComponentByProp("name", 
"body:content:tabbedPanel:panel:outerObjectsRepeater:3:outer:form:"
                 + 
"content:container:content:searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable",
-                "myrule");
+                ruleName);
 
         Assert.assertNotNull(component);
 
@@ -467,7 +472,13 @@ public class PoliciesITCase extends AbstractConsoleITCase {
                 
"body:content:tabbedPanel:panel:outerObjectsRepeater:3:outer:form:content:container:content:exit");
 
         closeCallBack(modal);
+    }
 
+    @Test
+    public void createComposeDeleteAccountPolicy() {
+        final String description = "Account Policy To Be Composed";
+        createAccountPolicy(description);
+        composeDefaultAccountPolicy(description, "myrule");
         deleteAccountPolicy(description);
     }
 
@@ -663,4 +674,111 @@ public class PoliciesITCase extends AbstractConsoleITCase 
{
 
         deletePullPolicy(description);
     }
+
+    @Test
+    public void issueSYNCOPE1030() {
+        final String description = "SYNCOPE-1030";
+        // Create account policy
+        createAccountPolicy(description);
+        composeDefaultAccountPolicy(description, "issue");
+
+        // goto realms
+        TESTER.clickLink("body:realmsLI:realms");
+        TESTER.assertRenderedPage(Realms.class);
+
+        // edit root realm
+        TESTER.clickLink(
+                
"body:content:body:container:content:tabbedPanel:panel:actions:actions:panelEdit:editLink");
+        
TESTER.assertComponent("body:content:body:outerObjectsRepeater:0:outer", 
Modal.class);
+
+        // set new account policy
+        
TESTER.assertLabel("body:content:body:outerObjectsRepeater:0:outer:form:content:form:view:details:container:"
+                + "accountPolicy:field-label", "Account Policy");
+
+        FormTester formTester = TESTER.newFormTester(
+                
"body:content:body:outerObjectsRepeater:0:outer:form:content:form");
+        
formTester.select("view:details:container:accountPolicy:dropDownChoiceField", 
0);
+        formTester.submit("buttons:finish");
+
+        TESTER.assertInfoMessages("Operation executed successfully");
+        TESTER.cleanupFeedbackMessages();
+
+        TESTER.executeAjaxEvent(
+                
"body:content:body:outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink",
+                Constants.ON_CLICK);
+
+        // create user with a valid account name
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:tabs-container:tabs:1:link");
+
+        Component component = findComponentByProp("username",
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:container:content:"
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini");
+        assertNotNull(component);
+
+        TESTER.clickLink(component.getPageRelativePath() + 
":cells:6:cell:panelClone:cloneLink");
+
+        TESTER.assertComponent(
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + 
"outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
+                TextField.class);
+
+        formTester = TESTER.newFormTester(
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + "outerObjectsRepeater:0:outer:form:content:form");
+        assertNotNull(formTester);
+        formTester.submit("buttons:next");
+
+        formTester = TESTER.newFormTester(
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + "outerObjectsRepeater:0:outer:form:content:form");
+        assertNotNull(formTester);
+        formTester.submit("buttons:next");
+
+        formTester = TESTER.newFormTester(
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + "outerObjectsRepeater:0:outer:form:content:form");
+        assertNotNull(formTester);
+        formTester.submit("buttons:next");
+
+        formTester = TESTER.newFormTester(
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + "outerObjectsRepeater:0:outer:form:content:form");
+        assertNotNull(formTester);
+
+        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:6:panel:textField",
 "rossini 1030");
+        
formTester.setValue("view:plainSchemas:tabs:0:body:content:schemas:14:panel:textField",
 "ross1...@apace.org");
+        formTester.submit("buttons:finish");
+
+        TESTER.assertInfoMessages("Operation executed successfully");
+        TESTER.cleanupFeedbackMessages();
+
+        
TESTER.clickLink("body:content:body:container:content:tabbedPanel:panel:searchResult:"
+                + 
"outerObjectsRepeater:0:outer:form:content:action:panelClose:closeLink");
+
+        component = findComponentByProp("username",
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:container:content:"
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini_clone");
+        assertNotNull(component);
+
+        // delete the new user
+        TESTER.getRequest().addParameter("confirm", "true");
+        TESTER.clickLink(TESTER.getComponentFromLastRenderedPage(
+                component.getPageRelativePath() + 
":cells:6:cell:panelDelete:deleteLink"));
+
+        TESTER.executeAjaxEvent(TESTER.getComponentFromLastRenderedPage(
+                component.getPageRelativePath() + 
":cells:6:cell:panelDelete:deleteLink"), "onclick");
+
+        TESTER.assertInfoMessages("Operation executed successfully");
+        TESTER.cleanupFeedbackMessages();
+
+        component = findComponentByProp("username",
+                
"body:content:body:container:content:tabbedPanel:panel:searchResult:container:content:"
+                + 
":searchContainer:resultTable:tablePanel:groupForm:checkgroup:dataTable", 
"rossini_clone");
+        assertNull(component);
+
+        // delete default policy
+        
TESTER.clickLink("body:configurationLI:configurationUL:policiesLI:policies");
+        TESTER.assertRenderedPage(Policies.class);
+        deleteAccountPolicy(description);
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/d0dc9b35/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
index 9d0f8e5..2631395 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/console/UsersITCase.java
@@ -86,9 +86,8 @@ public class UsersITCase extends AbstractConsoleITCase {
 
         TESTER.clickLink(component.getPageRelativePath() + 
":cells:6:cell:panelClone:cloneLink");
 
-        TESTER.
-                assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
-                        TextField.class);
+        TESTER.assertComponent(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:form:view:username:textField",
+                TextField.class);
 
         FormTester formTester = TESTER.newFormTester(TAB_PANEL + 
"outerObjectsRepeater:0:outer:form:content:form");
         assertNotNull(formTester);

Reply via email to