diff --git a/source/java/org/alfresco/repo/web/scripts/WebScriptTestSuite.java b/source/java/org/alfresco/repo/web/scripts/WebScriptTestSuite.java index 0b1f832f2e..882e8ae09d 100644 --- a/source/java/org/alfresco/repo/web/scripts/WebScriptTestSuite.java +++ b/source/java/org/alfresco/repo/web/scripts/WebScriptTestSuite.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2010 Alfresco Software Limited. + * Copyright (C) 2005-2012 Alfresco Software Limited. * * This file is part of Alfresco * @@ -35,6 +35,7 @@ import org.alfresco.repo.web.scripts.invitation.InvitationWebScriptTest; import org.alfresco.repo.web.scripts.invite.InviteServiceTest; import org.alfresco.repo.web.scripts.person.PersonServiceTest; import org.alfresco.repo.web.scripts.preference.PreferenceServiceTest; +import org.alfresco.repo.web.scripts.quickshare.QuickShareRestApiTest; import org.alfresco.repo.web.scripts.rating.RatingRestApiTest; import org.alfresco.repo.web.scripts.replication.ReplicationRestApiTest; import org.alfresco.repo.web.scripts.rule.RuleServiceTest; @@ -49,7 +50,6 @@ import org.alfresco.repo.web.scripts.wcm.sandbox.SandboxTest; import org.alfresco.repo.web.scripts.workflow.ActivitiWorkflowRestApiTest; import org.alfresco.repo.web.scripts.workflow.JBPMWorkflowRestApiTest; import org.alfresco.repo.web.scripts.workflow.WorkflowModelBuilderTest; -import org.alfresco.repo.web.scripts.workflow.AbstractWorkflowRestApiTest; /** * Web Scripts test suite @@ -59,11 +59,12 @@ public class WebScriptTestSuite extends TestSuite public static Test suite() { TestSuite suite = new TestSuite(); - + // Ensure that a suitable context is available TestWebScriptRepoServer.getTestServer(); // Add the tests + suite.addTestSuite( QuickShareRestApiTest.class ); suite.addTestSuite( AdminWebScriptTest.class ); suite.addTestSuite( AuditWebScriptTest.class ); suite.addTestSuite( BlogServiceTest.class ); @@ -94,7 +95,7 @@ public class WebScriptTestSuite extends TestSuite suite.addTestSuite( WorkflowModelBuilderTest.class ); suite.addTestSuite( ActivitiWorkflowRestApiTest.class ); suite.addTestSuite( JBPMWorkflowRestApiTest.class ); - + // This uses a slightly different context // As such, we can't run it in the same suite as the others, // due to finalisers closing caches when we're not looking @@ -102,4 +103,4 @@ public class WebScriptTestSuite extends TestSuite return suite; } -} +} diff --git a/source/java/org/alfresco/repo/web/scripts/quickshare/QuickShareRestApiTest.java b/source/java/org/alfresco/repo/web/scripts/quickshare/QuickShareRestApiTest.java index 197fb5d937..2785e6ce66 100644 --- a/source/java/org/alfresco/repo/web/scripts/quickshare/QuickShareRestApiTest.java +++ b/source/java/org/alfresco/repo/web/scripts/quickshare/QuickShareRestApiTest.java @@ -18,12 +18,17 @@ */ package org.alfresco.repo.web.scripts.quickshare; +import java.io.File; +import java.io.FileInputStream; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.content.transform.AbstractContentTransformerTest; +import org.alfresco.repo.content.transform.ContentTransformer; +import org.alfresco.repo.content.transform.magick.ImageTransformationOptions; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -50,12 +55,14 @@ import org.springframework.extensions.webscripts.TestWebScriptServer.Response; * This class tests QuickShare REST API * * @author janv - * @since Cloud/4.1 + * @since Cloud/4.2 */ public class QuickShareRestApiTest extends BaseWebScriptTest { - private static final String USER_ONE = "UserOne"; - private static final String USER_TWO = "UserTwo"; + private static final String RUN_ID = ""+System.currentTimeMillis(); + + private static final String USER_ONE = "UserOne-"+RUN_ID; + private static final String USER_TWO = "UserTwo-"+RUN_ID; private final static String SHARE_URL = "/api/internal/shared/share/{node_ref_3}"; @@ -73,9 +80,9 @@ public class QuickShareRestApiTest extends BaseWebScriptTest private NodeRef testNode; private final static String TEST_NAME = "test node"; - private final static String TEST_CONTENT = "test content"; - private final static String TEST_MIMETYPE_TEXT_PLAIN = MimetypeMap.MIMETYPE_TEXT_PLAIN; - private final static String TEST_MIMETYPE_IMAGE_PNG = MimetypeMap.MIMETYPE_IMAGE_PNG; + private static byte[] TEST_CONTENT = null; + private final static String TEST_MIMETYPE_JPEG = MimetypeMap.MIMETYPE_IMAGE_JPEG; + private final static String TEST_MIMETYPE_PNG = MimetypeMap.MIMETYPE_IMAGE_PNG; private MutableAuthenticationService authenticationService; private NodeService nodeService; @@ -108,6 +115,14 @@ public class QuickShareRestApiTest extends BaseWebScriptTest { public NodeRef execute() throws Throwable { + // no pun intended + File quickFile = AbstractContentTransformerTest.loadQuickTestFile("jpg"); + + + TEST_CONTENT = new byte[new Long(quickFile.length()).intValue()]; + + new FileInputStream(quickFile).read(TEST_CONTENT); + Map props = new HashMap(1); props.put(ContentModel.PROP_NAME, TEST_NAME); ChildAssociationRef result = nodeService.createNode(repositoryHelper.getUserHome(personService.getPerson(USER_ONE)), @@ -116,8 +131,8 @@ public class QuickShareRestApiTest extends BaseWebScriptTest NodeRef nodeRef = result.getChildRef(); ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); - writer.setMimetype(TEST_MIMETYPE_TEXT_PLAIN); - writer.putContent(TEST_CONTENT); + writer.setMimetype(TEST_MIMETYPE_JPEG); + writer.putContent(quickFile); return nodeRef; } @@ -154,8 +169,34 @@ public class QuickShareRestApiTest extends BaseWebScriptTest deleteUser(USER_TWO); } + private void checkTransformer() + { + ContentTransformer transformer = this.contentService.getImageTransformer(); + assertNotNull("No transformer returned for 'getImageTransformer'", transformer); + + // Check that it is working + ImageTransformationOptions imageTransformationOptions = new ImageTransformationOptions(); + if (!transformer.isTransformable(MimetypeMap.MIMETYPE_IMAGE_JPEG, -1, MimetypeMap.MIMETYPE_IMAGE_PNG, + imageTransformationOptions)) + { + fail("Image transformer is not working. Please check your image conversion command setup."); + } + } + + private void checkBytes(byte[] content1, byte[] content2) + { + assertEquals(content1.length, content2.length); + + for (int i = 0; i < content1.length; i++) + { + assertEquals(content1[i], content2[i]); + } + } + public void testSanityCheckUrls() throws Exception { + checkTransformer(); + final int expectedStatusOK = 200; final int expectedStatusNotFound = 404; final int expectedStatusServerError = 500; // currently mapped from AccessDenied (should it be 403, 404 or does it depend on use-case) @@ -170,17 +211,17 @@ public class QuickShareRestApiTest extends BaseWebScriptTest String name = jsonRsp.getString("name"); assertEquals(TEST_NAME, name); String mimetype = jsonRsp.getString("mimetype"); - assertEquals(TEST_MIMETYPE_TEXT_PLAIN, mimetype); + assertEquals(TEST_MIMETYPE_JPEG, mimetype); // get content for node (authenticated) rsp = sendRequest(new GetRequest(AUTH_CONTENT_URL.replace("{node_ref_3}", testNodeRef_3)), expectedStatusOK, USER_ONE); - String content = rsp.getContentAsString(); - assertEquals(TEST_CONTENT, content); + byte[] content = rsp.getContentAsByteArray(); + checkBytes(TEST_CONTENT, content); // get content thumbnail for node (authenticated) rsp = sendRequest(new GetRequest(AUTH_CONTENT_THUMBNAIL_URL.replace("{node_ref_3}", testNodeRef_3).replace("{thumbnailname}", "doclib")), expectedStatusOK, USER_ONE); String type = rsp.getContentType(); - assertEquals(TEST_MIMETYPE_IMAGE_PNG, type); + assertEquals(TEST_MIMETYPE_PNG, type); // As user two ... @@ -205,17 +246,17 @@ public class QuickShareRestApiTest extends BaseWebScriptTest name = jsonRsp.getString("name"); assertEquals(TEST_NAME, name); mimetype = jsonRsp.getString("mimetype"); - assertEquals(TEST_MIMETYPE_TEXT_PLAIN, mimetype); + assertEquals(TEST_MIMETYPE_JPEG, mimetype); // get content for share (note: can be unauthenticated) rsp = sendRequest(new GetRequest(SHARE_CONTENT_URL.replace("{shared_id}", sharedId)), expectedStatusOK, USER_TWO); - content = rsp.getContentAsString(); - assertEquals(TEST_CONTENT, content); + content = rsp.getContentAsByteArray(); + checkBytes(TEST_CONTENT, content); // get content thumbnail for share (note: can be unauthenticated) rsp = sendRequest(new GetRequest(SHARE_CONTENT_THUMBNAIL_URL.replace("{shared_id}", sharedId).replace("{thumbnailname}", "doclib")), expectedStatusOK, USER_TWO); type = rsp.getContentType(); - assertEquals(TEST_MIMETYPE_IMAGE_PNG, type); + assertEquals(TEST_MIMETYPE_PNG, type); // As user one ... diff --git a/source/java/org/alfresco/repo/web/scripts/quickshare/UnshareContentDelete.java b/source/java/org/alfresco/repo/web/scripts/quickshare/UnshareContentDelete.java index be0b5fbbd4..8f0f7316fd 100644 --- a/source/java/org/alfresco/repo/web/scripts/quickshare/UnshareContentDelete.java +++ b/source/java/org/alfresco/repo/web/scripts/quickshare/UnshareContentDelete.java @@ -143,16 +143,26 @@ public class UnshareContentDelete extends AbstractQuickShareContent implements N // behaviour - currently registered for content only !! // note: will remove "share" even if node is only being archived (ie. moved to trash) => a subsequent restore will *not* restore the "share" - public void beforeDeleteNode(final NodeRef nodeRef) + public void beforeDeleteNode(final NodeRef beforeDeleteNodeRef) { AuthenticationUtil.runAsSystem(new RunAsWork() { public Void doWork() throws Exception { - String sharedId = (String)nodeService.getProperty(nodeRef, QuickShareModel.PROP_QSHARE_SHAREDID); + String sharedId = (String)nodeService.getProperty(beforeDeleteNodeRef, QuickShareModel.PROP_QSHARE_SHAREDID); if (sharedId != null) { - removeSharedId(sharedId); + Pair pair = getTenantNodeRefFromSharedId(attributeService, tenantService, sharedId); + + @SuppressWarnings("unused") + final String tenantDomain = pair.getFirst(); + final NodeRef nodeRef = pair.getSecond(); + + // note: deleted nodeRef might not match, eg. for upload new version -> checkin -> delete working copy + if (nodeRef.equals(beforeDeleteNodeRef)) + { + removeSharedId(sharedId); + } } return null; }