actinium15 commented on a change in pull request #40:
URL: 
https://github.com/apache/sling-org-apache-sling-distribution-core/pull/40#discussion_r413450284



##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")

Review comment:
       ```suggestion
       @Property(cardinality = 100, label = "Additional Jcr Privileges for 
Add", description = "Additional Jcr privileges to check for authorizing ADD 
distribution requests. The privilege is checked for the calling user session.")
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";

Review comment:
       ```suggestion
       private static final String JCR_ADD_PRIVILEGES = 
"additionalJcrPrivilegesForAdd";
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";
+
+    /**
+     * privilege DELETE request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Delete", description = 
"Additional Jcr privileges to check for authorizing DELETE distribution 
requests. The privilege is checked for the calling user session.")

Review comment:
       ```suggestion
       @Property(cardinality = 100, label = "Additional Jcr Privileges for 
Delete", description = "Additional Jcr privileges to check for authorizing 
DELETE distribution requests. The privilege is checked for the calling user 
session.")
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";
+
+    /**
+     * privilege DELETE request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Delete", description = 
"Additional Jcr privileges to check for authorizing DELETE distribution 
requests. The privilege is checked for the calling user session.")
+    private static final String JCR_DELETE_PRIVILEGE = 
"additionalJcrPrivilegesForDelete";

Review comment:
       ```suggestion
       private static final String JCR_DELETE_PRIVILEGES = 
"additionalJcrPrivilegesForDelete";
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";
+
+    /**
+     * privilege DELETE request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Delete", description = 
"Additional Jcr privileges to check for authorizing DELETE distribution 
requests. The privilege is checked for the calling user session.")
+    private static final String JCR_DELETE_PRIVILEGE = 
"additionalJcrPrivilegesForDelete";
 
     private DistributionRequestAuthorizationStrategy authorizationStrategy;
 
     @Activate
     public void activate(BundleContext context, Map<String, Object> config) {
         String jcrPrivilege = 
PropertiesUtil.toString(config.get(JCR_PRIVILEGE), null);
-        authorizationStrategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        String[] jcrAddPrivilege = 
PropertiesUtil.toStringArray(config.get(JCR_ADD_PRIVILEGE), null);
+        String[] jcrDeletePrivilege = 
PropertiesUtil.toStringArray(config.get(JCR_DELETE_PRIVILEGE), null);
+        authorizationStrategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
jcrAddPrivilege, jcrDeletePrivilege);

Review comment:
       ```suggestion
           authorizationStrategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
jcrAddPrivileges, jcrDeletePrivileges);
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";
+
+    /**
+     * privilege DELETE request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Delete", description = 
"Additional Jcr privileges to check for authorizing DELETE distribution 
requests. The privilege is checked for the calling user session.")
+    private static final String JCR_DELETE_PRIVILEGE = 
"additionalJcrPrivilegesForDelete";
 
     private DistributionRequestAuthorizationStrategy authorizationStrategy;
 
     @Activate
     public void activate(BundleContext context, Map<String, Object> config) {
         String jcrPrivilege = 
PropertiesUtil.toString(config.get(JCR_PRIVILEGE), null);
-        authorizationStrategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        String[] jcrAddPrivilege = 
PropertiesUtil.toStringArray(config.get(JCR_ADD_PRIVILEGE), null);
+        String[] jcrDeletePrivilege = 
PropertiesUtil.toStringArray(config.get(JCR_DELETE_PRIVILEGE), null);

Review comment:
       ```suggestion
           String[] jcrDeletePrivileges = 
PropertiesUtil.toStringArray(config.get(JCR_DELETE_PRIVILEGES), null);
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyFactory.java
##########
@@ -59,13 +59,26 @@
     @Property(label = "Jcr Privilege", description = "Jcr privilege to check 
for authorizing distribution requests. The privilege is checked for the calling 
user session.")
     private static final String JCR_PRIVILEGE = "jcrPrivilege";
 
+    /**
+     * privilege ADD request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Add", description = 
"Additional Jcr privileges to check for authorizing ADD distribution requests. 
The privilege is checked for the calling user session.")
+    private static final String JCR_ADD_PRIVILEGE = 
"additionalJcrPrivilegesForAdd";
+
+    /**
+     * privilege DELETE request authorization strategy jcr privilege property
+     */
+    @Property(cardinality = 100, label = "Jcr Privilege Delete", description = 
"Additional Jcr privileges to check for authorizing DELETE distribution 
requests. The privilege is checked for the calling user session.")
+    private static final String JCR_DELETE_PRIVILEGE = 
"additionalJcrPrivilegesForDelete";
 
     private DistributionRequestAuthorizationStrategy authorizationStrategy;
 
     @Activate
     public void activate(BundleContext context, Map<String, Object> config) {
         String jcrPrivilege = 
PropertiesUtil.toString(config.get(JCR_PRIVILEGE), null);
-        authorizationStrategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        String[] jcrAddPrivilege = 
PropertiesUtil.toStringArray(config.get(JCR_ADD_PRIVILEGE), null);

Review comment:
       ```suggestion
           String[] jcrAddPrivileges = 
PropertiesUtil.toStringArray(config.get(JCR_ADD_PRIVILEGES), null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -58,8 +60,7 @@ public void testCheckPermissionWithSession() throws Exception 
{
 
     @Test(expected = DistributionException.class)
     public void testNoPermissionOnAdd() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -132,22 +158,49 @@ public void testNoPermissionOnDelete() throws Exception {
 
     @Test
     public void testPermissionOnDelete() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);
         DistributionRequest distributionRequest = 
mock(DistributionRequest.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
         AccessControlManager acm = mock(AccessControlManager.class);
         Privilege privilege = mock(Privilege.class);
         when(acm.privilegeFromName(jcrPrivilege)).thenReturn(privilege);
-        Privilege jcrReadPrivilege = mock(Privilege.class);
-        
when(acm.privilegeFromName(Privilege.JCR_REMOVE_NODE)).thenReturn(jcrReadPrivilege);
+        Privilege jcrDeletePrivilege = mock(Privilege.class);
+        
when(acm.privilegeFromName(Privilege.JCR_REMOVE_NODE)).thenReturn(jcrDeletePrivilege);
+
+        when(session.getAccessControlManager()).thenReturn(acm);
+        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
+        String[] paths = new String[]{"/foo"};
+        for (String path : paths) {
+            when(acm.hasPrivileges(path, new Privilege[]{jcrDeletePrivilege, 
privilege})).thenReturn(true);
+            when(session.nodeExists(path)).thenReturn(true);
+        }
+        when(distributionRequest.getPaths()).thenReturn(paths);
+
+        
when(distributionRequest.getRequestType()).thenReturn(DistributionRequestType.DELETE);
+        strategy.checkPermission(resourceResolver, distributionRequest);
+    }
+    
+    @Test
+    public void testAdditionalPermissionsOnDelete() throws Exception {
+        additionalJcrPrivilegesForDelete = new String[] {"deletePermission"};

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           additionalJcrPrivilegesForDelete = new String[] {"deletePermission"};
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -97,7 +97,34 @@ public void testPermissionOnAdd() throws Exception {
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
         String[] paths = new String[]{"/foo"};
         for (String path : paths) {
-            when(acm.hasPrivileges(path, new Privilege[]{privilege, 
jcrReadPrivilege})).thenReturn(true);
+            when(acm.hasPrivileges(path, new Privilege[]{jcrReadPrivilege, 
privilege})).thenReturn(true);
+        }
+        when(distributionRequest.getPaths()).thenReturn(paths);
+
+        
when(distributionRequest.getRequestType()).thenReturn(DistributionRequestType.ADD);
+        strategy.checkPermission(resourceResolver, distributionRequest);
+    }
+    
+    @Test
+    public void testAdditionalPermissionsOnAdd() throws Exception {
+        additionalJcrPrivilegesForAdd = new String[] {"addPermission"};

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           additionalJcrPrivilegesForAdd = new String[] {"addPermission"};
   ```

##########
File path: 
src/main/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategy.java
##########
@@ -105,5 +113,14 @@ private String getClosestParent(Session session, String 
path) throws RepositoryE
         return null;
     }
 
+    private Privilege[] computePrivileges(AccessControlManager acMgr, String[] 
jcrPrivileges)

Review comment:
       this method should be made `static` and `jcrPrivilege` should be 
supplied to it as its 2nd argument.

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -36,19 +36,21 @@
  */
 public class PrivilegeDistributionRequestAuthorizationStrategyTest {
 
+    String jcrPrivilege = "foo";
+    String[] additionalJcrPrivilegesForAdd;
+    String[] additionalJcrPrivilegesForDelete;
+
     @Test(expected = DistributionException.class)
     public void testCheckPermissionWithoutSession() throws Exception {
-        String jcrPrivilege = "foo";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);
         DistributionRequest distributionRequest = 
mock(DistributionRequest.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         strategy.checkPermission(resourceResolver, distributionRequest);
     }
 
     @Test
     public void testCheckPermissionWithSession() throws Exception {
-        String jcrPrivilege = "foo";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "foo";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -97,7 +97,34 @@ public void testPermissionOnAdd() throws Exception {
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
         String[] paths = new String[]{"/foo"};
         for (String path : paths) {
-            when(acm.hasPrivileges(path, new Privilege[]{privilege, 
jcrReadPrivilege})).thenReturn(true);
+            when(acm.hasPrivileges(path, new Privilege[]{jcrReadPrivilege, 
privilege})).thenReturn(true);

Review comment:
       Unchanged test-setup and asserts are crucial in clarifying that the 
changes are backwards compatible.
   Though I _know_ that's not an issue here, still, rather than changing the 
test, please swap the order in which the privileges are added in 
`PrivilegeDistributionRequestAuthorizationStrategy.computePrivileges` itself 
and revert the changes here.

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -107,8 +134,7 @@ public void testPermissionOnAdd() throws Exception {
 
     @Test(expected = DistributionException.class)
     public void testNoPermissionOnDelete() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -97,7 +97,34 @@ public void testPermissionOnAdd() throws Exception {
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
         String[] paths = new String[]{"/foo"};
         for (String path : paths) {
-            when(acm.hasPrivileges(path, new Privilege[]{privilege, 
jcrReadPrivilege})).thenReturn(true);
+            when(acm.hasPrivileges(path, new Privilege[]{jcrReadPrivilege, 
privilege})).thenReturn(true);
+        }
+        when(distributionRequest.getPaths()).thenReturn(paths);
+
+        
when(distributionRequest.getRequestType()).thenReturn(DistributionRequestType.ADD);
+        strategy.checkPermission(resourceResolver, distributionRequest);
+    }
+    
+    @Test
+    public void testAdditionalPermissionsOnAdd() throws Exception {
+        additionalJcrPrivilegesForAdd = new String[] {"addPermission"};
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);
+        DistributionRequest distributionRequest = 
mock(DistributionRequest.class);
+        ResourceResolver resourceResolver = mock(ResourceResolver.class);
+        Session session = mock(Session.class);
+        AccessControlManager acm = mock(AccessControlManager.class);
+        Privilege privilege = mock(Privilege.class);
+        when(acm.privilegeFromName(jcrPrivilege)).thenReturn(privilege);
+        Privilege additionalPrivilegeForAdd = mock(Privilege.class);
+        for (String privilegeAdd : additionalJcrPrivilegesForAdd) {

Review comment:
       either this `for` loop should be dropped, or the test adjusted to 
actually create correct fixtures. Right now, if one were to add another 
permission to `additionalJcrPrivilegesForAdd` array, the fixture below will 
return _identical_ mock for both of them. (not to mention the test will likely 
error-out because the fixture for `acm.hasPrivileges` won't work due to 
unexpected arguments).
   Similarly, if you decide that `for` loop _IS NOT_ to be dropped, use 
`Answer` to verify the arguments sent while setting up the fixture for 
`acm.hasPrivileges`

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -82,8 +83,7 @@ public void testNoPermissionOnAdd() throws Exception {
 
     @Test
     public void testPermissionOnAdd() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -36,19 +36,21 @@
  */
 public class PrivilegeDistributionRequestAuthorizationStrategyTest {
 
+    String jcrPrivilege = "foo";
+    String[] additionalJcrPrivilegesForAdd;

Review comment:
       consider removing fields `jcrPrivilege`, `additionalJcrPrivilegesForAdd` 
and `additionalJcrPrivilegesForDelete`. Restore earlier, method-local 
`jcrPrivilege` and pass `null` directly while intiallizing 
`PrivilegeDistributionRequestAuthorizationStrategy` in the existing tests 
asserting existing behaviour (of adding default JCR_READ/JCR_REMOVE_NODE 
privileges as applicable)

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -97,7 +97,34 @@ public void testPermissionOnAdd() throws Exception {
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
         String[] paths = new String[]{"/foo"};
         for (String path : paths) {
-            when(acm.hasPrivileges(path, new Privilege[]{privilege, 
jcrReadPrivilege})).thenReturn(true);
+            when(acm.hasPrivileges(path, new Privilege[]{jcrReadPrivilege, 
privilege})).thenReturn(true);
+        }
+        when(distributionRequest.getPaths()).thenReturn(paths);
+
+        
when(distributionRequest.getRequestType()).thenReturn(DistributionRequestType.ADD);
+        strategy.checkPermission(resourceResolver, distributionRequest);
+    }
+    
+    @Test
+    public void testAdditionalPermissionsOnAdd() throws Exception {
+        additionalJcrPrivilegesForAdd = new String[] {"addPermission"};
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -132,22 +158,49 @@ public void testNoPermissionOnDelete() throws Exception {
 
     @Test
     public void testPermissionOnDelete() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);
         DistributionRequest distributionRequest = 
mock(DistributionRequest.class);
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
         AccessControlManager acm = mock(AccessControlManager.class);
         Privilege privilege = mock(Privilege.class);
         when(acm.privilegeFromName(jcrPrivilege)).thenReturn(privilege);
-        Privilege jcrReadPrivilege = mock(Privilege.class);
-        
when(acm.privilegeFromName(Privilege.JCR_REMOVE_NODE)).thenReturn(jcrReadPrivilege);
+        Privilege jcrDeletePrivilege = mock(Privilege.class);
+        
when(acm.privilegeFromName(Privilege.JCR_REMOVE_NODE)).thenReturn(jcrDeletePrivilege);
+
+        when(session.getAccessControlManager()).thenReturn(acm);
+        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
+        String[] paths = new String[]{"/foo"};
+        for (String path : paths) {
+            when(acm.hasPrivileges(path, new Privilege[]{jcrDeletePrivilege, 
privilege})).thenReturn(true);
+            when(session.nodeExists(path)).thenReturn(true);
+        }
+        when(distributionRequest.getPaths()).thenReturn(paths);
+
+        
when(distributionRequest.getRequestType()).thenReturn(DistributionRequestType.DELETE);
+        strategy.checkPermission(resourceResolver, distributionRequest);
+    }
+    
+    @Test
+    public void testAdditionalPermissionsOnDelete() throws Exception {
+        additionalJcrPrivilegesForDelete = new String[] {"deletePermission"};
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);
+        DistributionRequest distributionRequest = 
mock(DistributionRequest.class);
+        ResourceResolver resourceResolver = mock(ResourceResolver.class);
+        Session session = mock(Session.class);
+        AccessControlManager acm = mock(AccessControlManager.class);
+        Privilege privilege = mock(Privilege.class);
+        when(acm.privilegeFromName(jcrPrivilege)).thenReturn(privilege);
+        Privilege additionalPrivilegeForDelete = mock(Privilege.class);
+        for (String privilegeDelete : additionalJcrPrivilegesForDelete) {

Review comment:
       similar arguments and suggestions as made for 
`testAdditionalPermissionsOnAdd`

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -132,22 +158,49 @@ public void testNoPermissionOnDelete() throws Exception {
 
     @Test
     public void testPermissionOnDelete() throws Exception {
-        String jcrPrivilege = "somePermission";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "somePermission";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```

##########
File path: 
src/test/java/org/apache/sling/distribution/agent/impl/PrivilegeDistributionRequestAuthorizationStrategyTest.java
##########
@@ -36,19 +36,21 @@
  */
 public class PrivilegeDistributionRequestAuthorizationStrategyTest {
 
+    String jcrPrivilege = "foo";
+    String[] additionalJcrPrivilegesForAdd;
+    String[] additionalJcrPrivilegesForDelete;
+
     @Test(expected = DistributionException.class)
     public void testCheckPermissionWithoutSession() throws Exception {
-        String jcrPrivilege = "foo";
-        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege);
+        PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, 
additionalJcrPrivilegesForAdd, additionalJcrPrivilegesForDelete);

Review comment:
       ```suggestion
           String jcrPrivilege = "foo";
           PrivilegeDistributionRequestAuthorizationStrategy strategy = new 
PrivilegeDistributionRequestAuthorizationStrategy(jcrPrivilege, null, null);
   ```




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to