Author: marrink
Date: Thu May  1 13:33:45 2008
New Revision: 652652

URL: http://svn.apache.org/viewvc?rev=652652&view=rev
Log:
RESOLVED - issue WICKET-1152: MetaDataRoleAuthorizationStrategy.unauthorize() 
doesn't work 
https://issues.apache.org/jira/browse/WICKET-1152

Added:
    
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
   (with props)
Modified:
    
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
    
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
    
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
    
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
    
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
    
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
    
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
 Thu May  1 13:33:45 2008
@@ -102,7 +102,9 @@
        }
 
        /**
-        * Remove the given authorized role from an action.
+        * Remove the given authorized role from an action. Note that this is 
only relevant if a role
+        * was previously authorized for that action. If no roles where 
previously authorized the effect
+        * of the unauthorize call is that no roles at all will be authorized 
for that action.
         * 
         * @param action
         *            The action
@@ -126,11 +128,16 @@
                {
                        roles.removeAll(rolesToRemove);
                }
+               else
+               {
+                       roles = new Roles();
+                       rolesForAction.put(action, roles);
+               }
 
                // If we removed the last authorized role, we authorize the 
empty role
                // so that removing authorization can't suddenly open something 
up to
                // everyone.
-               if (roles != null && roles.size() == 0)
+               if (roles.size() == 0)
                {
                        roles.add(MetaDataRoleAuthorizationStrategy.NO_ROLE);
                }

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
 Thu May  1 13:33:45 2008
@@ -105,7 +105,10 @@
        }
 
        /**
-        * Removes permission for the given role to instantiate the given class.
+        * Removes permission for the given role to instantiate the given 
class. Note that this is only
+        * relevant if a role was previously authorized for that class. If no 
roles where previously
+        * authorized the effect of the unauthorize call is that no roles at 
all will be authorized for
+        * that class.
         * 
         * @param componentClass
         *            The class
@@ -125,16 +128,21 @@
                        throw new IllegalArgumentException("Argument 
rolesToRemove cannot be null");
                }
 
-               final Roles roles = rolesForComponentClass.get(componentClass);
+               Roles roles = rolesForComponentClass.get(componentClass);
                if (roles != null)
                {
                        roles.removeAll(rolesToRemove);
                }
+               else
+               {
+                       roles = new Roles();
+                       rolesForComponentClass.put(componentClass, roles);
+               }
 
                // If we removed the last authorized role, we authorize the 
empty role
                // so that removing authorization can't suddenly open something 
up to
                // everyone.
-               if (roles != null && roles.size() == 0)
+               if (roles.size() == 0)
                {
                        roles.add(MetaDataRoleAuthorizationStrategy.NO_ROLE);
                }

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
 Thu May  1 13:33:45 2008
@@ -19,7 +19,10 @@
 import junit.framework.TestCase;
 
 import org.apache.wicket.authorization.Action;
+import org.apache.wicket.authorization.strategies.role.IRoleCheckingStrategy;
 import org.apache.wicket.authorization.strategies.role.Roles;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.tester.WicketTester;
 
 /**
  * Test case for [EMAIL PROTECTED] 
org.apache.wicket.authorization.strategies.role.metadata.ActionPermissions}.
@@ -67,7 +70,7 @@
        }
 
        /**
-        * Test adding roles.
+        * Test removing roles.
         * 
         * @throws Exception
         */
@@ -77,33 +80,62 @@
                Action mambo = new Action("mambo");
                assertEquals(null, permissions.rolesFor(mambo));
                permissions.unauthorize(mambo, new Roles("maurice"));
-               assertEquals(null, permissions.rolesFor(mambo));
+               assertEquals(new 
Roles(MetaDataRoleAuthorizationStrategy.NO_ROLE), permissions
+                               .rolesFor(mambo));
        }
 
        /**
         * Test for issue <a 
href="http://issues.apache.org/jira/browse/WICKET-1152";>WICKET-1152</a>.
-        * Temporarily disabled until we can decide what to do with it.
+        * 
+        */
+       public void testRemove2()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               Label label = new Label("label", "text");
+               Action mambo = new Action("mambo");
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               
label.setMetaData(MetaDataRoleAuthorizationStrategy.ACTION_PERMISSIONS,
+                               new ActionPermissions());
+               MetaDataRoleAuthorizationStrategy.unauthorize(label, mambo, 
"johan");
+               assertFalse(strategy.isActionAuthorized(label, mambo));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
+
+       /**
+        * Test consistency in behavior between authorizing a role for an 
action and then unauthorizing
+        * it with [EMAIL PROTECTED] #testRemove2()}.
         */
