mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	Compare commits
	
		
			28 Commits
		
	
	
		
			25.3.0.14
			...
			fix/APPS-3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d1cb0f98c6 | ||
| 
						 | 
					9877b8a9f1 | ||
| 
						 | 
					ac74222562 | ||
| 
						 | 
					6b959f8901 | ||
| 
						 | 
					1fac054c08 | ||
| 
						 | 
					eaf18d3b9d | ||
| 
						 | 
					05195d84e7 | ||
| 
						 | 
					2e2b41f879 | ||
| 
						 | 
					cf0463a24d | ||
| 
						 | 
					ed80663a07 | ||
| 
						 | 
					31343c5177 | ||
| 
						 | 
					f3492d16cf | ||
| 
						 | 
					5fb5e19434 | ||
| 
						 | 
					49d346a5c4 | ||
| 
						 | 
					ae699b37d0 | ||
| 
						 | 
					cc078037f7 | ||
| 
						 | 
					9b7eb95463 | ||
| 
						 | 
					5e560213bb | ||
| 
						 | 
					a1d8aa7b48 | ||
| 
						 | 
					b7e1daaac9 | ||
| 
						 | 
					d70295a8de | ||
| 
						 | 
					082770d73d | ||
| 
						 | 
					2f81d382fd | ||
| 
						 | 
					70438d4a51 | ||
| 
						 | 
					91aaee9f78 | ||
| 
						 | 
					d46162de7a | ||
| 
						 | 
					ba0c9e471a | ||
| 
						 | 
					40deb11173 | 
@@ -2,7 +2,7 @@
 | 
			
		||||
 * #%L
 | 
			
		||||
 * Alfresco Remote API
 | 
			
		||||
 * %%
 | 
			
		||||
 * Copyright (C) 2005 - 2020 Alfresco Software Limited
 | 
			
		||||
 * Copyright (C) 2005 - 2025 Alfresco Software Limited
 | 
			
		||||
 * %%
 | 
			
		||||
 * This file is part of the Alfresco software. 
 | 
			
		||||
 * If the software was purchased under a paid Alfresco license, the terms of 
 | 
			
		||||
@@ -26,17 +26,38 @@
 | 
			
		||||
 | 
			
		||||
package org.alfresco.rest.api.tests;
 | 
			
		||||
 | 
			
		||||
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsString;
 | 
			
		||||
import static org.junit.Assert.assertEquals;
 | 
			
		||||
import static org.junit.Assert.assertFalse;
 | 
			
		||||
import static org.junit.Assert.assertNotEquals;
 | 
			
		||||
import static org.junit.Assert.assertNotNull;
 | 
			
		||||
import static org.junit.Assert.assertNull;
 | 
			
		||||
import static org.junit.Assert.assertTrue;
 | 
			
		||||
 | 
			
		||||
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsString;
 | 
			
		||||
 | 
			
		||||
import java.io.ByteArrayInputStream;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
import com.google.common.collect.Ordering;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import org.alfresco.model.ContentModel;
 | 
			
		||||
import org.alfresco.repo.content.MimetypeMap;
 | 
			
		||||
import org.alfresco.repo.content.transform.swf.SWFTransformationOptions;
 | 
			
		||||
import org.alfresco.repo.rendition2.RenditionService2Impl;
 | 
			
		||||
import org.alfresco.repo.rendition2.SynchronousTransformClient;
 | 
			
		||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
 | 
			
		||||
import org.alfresco.repo.transaction.RetryingTransactionHelper;
 | 
			
		||||
import org.alfresco.rest.api.model.Site;
 | 
			
		||||
import org.alfresco.rest.api.nodes.NodesEntityResource;
 | 
			
		||||
import org.alfresco.rest.api.tests.RepoService.TestNetwork;
 | 
			
		||||
@@ -54,23 +75,11 @@ import org.alfresco.rest.api.tests.util.MultiPartBuilder.FileData;
 | 
			
		||||
import org.alfresco.rest.api.tests.util.MultiPartBuilder.MultiPartRequest;
 | 
			
		||||
import org.alfresco.rest.api.tests.util.RestApiUtil;
 | 
			
		||||
import org.alfresco.service.cmr.repository.ContentService;
 | 
			
		||||
import org.alfresco.service.cmr.repository.NodeRef;
 | 
			
		||||
