From 6c1808731b2f075884df500da9cd799b17a65a48 Mon Sep 17 00:00:00 2001 From: Ross Gale Date: Thu, 17 Oct 2019 17:49:01 +0100 Subject: [PATCH] RM-7014 add code to check an rm site has been created before running the patches that require an rm site --- .../patch/rm-patch-v23-context.xml | 1 + .../patch/v23/RMv23SavedSearchesPatch.java | 26 +++++++++++--- .../patch/v32/RMv32HoldChildAssocPatch.java | 15 ++++---- .../v23/RMv23SavedSearchesPatchUnitTest.java | 35 ++++++++++++++++++- .../v32/RMv32HoldChildAssocPatchUnitTest.java | 14 ++++++++ 5 files changed, 80 insertions(+), 11 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v23-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v23-context.xml index cf5d8271f5..ae012dd822 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v23-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/patch/rm-patch-v23-context.xml @@ -42,6 +42,7 @@ + diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatch.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatch.java index bc154cdad7..84d2d0e6b3 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatch.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatch.java @@ -34,6 +34,7 @@ import org.alfresco.module.org_alfresco_module_rm.patch.AbstractModulePatch; import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearchService; import org.alfresco.module.org_alfresco_module_rm.search.SavedSearchDetails; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteService; /** * RM v2.3 patch that adds the saved search aspect. @@ -53,6 +54,11 @@ public class RMv23SavedSearchesPatch extends AbstractModulePatch */ private NodeService nodeService; + /** + * Site service fundamental API. + */ + private SiteService siteService; + /** * @param recordsManagementSearchService records management search service */ @@ -69,19 +75,31 @@ public class RMv23SavedSearchesPatch extends AbstractModulePatch this.nodeService = nodeService; } + /** + * Setter for siteService + * @param siteService Site service fundamental API. + */ + public void setSiteService(SiteService siteService) + { + this.siteService = siteService; + } + /** * Retrieves all saved searches for the records management site and adds ASPECT_SAVED_SEARCH */ @Override public void applyInternal() { - for (SavedSearchDetails savedSearchDetails : recordsManagementSearchService.getSavedSearches(DEFAULT_SITE_NAME)) + if(siteService.getSite(DEFAULT_SITE_NAME) != null) { - if(nodeService.hasAspect(savedSearchDetails.getNodeRef(),ASPECT_SAVED_SEARCH)) + for (SavedSearchDetails savedSearchDetails : recordsManagementSearchService.getSavedSearches(DEFAULT_SITE_NAME)) { - break; + if (nodeService.hasAspect(savedSearchDetails.getNodeRef(), ASPECT_SAVED_SEARCH)) + { + break; + } + nodeService.addAspect(savedSearchDetails.getNodeRef(), ASPECT_SAVED_SEARCH, null); } - nodeService.addAspect(savedSearchDetails.getNodeRef(), ASPECT_SAVED_SEARCH, null); } } } diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatch.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatch.java index 43a4d06e18..3d1afaa1c1 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatch.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatch.java @@ -107,15 +107,18 @@ public class RMv32HoldChildAssocPatch extends AbstractModulePatch @Override public void applyInternal() { - qnameDAO.updateQName(ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_CONTENT); - for (NodeRef filePlan : filePlanService.getFilePlans()) + if(qnameDAO.getQName(ASSOC_FROZEN_RECORDS) != null) { - for (NodeRef hold : holdService.getHolds(filePlan)) + qnameDAO.updateQName(ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_CONTENT); + for (NodeRef filePlan : filePlanService.getFilePlans()) { - for (ChildAssociationRef ref : nodeService.getChildAssocs(hold, ASSOC_FROZEN_CONTENT, ASSOC_FROZEN_RECORDS)) + for (NodeRef hold : holdService.getHolds(filePlan)) { - holdService.removeFromHold(hold, ref.getChildRef()); - holdService.addToHold(hold, ref.getChildRef()); + for (ChildAssociationRef ref : nodeService.getChildAssocs(hold, ASSOC_FROZEN_CONTENT, ASSOC_FROZEN_RECORDS)) + { + holdService.removeFromHold(hold, ref.getChildRef()); + holdService.addToHold(hold, ref.getChildRef()); + } } } } diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatchUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatchUnitTest.java index 750f24694a..4e4cb2f8d2 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatchUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v23/RMv23SavedSearchesPatchUnitTest.java @@ -29,6 +29,9 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v23; import static java.util.Arrays.asList; import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASPECT_SAVED_SEARCH; +import static org.alfresco.module.org_alfresco_module_rm.model.rma.type.RmSiteType.DEFAULT_SITE_NAME; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyMap; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -39,6 +42,10 @@ import org.alfresco.module.org_alfresco_module_rm.search.RecordsManagementSearch import org.alfresco.module.org_alfresco_module_rm.search.SavedSearchDetails; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteInfo; +import org.alfresco.service.cmr.site.SiteService; +import org.alfresco.service.namespace.QName; +import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; @@ -56,6 +63,12 @@ public class RMv23SavedSearchesPatchUnitTest @Mock private NodeService nodeService; + @Mock + private SiteService siteService; + + @Mock + private SiteInfo siteInfo; + @Mock private RecordsManagementSearchServiceImpl recordsManagementSearchService; @@ -65,6 +78,12 @@ public class RMv23SavedSearchesPatchUnitTest @InjectMocks private RMv23SavedSearchesPatch patch; + @Before + public void setUp() + { + MockitoAnnotations.initMocks(this); + } + /** * Given that I am upgrading an existing repository to v2.3 * When I execute the patch @@ -73,13 +92,13 @@ public class RMv23SavedSearchesPatchUnitTest @Test public void executePatch() { - MockitoAnnotations.initMocks(this); NodeRef noderef1 = new NodeRef("foo://123/456"); NodeRef noderef2 = new NodeRef("bar://123/456"); List searches = asList(mockSavedSearchDetails1, mockSavedSearchDetails2); when(mockSavedSearchDetails1.getNodeRef()).thenReturn(noderef1); when(mockSavedSearchDetails2.getNodeRef()).thenReturn(noderef2); when(recordsManagementSearchService.getSavedSearches("rm")).thenReturn(searches); + when(siteService.getSite(DEFAULT_SITE_NAME)).thenReturn(siteInfo); // execute patch patch.applyInternal(); @@ -88,4 +107,18 @@ public class RMv23SavedSearchesPatchUnitTest verify(nodeService, times(1)).addAspect(noderef2, ASPECT_SAVED_SEARCH, null); } + /** + * Test patch code doesnt run with an rm site + */ + @Test + public void testPatchDoesntRunWithoutRmSite() + { + when(siteService.getSite(DEFAULT_SITE_NAME)).thenReturn(null); + + // execute patch + patch.applyInternal(); + + verify(nodeService, times(0)).addAspect(any(NodeRef.class), any(QName.class), anyMap()); + } + } diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatchUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatchUnitTest.java index 3ab5387561..98b006bf9a 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatchUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/patch/v32/RMv32HoldChildAssocPatchUnitTest.java @@ -29,6 +29,7 @@ package org.alfresco.module.org_alfresco_module_rm.patch.v32; import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASSOC_FROZEN_CONTENT; import static org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel.ASSOC_FROZEN_RECORDS; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -44,6 +45,7 @@ import org.alfresco.repo.domain.qname.QNameDAO; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.util.Pair; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; @@ -105,6 +107,7 @@ public class RMv32HoldChildAssocPatchUnitTest @Test public void testAHoldIsRemovedAndReplacedDuringUpgrade() { + when(qNameDAO.getQName(ASSOC_FROZEN_RECORDS)).thenReturn(new Pair(ASSOC_FROZEN_CONTENT,null)); when(filePlanService.getFilePlans()).thenReturn(fileplans); when(holdService.getHolds(filePlanRef)).thenReturn(holds); when(nodeService.getChildAssocs(holdRef, ASSOC_FROZEN_CONTENT, ASSOC_FROZEN_RECORDS)).thenReturn(childAssocs); @@ -113,4 +116,15 @@ public class RMv32HoldChildAssocPatchUnitTest verify(holdService, times(1)).removeFromHold(holdRef, heldItemRef); verify(holdService, times(1)).addToHold(holdRef, heldItemRef); } + + /** + * Test patch doesnt run without an association added during rm site creation + */ + @Test + public void testAHoldIsntRemovedAndReplacedDuringUpgradeWithNoRmSite() + { + when(qNameDAO.getQName(ASSOC_FROZEN_RECORDS)).thenReturn(null); + patch.applyInternal(); + verify(qNameDAO, never()).updateQName(ASSOC_FROZEN_RECORDS, ASSOC_FROZEN_CONTENT); + } }