-// public void testRemove2()
-// {
-// WicketTester tester = new WicketTester();
-// tester.setupRequestAndResponse();
-// Label label = new Label("label", "text");
-// Action mambo = new Action("mambo");
-// MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
-// new IRoleCheckingStrategy()
-// {
-//
-// public boolean hasAnyRole(Roles roles)
-// {
-// return false;
-// }
-// });
-// label.setMetaData(MetaDataRoleAuthorizationStrategy.ACTION_PERMISSIONS,
-// new ActionPermissions());
-// MetaDataRoleAuthorizationStrategy.unauthorize(label, mambo, "johan");
-// assertFalse(strategy.isActionAuthorized(label, mambo));
-// tester.processRequestCycle();
-// tester.destroy();
-// }
+       public void testRemove3()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               Label label = new Label("label", "text");
+               Action mambo = new Action("mambo");
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               
label.setMetaData(MetaDataRoleAuthorizationStrategy.ACTION_PERMISSIONS,
+                               new ActionPermissions());
+               MetaDataRoleAuthorizationStrategy.authorize(label, mambo, 
"johan");
+               MetaDataRoleAuthorizationStrategy.unauthorize(label, mambo, 
"johan");
+               assertFalse(strategy.isActionAuthorized(label, mambo));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
 }

Modified: 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
 (original)
+++ 
wicket/branches/wicket-1.3.x/jdk-1.5/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
 Thu May  1 13:33:45 2008
@@ -19,7 +19,9 @@
 import junit.framework.TestCase;
 
 import org.apache.wicket.Page;
+import org.apache.wicket.authorization.strategies.role.IRoleCheckingStrategy;
 import org.apache.wicket.authorization.strategies.role.Roles;
+import org.apache.wicket.util.tester.WicketTester;
 
 /**
  * Test case for
@@ -67,7 +69,7 @@
        }
 
        /**
-        * Test adding roles.
+        * Test removing roles.
         * 
         * @throws Exception
         */
@@ -76,32 +78,60 @@
                InstantiationPermissions permissions = new 
InstantiationPermissions();
                assertEquals(null, 
permissions.getRolesForComponentClass().get(Page.class));
                permissions.unauthorize(Page.class, new Roles("eelco"));
-               assertEquals(null, 
permissions.getRolesForComponentClass().get(Page.class));
+               assertEquals(new 
Roles(MetaDataRoleAuthorizationStrategy.NO_ROLE), permissions
+                               .getRolesForComponentClass().get(Page.class));
        }
 
        /**
         * Test for issue <a 
href="http://issues.apache.org/jira/browse/WICKET-1152";>WICKET-1152</a>.
-        * Temporarily disabled until we can decide what to do with it.
+        * 
+        */
+       public void testRemove2()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               tester.getApplication().setMetaData(
+                               
MetaDataRoleAuthorizationStrategy.INSTANTIATION_PERMISSIONS,
+                               new InstantiationPermissions());
+               MetaDataRoleAuthorizationStrategy.unauthorize(Page.class, 
"martijn");
+               assertFalse(strategy.isInstantiationAuthorized(Page.class));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
+
+       /**
+        * Test consistency in behavior between authorizing a role for a class 
and then unauthorizing it
+        * with [EMAIL PROTECTED] #testRemove2()}.
         */
-// public void testRemove2()
-// {
-// WicketTester tester = new WicketTester();
-// tester.setupRequestAndResponse();
-// MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
-// new IRoleCheckingStrategy()
-// {
-//
-// public boolean hasAnyRole(Roles roles)
-// {
-// return false;
-// }
-// });
-// tester.getApplication().setMetaData(
-// MetaDataRoleAuthorizationStrategy.INSTANTIATION_PERMISSIONS,
-// new InstantiationPermissions());
-// MetaDataRoleAuthorizationStrategy.unauthorize(Page.class, "martijn");
-// assertFalse(strategy.isInstantiationAuthorized(Page.class));
-// tester.processRequestCycle();
-// tester.destroy();
-// }
+       public void testRemove3()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               tester.getApplication().setMetaData(
+                               
MetaDataRoleAuthorizationStrategy.INSTANTIATION_PERMISSIONS,
+                               new InstantiationPermissions());
+               MetaDataRoleAuthorizationStrategy.authorize(Page.class, 
"martijn");
+               MetaDataRoleAuthorizationStrategy.unauthorize(Page.class, 
"martijn");
+               assertFalse(strategy.isInstantiationAuthorized(Page.class));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
 }