import org.alfresco.service.cmr.repository.StoreRef;
 | 
			
		||||
import org.alfresco.service.cmr.site.SiteVisibility;
 | 
			
		||||
import org.alfresco.service.cmr.thumbnail.ThumbnailService;
 | 
			
		||||
import org.alfresco.util.TempFileProvider;
 | 
			
		||||
import org.junit.After;
 | 
			
		||||
import org.junit.Before;
 | 
			
		||||
import org.junit.Test;
 | 
			
		||||
 | 
			
		||||
import java.io.ByteArrayInputStream;
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.InputStream;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * V1 REST API tests for Renditions
 | 
			
		||||
@@ -93,17 +102,20 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
     * Private site of user one from network one
 | 
			
		||||
     */
 | 
			
		||||
    private Site userOneN1Site;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    private final static long DELAY_IN_MS = 500;
 | 
			
		||||
 | 
			
		||||
    protected static ContentService contentService;
 | 
			
		||||
    private static SynchronousTransformClient synchronousTransformClient;
 | 
			
		||||
    private RetryingTransactionHelper transactionHelper;
 | 
			
		||||
 | 
			
		||||
    @Before
 | 
			
		||||
    public void setup() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        contentService = applicationContext.getBean("contentService", ContentService.class);
 | 
			
		||||
        synchronousTransformClient = applicationContext.getBean("synchronousTransformClient", SynchronousTransformClient.class);
 | 
			
		||||
        transactionHelper = (RetryingTransactionHelper) this.applicationContext
 | 
			
		||||
                .getBean("retryingTransactionHelper");
 | 
			
		||||
        networkN1 = repoService.createNetworkWithAlias("ping", true);
 | 
			
		||||
        networkN1.create();
 | 
			
		||||
        userOneN1 = networkN1.createUser();
 | 
			
		||||
@@ -123,14 +135,16 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tests get node renditions.
 | 
			
		||||
     * <p>GET:</p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * GET:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testListNodeRenditions() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Create a folder within the site document's library
 | 
			
		||||
        String folderName = "folder" + System.currentTimeMillis();
 | 
			
		||||
        String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId());
 | 
			
		||||
@@ -263,14 +277,16 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tests get node rendition.
 | 
			
		||||
     * <p>GET:</p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * GET:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions/<renditionId>}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testGetNodeRendition() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Create a folder within the site document's library
 | 
			
		||||
        String folderName = "folder" + System.currentTimeMillis();
 | 
			
		||||
        String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId());
 | 
			
		||||
@@ -331,8 +347,8 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        String jpgFileName = "quick.jpg";
 | 
			
		||||
        File jpgFile = getResourceFile(fileName);
 | 
			
		||||
        reqBody = MultiPartBuilder.create()
 | 
			
		||||
                    .setFileData(new FileData(jpgFileName, jpgFile))
 | 
			
		||||
                    .build();
 | 
			
		||||
                .setFileData(new FileData(jpgFileName, jpgFile))
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
        // Upload quick.jpg file into 'folder'
 | 
			
		||||
        response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201);
 | 
			
		||||
@@ -352,14 +368,16 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tests create rendition.
 | 
			
		||||
     * <p>POST:</p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * POST:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testCreateRendition() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Create a folder within the site document's library
 | 
			
		||||
        String folderName = "folder" + System.currentTimeMillis();
 | 
			
		||||
        String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId());
 | 
			
		||||
