Package org.apache.sling.superimposing.impl

Source Code of org.apache.sling.superimposing.impl.SuperimposingResourceProviderImplTest

/*
* 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.sling.superimposing.impl;

import static org.junit.Assert.*;
import static org.mockito.Mockito.*;

import java.util.Arrays;
import java.util.Dictionary;
import java.util.Iterator;

import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceWrapper;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.runners.MockitoJUnitRunner;
import org.mockito.stubbing.Answer;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceRegistration;

@RunWith(MockitoJUnitRunner.class)
public class SuperimposingResourceProviderImplTest {

    private SuperimposingResourceProviderImpl underTest;
    private SuperimposingResourceProviderImpl underTestOverlay;

    @Mock
    private BundleContext bundleContext;
    @Mock
    private ServiceRegistration serviceRegistration;
    @Mock
    private ServiceRegistration serviceRegistrationOverlay;
    @Mock
    private ResourceResolver resourceResolver;
    @Mock
    private Session session;
    @Mock
    private Resource originalRootResource;
    @Mock
    private Resource originalSubResource;

    private static final String ORIGINAL_PATH = "/root/path1";
    private static final String SUPERIMPOSED_PATH = "/root/path2";
    private static final String RESOURCE_TYPE = "/resourceType1";

    @Before
    public void setUp() {
        // setup a superimposing resource provider without overlay
        underTest = new SuperimposingResourceProviderImpl(SUPERIMPOSED_PATH, ORIGINAL_PATH, false);
        when(bundleContext.registerService(anyString(), eq(underTest), any(Dictionary.class))).thenReturn(serviceRegistration);
        underTest.registerService(bundleContext);

        // and one with overlay
        underTestOverlay = new SuperimposingResourceProviderImpl(SUPERIMPOSED_PATH, ORIGINAL_PATH, true);
        when(bundleContext.registerService(anyString(), eq(underTestOverlay), any(Dictionary.class))).thenReturn(serviceRegistrationOverlay);
        underTestOverlay.registerService(bundleContext);

        // prepare test resources
        prepareOriginalResource(originalRootResource, ORIGINAL_PATH);
        prepareOriginalResource(originalSubResource, ORIGINAL_PATH + "/sub1");
        when(resourceResolver.listChildren(originalRootResource)).thenAnswer(new Answer<Iterator<Resource>>() {
            public Iterator<Resource> answer(InvocationOnMock invocation) {
                return Arrays.asList(new Resource[] { originalSubResource }).iterator();
            }
        });
    }

    private void prepareOriginalResource(Resource mockResource, String path) {
        // prepare resource
        when(mockResource.getPath()).thenReturn(path);
        when(mockResource.getResourceType()).thenReturn(RESOURCE_TYPE);
        when(mockResource.getResourceSuperType()).thenReturn(null);
        ResourceMetadata resourceMetadata = new ResourceMetadata();
        resourceMetadata.setResolutionPath(path);
        when(mockResource.getResourceMetadata()).thenReturn(resourceMetadata);
        when(mockResource.getResourceResolver()).thenReturn(resourceResolver);

        // mount in resource tree
        when(resourceResolver.getResource(path)).thenReturn(mockResource);
    }

    @After
    public void tearDown() {
        underTest.unregisterService();
        verify(serviceRegistration).unregister();

        underTestOverlay.unregisterService();
        verify(serviceRegistrationOverlay).unregister();
    }

    @Test
    public void testGetter() {
        assertEquals(SUPERIMPOSED_PATH, underTest.getRootPath());
        assertEquals(ORIGINAL_PATH, underTest.getSourcePath());
        assertFalse(underTest.isOverlayable());
    }

    @Test
    public void testGetterOverlay() {
        assertEquals(SUPERIMPOSED_PATH, underTestOverlay.getRootPath());
        assertEquals(ORIGINAL_PATH, underTestOverlay.getSourcePath());
        assertTrue(underTestOverlay.isOverlayable());
    }

    @Test
    public void testEquals() {
        assertTrue(underTest.equals(underTest));
        assertFalse(underTest.equals(underTestOverlay));
        assertTrue(underTestOverlay.equals(underTestOverlay));
        assertFalse(underTest.equals(underTestOverlay));
    }

    @Test
    public void testGetMappedRootResource() {
        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH);
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH, resource.getPath());

        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH);
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH, resource.getPath());
    }

    @Test
    public void testGetMappedRootResourceWithOverlay() throws RepositoryException {
        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
        when(session.itemExists(SUPERIMPOSED_PATH)).thenReturn(true);

        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH);
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH, resource.getPath());

        // root path cannot be overlayed
        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH);
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH, resource.getPath());
    }

    @Test
    public void testGetMappedSubResource() {
        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub1");
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH + "/sub1", resource.getPath());

        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub1");
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH + "/sub1", resource.getPath());
    }

    @Test
    public void testGetMappedSubResourceWithOverlay() throws RepositoryException {
        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
        when(session.itemExists(SUPERIMPOSED_PATH + "/sub1")).thenReturn(true);

        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub1");
        assertTrue(resource instanceof SuperimposingResource);
        assertEquals(SUPERIMPOSED_PATH + "/sub1", resource.getPath());

        // overlay item exists, allow underlying resource provider to step in
        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub1");
        assertNull(resource);
    }

    @Test
    public void testGetMappedNonExistingResource() {
        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub2");
        assertNull(resource);

        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub2");
        assertNull(resource);
    }

    @Test
    public void testGetMappedNonExistingResourceWithOverlay() throws RepositoryException {
        when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
        when(session.itemExists(SUPERIMPOSED_PATH + "/sub2")).thenReturn(true);

        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub2");
        assertNull(resource);

        resource = underTestOverlay.getResource(resourceResolver, SUPERIMPOSED_PATH + "/sub2");
        assertNull(resource);
    }

    @Test
    public void testGetMappedResourceRootInvalidPath() {
        Resource resource = underTest.getResource(resourceResolver, "/invalid/path");
        assertNull(resource);

        resource = underTestOverlay.getResource(resourceResolver, "/invalid/path");
        assertNull(resource);
    }

    @Test
    public void testListChildren() {
        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH);
        Iterator<Resource> iterator = underTest.listChildren(resource);
        assertTrue(iterator.hasNext());
        assertEquals(SUPERIMPOSED_PATH + "/sub1", iterator.next().getPath());
    }

    @Test
    public void testListChildrenWithResourceWrapper() {
        Resource resource = underTest.getResource(resourceResolver, SUPERIMPOSED_PATH);
        Iterator<Resource> iterator = underTest.listChildren(new ResourceWrapper(resource));
        assertTrue(iterator.hasNext());
        assertEquals(SUPERIMPOSED_PATH + "/sub1", iterator.next().getPath());
    }

    @Test
    public void testListChildrenNonSuperimposingResource() {
        Iterator<Resource> iterator = underTest.listChildren(mock(Resource.class));
        assertNull(iterator);
    }

}
TOP

Related Classes of org.apache.sling.superimposing.impl.SuperimposingResourceProviderImplTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.