Modified: 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
 (original)
+++ 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissions.java
 Thu May  1 13:33:45 2008
@@ -102,7 +102,9 @@
        }
 
        /**
-        * Remove the given authorized role from an action.
+        * Remove the given authorized role from an action. Note that this is 
only relevant if a role
+        * was previously authorized for that action. If no roles where 
previously authorized the effect
+        * of the unauthorize call is that no roles at all will be authorized 
for that action.
         * 
         * @param action
         *            The action
@@ -126,6 +128,11 @@
                {
                        roles.removeAll(rolesToRemove);
                }
+               else
+               {
+                       roles = new Roles();
+                       rolesForAction.put(action, roles);
+               }
 
                // If we removed the last authorized role, we authorize the 
empty role
                // so that removing authorization can't suddenly open something 
up to

Modified: 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
 (original)
+++ 
wicket/trunk/wicket-auth-roles/src/main/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissions.java
 Thu May  1 13:33:45 2008
@@ -71,7 +71,9 @@
        }
 
        /**
-        * Gives all roles permission to instantiate the given class.
+        * Gives all roles permission to instantiate the given class. Note that 
this is only relevant if
+        * a role was previously authorized for that class. If no roles where 
previously authorized the
+        * effect of the unauthorize call is that no roles at all will be 
authorized for that class.
         * 
         * @param componentClass
         *            The component class
@@ -125,11 +127,16 @@
                        throw new IllegalArgumentException("Argument 
rolesToRemove cannot be null");
                }
 
-               final Roles roles = rolesForComponentClass.get(componentClass);
+               Roles roles = rolesForComponentClass.get(componentClass);
                if (roles != null)
                {
                        roles.removeAll(rolesToRemove);
                }
+               else
+               {
+                       roles = new Roles();
+                       rolesForComponentClass.put(componentClass, roles);
+               }
 
                // If we removed the last authorized role, we authorize the 
empty role
                // so that removing authorization can't suddenly open something 
up to

Modified: 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java?rev=652652&r1=652651&r2=652652&view=diff
==============================================================================
--- 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
 (original)
+++ 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/ActionPermissionsTest.java
 Thu May  1 13:33:45 2008
@@ -19,7 +19,10 @@
 import junit.framework.TestCase;
 
 import org.apache.wicket.authorization.Action;
+import org.apache.wicket.authorization.strategies.role.IRoleCheckingStrategy;
 import org.apache.wicket.authorization.strategies.role.Roles;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.tester.WicketTester;
 
 /**
  * Test case for [EMAIL PROTECTED] 
org.apache.wicket.authorization.strategies.role.metadata.ActionPermissions}.
@@ -65,4 +68,74 @@
                permissions.authorizeAll(mambo);
                assertEquals(null, permissions.rolesFor(mambo));
        }
+
+       /**
+        * Test removing roles.
+        * 
+        * @throws Exception
+        */
+       public void testRemove1() throws Exception
+       {
+               ActionPermissions permissions = new ActionPermissions();
+               Action mambo = new Action("mambo");
+               assertEquals(null, permissions.rolesFor(mambo));
+               permissions.unauthorize(mambo, new Roles("maurice"));
+               assertEquals(new 
Roles(MetaDataRoleAuthorizationStrategy.NO_ROLE), permissions
+                               .rolesFor(mambo));
+       }
+
+       /**
+        * Test for issue <a 
href="http://issues.apache.org/jira/browse/WICKET-1152";>WICKET-1152</a>.
+        * 
+        */
+       public void testRemove2()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               Label label = new Label("label", "text");
+               Action mambo = new Action("mambo");
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               
label.setMetaData(MetaDataRoleAuthorizationStrategy.ACTION_PERMISSIONS,
+                               new ActionPermissions());
+               MetaDataRoleAuthorizationStrategy.unauthorize(label, mambo, 
"johan");
+               assertFalse(strategy.isActionAuthorized(label, mambo));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
+
+       /**
+        * Test consistency in behavior between authorizing a role for an 
action and then unauthorizing
+        * it with [EMAIL PROTECTED] #testRemove2()}.
+        */
+       public void testRemove3()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               Label label = new Label("label", "text");
+               Action mambo = new Action("mambo");
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               
label.setMetaData(MetaDataRoleAuthorizationStrategy.ACTION_PERMISSIONS,
+                               new ActionPermissions());
+               MetaDataRoleAuthorizationStrategy.authorize(label, mambo, 
"johan");
+               MetaDataRoleAuthorizationStrategy.unauthorize(label, mambo, 
"johan");
+               assertFalse(strategy.isActionAuthorized(label, mambo));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
 }