@@ -411,24 +429,24 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
        if (areLocalTransformsAvailable())
 | 
			
		||||
        {
 | 
			
		||||
        // Create a node without any content
 | 
			
		||||
        String emptyContentNodeId = addToDocumentLibrary(userOneN1Site, "emptyDoc.txt", TYPE_CM_CONTENT, userOneN1.getId());
 | 
			
		||||
        post(getNodeRenditionsUrl(emptyContentNodeId), toJsonAsString(renditionRequest), 202);
 | 
			
		||||
            // Create a node without any content
 | 
			
		||||
            String emptyContentNodeId = addToDocumentLibrary(userOneN1Site, "emptyDoc.txt", TYPE_CM_CONTENT, userOneN1.getId());
 | 
			
		||||
            post(getNodeRenditionsUrl(emptyContentNodeId), toJsonAsString(renditionRequest), 202);
 | 
			
		||||
 | 
			
		||||
        // Rendition for binary content
 | 
			
		||||
        String content = "The quick brown fox jumps over the lazy dog.";
 | 
			
		||||
        file = TempFileProvider.createTempFile(new ByteArrayInputStream(content.getBytes()), getClass().getSimpleName(), ".bin");
 | 
			
		||||
        multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData("binaryFileName", file));
 | 
			
		||||
        reqBody = multiPartBuilder.build();
 | 
			
		||||
        response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201);
 | 
			
		||||
        Document binaryDocument = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
        post(getNodeRenditionsUrl(binaryDocument.getId()), toJsonAsString(renditionRequest), 202);
 | 
			
		||||
            // Rendition for binary content
 | 
			
		||||
            String content = "The quick brown fox jumps over the lazy dog.";
 | 
			
		||||
            file = TempFileProvider.createTempFile(new ByteArrayInputStream(content.getBytes()), getClass().getSimpleName(), ".bin");
 | 
			
		||||
            multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData("binaryFileName", file));
 | 
			
		||||
            reqBody = multiPartBuilder.build();
 | 
			
		||||
            response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201);
 | 
			
		||||
            Document binaryDocument = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
            post(getNodeRenditionsUrl(binaryDocument.getId()), toJsonAsString(renditionRequest), 202);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // -ve Tests
 | 
			
		||||
        //
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // The rendition requested already exists
 | 
			
		||||
        response = post(getNodeRenditionsUrl(contentNodeId), toJsonAsString(new Rendition().setId("imgpreview")), 409);
 | 
			
		||||
        ExpectedErrorResponse errorResponse = RestApiUtil.parseErrorResponse(response.getJsonResponse());
 | 
			
		||||
@@ -563,7 +581,9 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
    /**
 | 
			
		||||
     * Tests create rendition when on upload/create of a file
 | 
			
		||||
     *
 | 
			
		||||
     * <p>POST:</p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * POST:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/children}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
@@ -619,25 +639,11 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
            assertRenditionCreatedWithWait(contentNodeId, renditionName);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /* RA-834: commented-out since not currently applicable for empty file
 | 
			
		||||
        Document d1 = new Document();
 | 
			
		||||
        d1.setName("d1.txt");
 | 
			
		||||
        d1.setNodeType("cm:content");
 | 
			
		||||
        ContentInfo ci = new ContentInfo();
 | 
			
		||||
        ci.setMimeType(MimetypeMap.MIMETYPE_TEXT_PLAIN);
 | 
			
		||||
        d1.setContent(ci);
 | 
			
		||||
 | 
			
		||||
        // create empty file including request to generate a thumbnail
 | 
			
		||||
        renditionName = "doclib";
 | 
			
		||||
        response = post(getNodeChildrenUrl(folder_Id), userId, toJsonAsStringNonNull(d1), "?renditions="+renditionName, 201);
 | 
			
		||||
        Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
        String d1Id = documentResp.getId();
 | 
			
		||||
 | 
			
		||||
        // wait and check that rendition is created ...
 | 
			
		||||
        rendition = waitAndGetRendition(userId, d1Id, renditionName);
 | 
			
		||||
        assertNotNull(rendition);
 | 
			
		||||
        assertEquals(RenditionStatus.CREATED, rendition.getStatus());
 | 
			
		||||
        */
 | 
			
		||||
        /* RA-834: commented-out since not currently applicable for empty file Document d1 = new Document(); d1.setName("d1.txt"); d1.setNodeType("cm:content"); ContentInfo ci = new ContentInfo(); ci.setMimeType(MimetypeMap.MIMETYPE_TEXT_PLAIN); d1.setContent(ci);
 | 
			
		||||
         * 
 | 
			
		||||
         * // create empty file including request to generate a thumbnail renditionName = "doclib"; response = post(getNodeChildrenUrl(folder_Id), userId, toJsonAsStringNonNull(d1), "?renditions="+renditionName, 201); Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); String d1Id = documentResp.getId();
 | 
			
		||||
         * 
 | 
			
		||||
         * // wait and check that rendition is created ... rendition = waitAndGetRendition(userId, d1Id, renditionName); assertNotNull(rendition); assertEquals(RenditionStatus.CREATED, rendition.getStatus()); */
 | 
			
		||||
 | 
			
		||||
        // Multiple renditions requested
 | 
			
		||||
        reqBody = MultiPartBuilder.create()
 | 
			
		||||
