add missing test for JcrResourceProvider.getParent
diff --git a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
index 684ce80..90e8f9c 100644
--- a/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
+++ b/src/test/java/org/apache/sling/jcr/resource/internal/helper/jcr/JcrResourceProviderTest.java
@@ -26,16 +26,23 @@
import javax.jcr.Session;
import javax.jcr.nodetype.NodeType;
-import org.apache.jackrabbit.commons.JcrUtils;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.Resource;
+import org.apache.sling.jcr.resource.internal.HelperData;
import org.apache.sling.spi.resource.provider.ResolveContext;
import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.jetbrains.annotations.NotNull;
import org.junit.Assert;
import org.mockito.Mockito;
import org.osgi.framework.ServiceReference;
import org.osgi.service.component.ComponentContext;
+import static javax.jcr.nodetype.NodeType.NT_UNSTRUCTURED;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.withSettings;
+
public class JcrResourceProviderTest extends SlingRepositoryTestBase {
JcrResourceProvider jcrResourceProvider;
@@ -47,34 +54,48 @@
// create the session
session = getSession();
Repository repo = getRepository();
- ComponentContext ctx = Mockito.mock(ComponentContext.class);
- Mockito.when(ctx.locateService(Mockito.anyString(), Mockito.any(ServiceReference.class))).thenReturn(repo);
+ ComponentContext ctx = mock(ComponentContext.class);
+ when(ctx.locateService(Mockito.anyString(), Mockito.any(ServiceReference.class))).thenReturn(repo);
jcrResourceProvider = new JcrResourceProvider();
jcrResourceProvider.activate(ctx);
}
@Override
protected void tearDown() throws Exception {
- jcrResourceProvider.deactivate();
- super.tearDown();
+ try {
+ if (session.nodeExists("/parent")) {
+ session.removeItem("/parent");
+ session.save();
+ }
+ } finally {
+ jcrResourceProvider.deactivate();
+ super.tearDown();
+ }
+ }
+
+ private @NotNull JcrProviderState createProviderState() {
+ return new JcrProviderState(session, new HelperData(null, null), false);
+ }
+
+ private @NotNull ResolveContext mockResolveContext() {
+ ResolveContext ctx = mock(ResolveContext.class);
+ when(ctx.getProviderState()).thenReturn(createProviderState());
+ return ctx;
}
public void testAdaptTo_Principal() {
- ResolveContext ctx = Mockito.mock(ResolveContext.class);
- Mockito.when(ctx.getProviderState()).thenReturn(new JcrProviderState(session, null, false));
+ ResolveContext ctx = mockResolveContext();
Assert.assertNotNull(jcrResourceProvider.adaptTo(ctx, Principal.class));
}
public void testOrderBefore() throws RepositoryException, PersistenceException {
- Node parentNode = session.getRootNode().addNode("parent", NodeType.NT_UNSTRUCTURED);
- parentNode.addNode("child1", NodeType.NT_UNSTRUCTURED);
- parentNode.addNode("child2", NodeType.NT_UNSTRUCTURED);
- parentNode.addNode("child3", NodeType.NT_UNSTRUCTURED);
+ Node parentNode = session.getRootNode().addNode("parent", NT_UNSTRUCTURED);
+ parentNode.addNode("child1", NT_UNSTRUCTURED);
+ parentNode.addNode("child2", NT_UNSTRUCTURED);
+ parentNode.addNode("child3", NT_UNSTRUCTURED);
session.save();
- ResolveContext ctx = Mockito.mock(ResolveContext.class);
- JcrProviderState state = new JcrProviderState(session, null, false);
- Mockito.when(ctx.getProviderState()).thenReturn(state);
+ ResolveContext ctx = mockResolveContext();
Resource parent = jcrResourceProvider.getResource(ctx, "/parent", ResourceContext.EMPTY_CONTEXT, null);
Assert.assertNotNull(parent);
// order with invalid names
@@ -100,6 +121,45 @@
Assert.assertTrue(jcrResourceProvider.orderBefore(ctx, parent, "child2", null));
}
+
+ public void testGetParent() throws Exception {
+ Node parentNode = session.getRootNode().addNode("parent", NT_UNSTRUCTURED);
+ Node child = parentNode.addNode("child", NT_UNSTRUCTURED);
+ Node grandchild = child.addNode("grandchild", NT_UNSTRUCTURED);
+ session.save();
+
+ ResolveContext ctx = mockResolveContext();
+ Resource rootResource = jcrResourceProvider.getResource(ctx, PathUtils.ROOT_PATH, ResourceContext.EMPTY_CONTEXT, null);
+ Resource parentResource = jcrResourceProvider.getResource(ctx, parentNode.getPath(), ResourceContext.EMPTY_CONTEXT, rootResource);
+ Resource childResource = jcrResourceProvider.getResource(ctx, child.getPath(), ResourceContext.EMPTY_CONTEXT, parentResource);
+ Resource grandChildResource = jcrResourceProvider.getResource(ctx, grandchild.getPath(), ResourceContext.EMPTY_CONTEXT, childResource);
+ assertResources(rootResource, parentResource, childResource, grandChildResource);
+
+ assertParent(jcrResourceProvider.getParent(ctx, grandChildResource), child.getPath());
+ assertParent(jcrResourceProvider.getParent(ctx, childResource), parentNode.getPath());
+ assertParent(jcrResourceProvider.getParent(ctx, parentResource), PathUtils.ROOT_PATH);
+ assertNull(jcrResourceProvider.getParent(ctx, rootResource));
+ }
+
+ public void testGetParentDifferentResource() {
+ Resource r = mock(Resource.class);
+ when(r.getPath()).thenReturn("/test/path");
+ Resource parent = jcrResourceProvider.getParent(mockResolveContext(), r);
+ assertFalse(parent instanceof JcrNodeResource);
+ }
+
+ private static void assertResources(Resource... resources) {
+ for (Resource r : resources) {
+ assertNotNull(r);
+ assertTrue(r instanceof JcrNodeResource);
+ }
+ }
+
+ private static void assertParent(Resource parent, String expectedPath) {
+ assertNotNull(parent);
+ assertTrue(parent instanceof JcrNodeResource);
+ assertEquals(expectedPath, parent.getPath());
+ }
}