Added: 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java?rev=652652&view=auto
==============================================================================
--- 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
 (added)
+++ 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
 Thu May  1 13:33:45 2008
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.authorization.strategies.role.metadata;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.authorization.strategies.role.IRoleCheckingStrategy;
+import org.apache.wicket.authorization.strategies.role.Roles;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * Test case for
+ * [EMAIL PROTECTED] 
org.apache.wicket.authorization.strategies.role.metadata.InstantiationPermissions}.
+ * 
+ * @author Eelco Hillenius
+ */
+public class InstantiationPermissionsTest extends TestCase
+{
+       /**
+        * Construct.
+        */
+       public InstantiationPermissionsTest()
+       {
+               super();
+       }
+
+       /**
+        * Construct.
+        * 
+        * @param arg0
+        */
+       public InstantiationPermissionsTest(String arg0)
+       {
+               super(arg0);
+       }
+
+       /**
+        * Test adding roles.
+        * 
+        * @throws Exception
+        */
+       public void testAdd1() throws Exception
+       {
+               InstantiationPermissions permissions = new 
InstantiationPermissions();
+               permissions.authorize(Page.class, new Roles("jonathan"));
+               permissions.authorize(Page.class, new Roles("johan"));
+               permissions.authorize(Page.class, new Roles("maurice"));
+               permissions.authorize(Page.class, new Roles("eelco"));
+               assertEquals(4, 
permissions.getRolesForComponentClass().get(Page.class).size());
+               permissions.unauthorize(Page.class, new Roles("maurice"));
+               assertEquals(3, 
permissions.getRolesForComponentClass().get(Page.class).size());
+               permissions.authorizeAll(Page.class);
+               assertEquals(null, 
permissions.getRolesForComponentClass().get(Page.class));
+       }
+
+       /**
+        * Test removing roles.
+        * 
+        * @throws Exception
+        */
+       public void testRemove1() throws Exception
+       {
+               InstantiationPermissions permissions = new 
InstantiationPermissions();
+               assertEquals(null, 
permissions.getRolesForComponentClass().get(Page.class));
+               permissions.unauthorize(Page.class, new Roles("eelco"));
+               assertEquals(new 
Roles(MetaDataRoleAuthorizationStrategy.NO_ROLE), permissions
+                               .getRolesForComponentClass().get(Page.class));
+       }
+
+       /**
+        * Test for issue <a 
href="http://issues.apache.org/jira/browse/WICKET-1152";>WICKET-1152</a>.
+        * 
+        */
+       public void testRemove2()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               tester.getApplication().setMetaData(
+                               
MetaDataRoleAuthorizationStrategy.INSTANTIATION_PERMISSIONS,
+                               new InstantiationPermissions());
+               MetaDataRoleAuthorizationStrategy.unauthorize(Page.class, 
"martijn");
+               assertFalse(strategy.isInstantiationAuthorized(Page.class));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
+
+       /**
+        * Test consistency in behavior between authorizing a role for a class 
and then unauthorizing it
+        * with [EMAIL PROTECTED] #testRemove2()}.
+        */
+       public void testRemove3()
+       {
+               WicketTester tester = new WicketTester();
+               tester.setupRequestAndResponse();
+               MetaDataRoleAuthorizationStrategy strategy = new 
MetaDataRoleAuthorizationStrategy(
+                               new IRoleCheckingStrategy()
+                               {
+
+                                       public boolean hasAnyRole(Roles roles)
+                                       {
+                                               return false;
+                                       }
+                               });
+               tester.getApplication().setMetaData(
+                               
MetaDataRoleAuthorizationStrategy.INSTANTIATION_PERMISSIONS,
+                               new InstantiationPermissions());
+               MetaDataRoleAuthorizationStrategy.authorize(Page.class, 
"martijn");
+               MetaDataRoleAuthorizationStrategy.unauthorize(Page.class, 
"martijn");
+               assertFalse(strategy.isInstantiationAuthorized(Page.class));
+               tester.processRequestCycle();
+               tester.destroy();
+       }
+}

Propchange: 
wicket/trunk/wicket-auth-roles/src/test/java/org/apache/wicket/authorization/strategies/role/metadata/InstantiationPermissionsTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to