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

kwin pushed a commit to branch bugfix/allow-import-of-jcr-mixintypes
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git

commit 69410514c7d637b9ac24768f473912ee7a9bb5bb
Author: Konrad Windszus <[email protected]>
AuthorDate: Thu May 8 20:25:12 2025 +0200

    SLING-12779 Allow content loading of jcr:mixinTypes for all resource
    resolver types
---
 .../testing/mock/sling/loader/ContentLoader.java   |  4 +---
 .../AbstractContentLoaderFileVaultXmlTest.java     | 25 ++++++++++++++++++++++
 .../loader/AbstractContentLoaderJsonTest.java      | 24 +++++++++++++++++++++
 .../resources/json-import-samples/content.json     |  1 +
 .../content/samples/en/.content.xml                |  1 +
 5 files changed, 52 insertions(+), 3 deletions(-)

diff --git 
a/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
 
b/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
index 86ed548..97583f9 100644
--- 
a/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
+++ 
b/core/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
@@ -80,9 +80,7 @@ public final class ContentLoader {
             .collect(Collectors.toSet());
 
     // set of resource or property names that are ignored when other resource 
resolver types than JCR_OAK are used
-    private static final Set<String> MOCK_IGNORED_NAMES = Stream.concat(
-                    SHARED_IGNORED_NAMES.stream(), 
Stream.of(JcrConstants.JCR_MIXINTYPES))
-            .collect(Collectors.toSet());
+    private static final Set<String> MOCK_IGNORED_NAMES = SHARED_IGNORED_NAMES;
 
     // set of resource or property names that are ignored when JCR_OAK 
resource resolver type (= a real repo impl) is
     // used
diff --git 
a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
 
b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
index 0f31a95..ba4a62a 100644
--- 
a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
+++ 
b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderFileVaultXmlTest.java
@@ -21,8 +21,11 @@ package org.apache.sling.testing.mock.sling.loader;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
 
 import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
@@ -36,6 +39,7 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
+import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 
@@ -99,6 +103,12 @@ public abstract class AbstractContentLoaderFileVaultXmlTest 
{
         assertPrimaryNodeType(resource, "app:PageContent");
     }
 
+    @Test
+    public void testPageContentMixinTypes() throws RepositoryException {
+        Resource resource = context.resourceResolver().getResource(path + 
"/sample/en/jcr:content");
+        assertMixinTypes(resource, "app:TestMixin");
+    }
+
     @Test
     public void testPageContentProperties() {
         Resource resource = context.resourceResolver().getResource(path + 
"/sample/en/jcr:content");
@@ -116,4 +126,19 @@ public abstract class 
AbstractContentLoaderFileVaultXmlTest {
             assertEquals(nodeType, props.get(JcrConstants.JCR_PRIMARYTYPE));
         }
     }
+
+    private void assertMixinTypes(final Resource resource, String... 
mixinTypes) throws RepositoryException {
+        Node node = resource.adaptTo(Node.class);
+        if (node != null) {
+            assertArrayEquals(
+                    mixinTypes,
+                    Stream.of(node.getMixinNodeTypes())
+                            .map(NodeType::getName)
+                            .collect(Collectors.toSet())
+                            .toArray(new String[0]));
+        } else {
+            ValueMap props = ResourceUtil.getValueMap(resource);
+            assertArrayEquals(mixinTypes, 
props.get(JcrConstants.JCR_MIXINTYPES, String[].class));
+        }
+    }
 }
diff --git 
a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
 
b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
index 30c2153..c53bd14 100644
--- 
a/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
+++ 
b/core/src/test/java/org/apache/sling/testing/mock/sling/loader/AbstractContentLoaderJsonTest.java
@@ -21,10 +21,13 @@ package org.apache.sling.testing.mock.sling.loader;
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.nodetype.NodeType;
 
 import java.util.Calendar;
 import java.util.List;
 import java.util.TimeZone;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.Resource;
@@ -88,6 +91,12 @@ public abstract class AbstractContentLoaderJsonTest {
         assertPrimaryNodeType(resource, "app:Page");
     }
 
+    @Test
+    public void testPageContentMixinTypes() throws RepositoryException {
+        Resource resource = context.resourceResolver().getResource(path + 
"/sample/en/jcr:content");
+        assertMixinTypes(resource, "app:TestMixin");
+    }
+
     @Test
     public void testPageContentResourceType() {
         Resource resource = context.resourceResolver().getResource(path + 
"/sample/en/toolbar/profiles/jcr:content");
@@ -144,6 +153,21 @@ public abstract class AbstractContentLoaderJsonTest {
         }
     }
 
+    private void assertMixinTypes(final Resource resource, String... 
mixinTypes) throws RepositoryException {
+        Node node = resource.adaptTo(Node.class);
+        if (node != null) {
+            assertArrayEquals(
+                    mixinTypes,
+                    Stream.of(node.getMixinNodeTypes())
+                            .map(NodeType::getName)
+                            .collect(Collectors.toSet())
+                            .toArray(new String[0]));
+        } else {
+            ValueMap props = ResourceUtil.getValueMap(resource);
+            assertArrayEquals(mixinTypes, 
props.get(JcrConstants.JCR_MIXINTYPES, String[].class));
+        }
+    }
+
     @Test
     public void testCalendarEcmaFormat() {
         Resource resource = context.resourceResolver().getResource(path + 
"/sample/en/jcr:content");
diff --git a/core/src/test/resources/json-import-samples/content.json 
b/core/src/test/resources/json-import-samples/content.json
index c1fa7de..2784b31 100644
--- a/core/src/test/resources/json-import-samples/content.json
+++ b/core/src/test/resources/json-import-samples/content.json
@@ -4,6 +4,7 @@
   "jcr:created": "Thu Aug 07 2014 16:32:59 GMT+0200",
   "jcr:content": {
     "jcr:primaryType": "app:PageContent",
+    "jcr:mixinTypes": ["app:TestMixin"],
     "jcr:createdBy": "admin",
     "jcr:title": "English",
     "app:template": "/apps/sample/templates/homepage",
diff --git 
a/core/src/test/resources/xml-jcr-import-samples/content/samples/en/.content.xml
 
b/core/src/test/resources/xml-jcr-import-samples/content/samples/en/.content.xml
index 09748dc..13d4844 100644
--- 
a/core/src/test/resources/xml-jcr-import-samples/content/samples/en/.content.xml
+++ 
b/core/src/test/resources/xml-jcr-import-samples/content/samples/en/.content.xml
@@ -24,6 +24,7 @@
       app:deviceGroups="[/etc/mobile/groups/responsive]"
       app:template="samples/sample-app/templates/content/homepage"
       jcr:primaryType="app:PageContent"
+      jcr:mixinTypes="app:TestMixin"
       jcr:title="en"
       sling:resourceType="samples/sample-app/components/content/page/homepage"
       includeAside="{Boolean}true"

Reply via email to