/* * #%L * ACS AEM Commons Bundle * %% * Copyright (C) 2016 Adobe * %% * Licensed 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. * #L% */ package com.adobe.acs.commons.replication.status.impl; import com.adobe.acs.commons.replication.status.ReplicationStatusManager; import com.day.cq.commons.jcr.JcrConstants; import com.day.cq.commons.jcr.JcrUtil; import com.day.cq.dam.api.Asset; import com.day.cq.dam.commons.util.DamUtil; import com.day.cq.replication.ReplicationStatus; import com.day.cq.wcm.api.Page; import com.day.cq.wcm.api.PageManager; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; import java.util.Calendar; import static junit.framework.Assert.assertEquals; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(PowerMockRunner.class) @PrepareForTest({JcrUtil.class, DamUtil.class}) public class ReplicationStatusManagerImplTest { @Mock NodeType replicationNodeType; @Spy ReplicationStatusManagerImpl replicationStatusManager = new ReplicationStatusManagerImpl(); @Mock ResourceResolver resourceResolver; @Mock Session session; @Mock PageManager pageManager; static final String PAGE_PATH = "/content/page"; @Mock Page pagePage; @Mock Resource pageContentResource; static final String ASSET_PATH = "/content/asset"; @Mock Resource assetResource; @Mock Asset assetAsset; @Mock Resource assetContentResource; static final String UNREPLICATED_PATH = "/content/unreplicated"; @Mock Resource unreplicatedResource; @Mock Node unreplicatedNode; static final String REPLICATED_PATH = "/content/replicated"; @Mock Resource replicatedResource; @Mock Node replicatedNode; @Before public void setUp() throws Exception { when(replicationNodeType.getName()).thenReturn(ReplicationStatus.NODE_TYPE); when(resourceResolver.adaptTo(Session.class)).thenReturn(session); when(resourceResolver.adaptTo(PageManager.class)).thenReturn(pageManager); /* Page */ when(pageManager.getContainingPage(PAGE_PATH)).thenReturn(pagePage); when(pagePage.getContentResource()).thenReturn(pageContentResource); /* Asset */ PowerMockito.mockStatic(DamUtil.class); when(resourceResolver.getResource(ASSET_PATH)).thenReturn(assetResource); when(DamUtil.resolveToAsset(assetResource)).thenReturn(assetAsset); when(assetAsset.getPath()).thenReturn(ASSET_PATH); when(assetResource.getChild(JcrConstants.JCR_CONTENT)).thenReturn(assetContentResource); /* Unreplicated Node */ when(resourceResolver.getResource(UNREPLICATED_PATH)).thenReturn(unreplicatedResource); when(unreplicatedResource.adaptTo(Node.class)).thenReturn(unreplicatedNode); when(unreplicatedNode.getSession()).thenReturn(session); when(unreplicatedNode.isNodeType(ReplicationStatus.NODE_TYPE)).thenReturn(false); when(unreplicatedNode.getMixinNodeTypes()).thenReturn(new NodeType[] { }); when(unreplicatedNode.canAddMixin(ReplicationStatus.NODE_TYPE)).thenReturn(true); /* Replicated Node */ when(resourceResolver.getResource(REPLICATED_PATH)).thenReturn(replicatedResource); when(replicatedResource.adaptTo(Node.class)).thenReturn(replicatedNode); when(replicatedNode.getSession()).thenReturn(session); when(replicatedNode.isNodeType(ReplicationStatus.NODE_TYPE)).thenReturn(true); when(replicatedNode.getMixinNodeTypes()).thenReturn(new NodeType[] { replicationNodeType }); } @Test public void testGetReplicationStatusResource_Page() { assertEquals(pageContentResource, replicationStatusManager.getReplicationStatusResource(PAGE_PATH, resourceResolver)); } @Test public void testGetReplicationStatusResource_Asset() { assertEquals(assetContentResource, replicationStatusManager.getReplicationStatusResource(ASSET_PATH, resourceResolver)); } @Test public void testGetReplicationStatusResource_Resource() { assertEquals(unreplicatedResource, replicationStatusManager.getReplicationStatusResource(UNREPLICATED_PATH, resourceResolver)); } @Test public void testSetReplicationStatus_Activate() throws Exception { PowerMockito.mockStatic(JcrUtil.class); final String replicationStatus = "Activate"; final String replicatedBy = "Test User"; final Calendar replicatedAt = Calendar.getInstance(); replicatedAt.set(1,1); replicationStatusManager.setReplicationStatus(resourceResolver, replicatedBy, replicatedAt, ReplicationStatusManager.Status.ACTIVATED, UNREPLICATED_PATH); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(unreplicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED, replicatedAt); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(unreplicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED_BY, replicatedBy); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(unreplicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATION_ACTION, replicationStatus); verify(unreplicatedNode, times(1)).addMixin(ReplicationStatus.NODE_TYPE); verify(session, times(1)).save(); } @Test public void testSetReplicationStatus_Deactivate_1() throws Exception { PowerMockito.mockStatic(JcrUtil.class); final String replicationStatus = "Deactivate"; final String replicatedBy = "Test User"; final Calendar replicatedAt = Calendar.getInstance(); replicatedAt.set(1,1); replicationStatusManager.setReplicationStatus(resourceResolver, replicatedBy, replicatedAt, ReplicationStatusManager.Status.DEACTIVATED, REPLICATED_PATH); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED, replicatedAt); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED_BY, replicatedBy); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATION_ACTION, replicationStatus); verify(replicatedNode, times(0)).addMixin(ReplicationStatus.NODE_TYPE); verify(session, times(1)).save(); } @Test public void testSetReplicationStatus2() throws Exception { PowerMockito.mockStatic(JcrUtil.class); replicationStatusManager.setReplicationStatus(resourceResolver, null, null, ReplicationStatusManager.Status.CLEAR, REPLICATED_PATH); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED, null); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED_BY, null); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATION_ACTION, null); verify(replicatedNode, times(0)).addMixin(ReplicationStatus.NODE_TYPE); verify(session, times(1)).save(); } @Test public void testClearReplicationStatus() throws Exception { PowerMockito.mockStatic(JcrUtil.class); replicationStatusManager.clearReplicationStatus(resourceResolver, replicatedResource); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED, null); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATED_BY, null); PowerMockito.verifyStatic(times(1)); JcrUtil.setProperty(replicatedNode, ReplicationStatus.NODE_PROPERTY_LAST_REPLICATION_ACTION, null); verify(replicatedNode, times(0)).addMixin(ReplicationStatus.NODE_TYPE); verify(session, times(1)).save(); } }