@@ -694,9 +700,9 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
    public void testCreateRenditionForNewVersion() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        String PROP_LTM = "cm:lastThumbnailModification";
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        String RENDITION_NAME = "imgpreview";
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        String userId = userOneN1.getId();
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
 | 
			
		||||
@@ -718,7 +724,7 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        String contentNodeId = document1.getId();
 | 
			
		||||
        assertNotNull(document1.getProperties());
 | 
			
		||||
        assertNull(document1.getProperties().get(PROP_LTM));
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // pause briefly
 | 
			
		||||
        Thread.sleep(DELAY_IN_MS);
 | 
			
		||||
 | 
			
		||||
@@ -730,8 +736,8 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
        params = new HashMap<>();
 | 
			
		||||
        params.put("placeholder", "false");
 | 
			
		||||
        getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME+"/content"), params, 404);
 | 
			
		||||
        
 | 
			
		||||
        getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 404);
 | 
			
		||||
 | 
			
		||||
        // TODO add test to request creation of rendition as another user (that has read-only access on the content, not write)
 | 
			
		||||
 | 
			
		||||
        // Create and get 'imgpreview' rendition
 | 
			
		||||
@@ -747,24 +753,24 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
        params = new HashMap<>();
 | 
			
		||||
        params.put("placeholder", "false");
 | 
			
		||||
        response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME+"/content"), params, 200);
 | 
			
		||||
        
 | 
			
		||||
        response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 200);
 | 
			
		||||
 | 
			
		||||
        byte[] renditionBytes1 = response.getResponseAsBytes();
 | 
			
		||||
        assertNotNull(renditionBytes1);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // check node details ...
 | 
			
		||||
        params = Collections.singletonMap("include", "properties");
 | 
			
		||||
        response = getSingle(NodesEntityResource.class, contentNodeId, params, 200);
 | 
			
		||||
        Document document1b = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
        
 | 
			
		||||
//        assertEquals(document1b.getModifiedAt(), document1.getModifiedAt());
 | 
			
		||||
 | 
			
		||||
        // assertEquals(document1b.getModifiedAt(), document1.getModifiedAt());
 | 
			
		||||
        assertEquals(document1b.getModifiedByUser().getId(), document1.getModifiedByUser().getId());
 | 
			
		||||
        assertEquals(document1b.getModifiedByUser().getDisplayName(), document1.getModifiedByUser().getDisplayName());
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        assertNotEquals(document1b.getProperties().get(PROP_LTM), document1.getProperties().get(PROP_LTM));
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // upload another version of "quick.pdf" and check again
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        fileName = "quick-2.pdf";
 | 
			
		||||
        file = getResourceFile(fileName);
 | 
			
		||||
        reqBody = MultiPartBuilder.create()
 | 
			
		||||
@@ -781,9 +787,9 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
        params = new HashMap<>();
 | 
			
		||||
        params.put("placeholder", "false");
 | 
			
		||||
        response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME+"/content"), params, 200);
 | 
			
		||||
        response = getSingle(getNodeRenditionsUrl(contentNodeId), (RENDITION_NAME + "/content"), params, 200);
 | 
			
		||||
        assertNotNull(response.getResponseAsBytes());
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // check rendition binary has changed
 | 
			
		||||
        assertNotEquals(renditionBytes1, response.getResponseAsBytes());
 | 
			
		||||
 | 
			
		||||
@@ -792,24 +798,26 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        response = getSingle(NodesEntityResource.class, contentNodeId, params, 200);
 | 
			
		||||
        Document document2b = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
 | 
			
		||||
//        assertTrue(document2b.getModifiedAt().after(document1.getModifiedAt()));
 | 
			
		||||
        // assertTrue(document2b.getModifiedAt().after(document1.getModifiedAt()));
 | 
			
		||||
        assertEquals(document2b.getModifiedByUser().getId(), document1.getModifiedByUser().getId());
 | 
			
		||||
        assertEquals(document2b.getModifiedByUser().getDisplayName(), document1.getModifiedByUser().getDisplayName());
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // check last thumbnail modification property has changed ! (REPO-1644)
 | 
			
		||||
        assertNotEquals(document2b.getProperties().get(PROP_LTM), document1b.getProperties().get(PROP_LTM));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Tests download rendition.
 | 
			
		||||
     * <p>GET:</p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * GET:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions/<renditionId>/content}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testDownloadRendition() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Create a folder within the site document's library
 | 
			
		||||
        String folderName = "folder" + System.currentTimeMillis();
 | 
			
		||||
        String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId());
 | 
			
		||||
