This is an automated email from the ASF dual-hosted git repository.

enorman pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-jcr-mock.git


The following commit(s) were added to refs/heads/master by this push:
     new 47ecbd9  SLING-11828 Allow setting an AccessControlManager on the 
MockSession (#17)
47ecbd9 is described below

commit 47ecbd9ba0b6b7bc9c034afe4bf4fa4ce6dfa07f
Author: Eric Norman <[email protected]>
AuthorDate: Fri Apr 14 09:47:31 2023 -0700

    SLING-11828 Allow setting an AccessControlManager on the MockSession (#17)
---
 .../java/org/apache/sling/testing/mock/jcr/MockJcr.java    | 10 ++++++++++
 .../org/apache/sling/testing/mock/jcr/MockSession.java     | 14 +++++++++++++-
 .../org/apache/sling/testing/mock/jcr/MockSessionTest.java | 13 +++++++++++++
 3 files changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java 
b/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
index c16bb28..1fc5f28 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockJcr.java
@@ -30,6 +30,7 @@ import javax.jcr.SimpleCredentials;
 import javax.jcr.nodetype.NodeTypeManager;
 import javax.jcr.nodetype.NodeTypeTemplate;
 import javax.jcr.query.QueryManager;
+import javax.jcr.security.AccessControlManager;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader;
@@ -253,4 +254,13 @@ public final class MockJcr {
         }
     }
 
+    /**
+     * Use the supplied AccessControlManager for the session
+     * 
+     * @param session the session to modify
+     * @param acm the access control manager to use for the session
+     */
+    public static void setAccessControlManager(@NotNull Session session, 
@Nullable AccessControlManager acm) {
+        ((MockSession)session).setAccessControlManager(acm);
+    }
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java 
b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java
index e06345c..d944a3e 100644
--- a/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java
+++ b/src/main/java/org/apache/sling/testing/mock/jcr/MockSession.java
@@ -63,6 +63,7 @@ class MockSession implements Session {
     private final String userId;
     private boolean isLive;
     private boolean hasKnownChanges;
+    private AccessControlManager accessControlManager = null;
 
     public MockSession(MockRepository repository, Map<String, ItemData> items,
             String userId, String workspaceName) throws RepositoryException {
@@ -479,7 +480,11 @@ class MockSession implements Session {
 
     @Override
     public AccessControlManager getAccessControlManager() throws 
RepositoryException {
-        throw new UnsupportedOperationException();
+        if (accessControlManager == null) {
+            // not set, so fallback to thrown exception
+            throw new UnsupportedOperationException();
+        }
+        return accessControlManager;
     }
 
     @Override
@@ -497,4 +502,11 @@ class MockSession implements Session {
         throw new UnsupportedOperationException();
     }
 
+    /**
+     * To allow a test to provide mock implementation of the 
AccessControlManager
+     * @param acm the access control manager to use for the session
+     */
+    public void setAccessControlManager(AccessControlManager acm) {
+        this.accessControlManager = acm;
+    }
 }
diff --git 
a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java 
b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java
index 13a76f9..0cea4a1 100644
--- a/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/jcr/MockSessionTest.java
@@ -34,9 +34,11 @@ import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.security.AccessControlManager;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import com.google.common.collect.ImmutableSet;
 
@@ -409,4 +411,15 @@ public class MockSessionTest {
         assertTrue(session.propertyExists("/node1/child2/grandchild1/prop1"));
     }
 
+    @Test
+    public void testSetAccessControlManager() throws RepositoryException {
+        Session s = MockJcr.newSession();
+        assertThrows(UnsupportedOperationException.class, () -> 
s.getAccessControlManager());
+
+        AccessControlManager mockAccessControlManager = 
Mockito.mock(AccessControlManager.class);
+        MockJcr.setAccessControlManager(s, mockAccessControlManager);
+
+        assertEquals(mockAccessControlManager, s.getAccessControlManager());
+    }
+
 }

Reply via email to