From 38bff5dc8226b1cf452e49b9932a566d8390d1c1 Mon Sep 17 00:00:00 2001 From: Tom Page Date: Thu, 13 Oct 2022 15:01:41 +0100 Subject: [PATCH] ACS-3651 Add unit tests for node exists and read permission. --- .../rules/ActionParameterConverterTest.java | 88 +++++++++++++++---- 1 file changed, 71 insertions(+), 17 deletions(-) diff --git a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/ActionParameterConverterTest.java b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/ActionParameterConverterTest.java index 7e5077834c..5bd9e7254b 100644 --- a/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/ActionParameterConverterTest.java +++ b/remote-api/src/test/java/org/alfresco/rest/api/impl/rules/ActionParameterConverterTest.java @@ -26,8 +26,12 @@ package org.alfresco.rest.api.impl.rules; +import static org.alfresco.repo.action.executer.CopyActionExecuter.PARAM_DESTINATION_FOLDER; import static org.alfresco.service.cmr.repository.StoreRef.STORE_REF_WORKSPACE_SPACESSTORE; +import static org.alfresco.service.cmr.security.AccessStatus.ALLOWED; +import static org.alfresco.service.cmr.security.AccessStatus.DENIED; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -50,6 +54,8 @@ import org.alfresco.repo.action.executer.RemoveFeaturesActionExecuter; import org.alfresco.repo.action.executer.ScriptActionExecuter; import org.alfresco.repo.action.executer.SetPropertyValueActionExecuter; import org.alfresco.repo.action.executer.SimpleWorkflowActionExecuter; +import org.alfresco.rest.api.Nodes; +import org.alfresco.rest.framework.core.exceptions.EntityNotFoundException; import org.alfresco.rest.framework.core.exceptions.NotFoundException; import org.alfresco.service.Experimental; import org.alfresco.service.cmr.action.ActionDefinition; @@ -58,8 +64,10 @@ import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; @@ -81,8 +89,10 @@ public class ActionParameterConverterTest private static final String IDENTIFIER = "identifier"; private static final String IDENTIFIER_ASPECT = NamespaceService.CONTENT_MODEL_PREFIX + QName.NAMESPACE_PREFIX + IDENTIFIER; - private static final String DUMMY_FOLDER_NODE_ID = "dummy-folder-node"; - private static final String DUMMY_SCRIPT_NODE_ID = "dummy-script-ref"; + private static final String DUMMY_FOLDER_NODE_ID = "dummy://folder/node"; + private static final NodeRef DUMMY_FOLDER_NODE = new NodeRef(DUMMY_FOLDER_NODE_ID); + private static final String DUMMY_SCRIPT_NODE_ID = "dummy://script/ref"; + private static final NodeRef DUMMY_SCRIPT_NODE = new NodeRef(DUMMY_SCRIPT_NODE_ID); @Mock private DictionaryService dictionaryService; @@ -90,6 +100,10 @@ public class ActionParameterConverterTest private ActionService actionService; @Mock private NamespaceService namespaceService; + @Mock + private PermissionService permissionService; + @Mock + private Nodes nodes; @Mock private ActionDefinition actionDefinition; @@ -109,6 +123,15 @@ public class ActionParameterConverterTest @InjectMocks private ActionParameterConverter objectUnderTest; + @Before + public void setUp() + { + given(nodes.validateOrLookupNode(DUMMY_FOLDER_NODE_ID, null)).willReturn(DUMMY_FOLDER_NODE); + given(nodes.validateOrLookupNode(DUMMY_SCRIPT_NODE_ID, null)).willReturn(DUMMY_SCRIPT_NODE); + given(permissionService.hasReadPermission(DUMMY_FOLDER_NODE)).willReturn(ALLOWED); + given(permissionService.hasReadPermission(DUMMY_SCRIPT_NODE)).willReturn(ALLOWED); + } + @Test public void testAddAspectConversion() { @@ -146,7 +169,7 @@ public class ActionParameterConverterTest public void testCopyConversion() { final String name = CopyActionExecuter.NAME; - final String destinationFolderKey = CopyActionExecuter.PARAM_DESTINATION_FOLDER; + final String destinationFolderKey = PARAM_DESTINATION_FOLDER; final String deepCopyKey = CopyActionExecuter.PARAM_DEEP_COPY; final Map params = Map.of(destinationFolderKey, DUMMY_FOLDER_NODE_ID, deepCopyKey, true); @@ -177,8 +200,7 @@ public class ActionParameterConverterTest final Serializable convertedCopyParam = convertedParams.get(destinationFolderKey); assertTrue(convertedCopyParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedCopyParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedCopyParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedCopyParam); final Serializable convertedDeepCopyParam = convertedParams.get(deepCopyKey); assertThat(convertedDeepCopyParam instanceof Boolean).isTrue(); assertTrue(((Boolean) convertedDeepCopyParam)); @@ -211,8 +233,7 @@ public class ActionParameterConverterTest final Serializable convertedCopyParam = convertedParams.get(executeScriptKey); assertTrue(convertedCopyParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedCopyParam).getStoreRef()); - assertEquals(DUMMY_SCRIPT_NODE_ID, ((NodeRef) convertedCopyParam).getId()); + assertEquals(DUMMY_SCRIPT_NODE, convertedCopyParam); } @Test @@ -242,8 +263,7 @@ public class ActionParameterConverterTest final Serializable convertedCopyParam = convertedParams.get(destinationFolderKey); assertTrue(convertedCopyParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedCopyParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedCopyParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedCopyParam); } @Test @@ -330,8 +350,7 @@ public class ActionParameterConverterTest final Serializable convertedDestinationParam = convertedParams.get(destinationFolderKey); assertTrue(convertedDestinationParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedDestinationParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedDestinationParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedDestinationParam); final Serializable convertedAssocNameParam = convertedParams.get(assocNameKey); assertTrue(convertedAssocNameParam instanceof QName); assertEquals(CHECKOUT, ((QName) convertedAssocNameParam).getLocalName()); @@ -385,8 +404,7 @@ public class ActionParameterConverterTest assertEquals(NamespaceService.DICTIONARY_MODEL_1_0_URI, ((QName) convertedCatValueParam).getNamespaceURI()); final Serializable convertedDestinationParam = convertedParams.get(categoryValueKey); assertTrue(convertedDestinationParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedDestinationParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedDestinationParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedDestinationParam); } @Test @@ -484,12 +502,10 @@ public class ActionParameterConverterTest assertEquals(reject, convertedRejectStepParam); final Serializable convertedApproveFolderParam = convertedParams.get(approveFolderKey); assertTrue(convertedApproveFolderParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedApproveFolderParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedApproveFolderParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedApproveFolderParam); final Serializable convertedRejectFolderParam = convertedParams.get(rejectFolderKey); assertTrue(convertedRejectFolderParam instanceof NodeRef); - assertEquals(STORE_REF_WORKSPACE_SPACESSTORE, ((NodeRef) convertedRejectFolderParam).getStoreRef()); - assertEquals(DUMMY_FOLDER_NODE_ID, ((NodeRef) convertedRejectFolderParam).getId()); + assertEquals(DUMMY_FOLDER_NODE, convertedRejectFolderParam); final Serializable convertedApproveMoveParam = convertedParams.get(approveMoveKey); assertTrue(convertedApproveMoveParam instanceof Boolean); assertTrue((Boolean) convertedApproveMoveParam); @@ -555,6 +571,44 @@ public class ActionParameterConverterTest assertEquals(propType, convertedPropTypeParam); } + @Test + public void testNonExistentNodeParam() + { + final String name = CopyActionExecuter.NAME; + final Map params = Map.of(PARAM_DESTINATION_FOLDER, "non://existent/node"); + + given(actionService.getActionDefinition(name)).willReturn(actionDefinition); + given(actionDefinition.getParameterDefintion(PARAM_DESTINATION_FOLDER)).willReturn(actionDefinitionParam1); + final QName nodeRef = DataTypeDefinition.NODE_REF; + given(actionDefinitionParam1.getType()).willReturn(nodeRef); + + given(dictionaryService.getDataType(nodeRef)).willReturn(dataTypeDefinition1); + + //when + assertThatExceptionOfType(EntityNotFoundException.class).isThrownBy(() -> objectUnderTest.getConvertedParams(params, name)); + } + + @Test + public void testNoReadPermissionForNodeParam() + { + final String name = CopyActionExecuter.NAME; + String permissionDeniedNodeId = "permission://denied/node"; + final Map params = Map.of(PARAM_DESTINATION_FOLDER, permissionDeniedNodeId); + NodeRef permissionDeniedNode = new NodeRef(permissionDeniedNodeId); + given(nodes.validateOrLookupNode(permissionDeniedNodeId, null)).willReturn(permissionDeniedNode); + given(permissionService.hasReadPermission(permissionDeniedNode)).willReturn(DENIED); + + given(actionService.getActionDefinition(name)).willReturn(actionDefinition); + given(actionDefinition.getParameterDefintion(PARAM_DESTINATION_FOLDER)).willReturn(actionDefinitionParam1); + final QName nodeRef = DataTypeDefinition.NODE_REF; + given(actionDefinitionParam1.getType()).willReturn(nodeRef); + + given(dictionaryService.getDataType(nodeRef)).willReturn(dataTypeDefinition1); + + //when + assertThatExceptionOfType(EntityNotFoundException.class).isThrownBy(() -> objectUnderTest.getConvertedParams(params, name)); + } + @Test public void testInvalidActionDefinitionConversion() { final String invalidName = "dummy-definition";