@@ -818,7 +826,7 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        String fileName = "quick.pdf";
 | 
			
		||||
        File file = getResourceFile(fileName);
 | 
			
		||||
        MultiPartBuilder multiPartBuilder = MultiPartBuilder.create()
 | 
			
		||||
                    .setFileData(new FileData(fileName, file));
 | 
			
		||||
                .setFileData(new FileData(fileName, file));
 | 
			
		||||
        MultiPartRequest reqBody = multiPartBuilder.build();
 | 
			
		||||
 | 
			
		||||
        // Upload quick.pdf file into 'folder'
 | 
			
		||||
@@ -928,8 +936,8 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        // the old fileName and setting overwrite field to true
 | 
			
		||||
        file = getResourceFile("quick-2.pdf");
 | 
			
		||||
        multiPartBuilder = MultiPartBuilder.create()
 | 
			
		||||
                    .setFileData(new FileData(fileName, file))
 | 
			
		||||
                    .setOverwrite(true);
 | 
			
		||||
                .setFileData(new FileData(fileName, file))
 | 
			
		||||
                .setOverwrite(true);
 | 
			
		||||
        reqBody = multiPartBuilder.build();
 | 
			
		||||
 | 
			
		||||
        // Update quick.pdf
 | 
			
		||||
@@ -937,7 +945,7 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
 | 
			
		||||
        // The requested "If-Modified-Since" date is older than rendition modified date
 | 
			
		||||
        response = getSingleWithDelayRetry(getNodeRenditionsUrl(contentNodeId), "doclib/content", params, headers, MAX_RETRY,
 | 
			
		||||
                    PAUSE_TIME, 200);
 | 
			
		||||
                PAUSE_TIME, 200);
 | 
			
		||||
        assertNotNull(response);
 | 
			
		||||
        responseHeaders = response.getHeaders();
 | 
			
		||||
        assertNotNull(responseHeaders);
 | 
			
		||||
@@ -945,7 +953,7 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        assertNotNull(newLastModifiedHeader);
 | 
			
		||||
        assertNotEquals(lastModifiedHeader, newLastModifiedHeader);
 | 
			
		||||
 | 
			
		||||
        //-ve tests
 | 
			
		||||
        // -ve tests
 | 
			
		||||
        // nodeId in the path parameter does not represent a file
 | 
			
		||||
        getSingle(getNodeRenditionsUrl(folder_Id), "doclib/content", 400);
 | 
			
		||||
 | 
			
		||||
@@ -958,8 +966,8 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        InputStream inputStream = new ByteArrayInputStream("The quick brown fox jumps over the lazy dog".getBytes());
 | 
			
		||||
        file = TempFileProvider.createTempFile(inputStream, "RenditionsTest-", ".abcdef");
 | 
			
		||||
        reqBody = MultiPartBuilder.create()
 | 
			
		||||
                    .setFileData(new FileData(file.getName(), file))
 | 
			
		||||
                    .build();
 | 
			
		||||
                .setFileData(new FileData(file.getName(), file))
 | 
			
		||||
                .build();
 | 
			
		||||
        // Upload temp file into 'folder'
 | 
			
		||||
        response = post(getNodeChildrenUrl(folder_Id), reqBody.getBody(), null, reqBody.getContentType(), 201);
 | 
			
		||||
        document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
@@ -981,6 +989,72 @@ public class RenditionsTest extends AbstractBaseApiTest
 | 
			
		||||
        getSingle(getNodeRenditionsUrl(emptyContentNodeId), "doclib/content", params, 200);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Test recreation of rendition2 aspect.
 | 
			
		||||
     * <p>
 | 
			
		||||
     * POST:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * <p>
 | 
			
		||||
     * DELETE:
 | 
			
		||||
     * </p>
 | 
			
		||||
     * {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions} {@literal <host>:<port>/alfresco/api/<networkId>/public/alfresco/versions/1/nodes/<nodeId>/renditions/{renditionID}
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testRecreationOfRendition2() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        setRequestContext(networkN1.getId(), userOneN1.getId(), null);
 | 
			
		||||
 | 
			
		||||
        // Create a folder within the site document's library
 | 
			
		||||
        String folderName = "folder" + System.currentTimeMillis();
 | 
			
		||||
        String folderId = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId());
 | 
			
		||||
 | 
			
		||||
        // Create multipart request.
 | 
			
		||||
        String renditionName = "pdf";
 | 
			
		||||
        String fileName = "quick.pdf";
 | 
			
		||||
        File file = getResourceFile(fileName);
 | 
			
		||||
        MultiPartRequest reqBody = MultiPartBuilder.create()
 | 
			
		||||
                .setFileData(new FileData(fileName, file))
 | 
			
		||||
                .setRenditions(Collections.singletonList(renditionName))
 | 
			
		||||
                .build();
 | 
			
		||||
 | 
			
		||||
        // Upload quick.pdf file into 'folder'
 | 
			
		||||
        HttpResponse response = post(getNodeChildrenUrl(folderId), reqBody.getBody(), null, reqBody.getContentType(), 201);
 | 
			
		||||
        Document document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
 | 
			
		||||
        String contentNodeId = document.getId();
 | 
			
		||||
 | 
			
		||||
        // wait and check that rendition is created ...
 | 
			
		||||
        Rendition rendition = waitAndGetRendition(contentNodeId, null, renditionName);
 | 
			
		||||
        assertNotNull(rendition);
 | 
			
		||||
        assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus());
 | 
			
		||||
 | 
			
		||||
        Thread.sleep(DELAY_IN_MS);
 | 
			
		||||
 | 
			
		||||
        delete(getNodeRenditionIdUrl(contentNodeId, renditionName), null, null, null, null, 204);
 | 
			
		||||
        // retry to double-check deletion
 | 
			
		||||
        delete(getNodeRenditionIdUrl(contentNodeId, renditionName), null, null, null, null, 404);
 | 
			
		||||
 | 
			
		||||
        AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
 | 
			
		||||
 | 
			
		||||
        ThumbnailService thumbnailService = applicationContext.getBean("thumbnailService", ThumbnailService.class);
 | 
			
		||||
 | 
			
		||||
        SWFTransformationOptions swfTransformationOptions = new SWFTransformationOptions();
 | 
			
		||||
        swfTransformationOptions.setUse("pdf");
 | 
			
		||||
 | 
			
		||||
        NodeRef thumbNode = transactionHelper
 | 
			
		||||
                .doInTransaction(
 | 
			
		||||
                        () -> thumbnailService.createThumbnail(getFolderNodeRef(contentNodeId), ContentModel.PROP_CONTENT,
 | 
			
		||||
                                MimetypeMap.MIMETYPE_PDF, swfTransformationOptions, "pdf"));
 | 
			
		||||
 | 
			
		||||
        assertNotNull(thumbNode);
 | 
			
		||||
        assertNotEquals("Both, we are getting same rendition Id's", rendition.getId(), thumbNode.getId());
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private NodeRef getFolderNodeRef(String folderId)
 | 
			
		||||
    {
 | 
			
		||||
        return new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private String addToDocumentLibrary(Site testSite, String name, String nodeType, String userId) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        String parentId = getSiteContainerNodeId(testSite.getId(), "documentLibrary");
 | 
			
		||||
 
 | 
			
		||||
@@ -57,7 +57,7 @@ public class NodeSizeDetailsServiceImpl implements NodeSizeDetailsService, Initi
 | 
			
		||||
{
 | 
			
		||||
    private static final Logger LOG = LoggerFactory.getLogger(NodeSizeDetailsServiceImpl.class);
 | 
			
		||||
    private static final String FIELD_FACET = "content.size";
 | 
			
		||||
    private static final String FACET_QUERY = "{!afts}content.size:[0 TO " + Integer.MAX_VALUE + "]";
 | 
			
		||||
    private static final String FACET_QUERY = "{!afts key='extra large'}content.size:[0 TO " + Integer.MAX_VALUE + "]";
 | 
			
		||||
    private SearchService searchService;
 | 
			
		||||
    private SimpleCache<Serializable, NodeSizeDetails> simpleCache;
 | 
			
		||||
    private TransactionService transactionService;
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user