org.flowable.content.rest.service.api.content.ContentItemCollectionResourceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.flowable.content.rest.service.api.content.ContentItemCollectionResourceTest.java

Source

/* 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.
 */
package org.flowable.content.rest.service.api.content;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.flowable.content.api.ContentItem;
import org.flowable.content.rest.ContentRestUrls;
import org.flowable.content.rest.service.api.BaseSpringContentRestTestCase;
import org.flowable.content.rest.service.api.HttpMultipartHelper;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * @author Tijs Rademakers
 */
public class ContentItemCollectionResourceTest extends BaseSpringContentRestTestCase {

    public void testCreateContentItem() throws Exception {
        ContentItem urlContentItem = null;
        try {
            ObjectNode requestNode = objectMapper.createObjectNode();
            requestNode.put("name", "Simple content item");
            requestNode.put("mimeType", "application/pdf");
            requestNode.put("taskId", "12345");
            requestNode.put("processInstanceId", "123456");
            requestNode.put("contentStoreId", "id");
            requestNode.put("contentStoreName", "testStore");
            requestNode.put("createdBy", "testa");
            requestNode.put("lastModifiedBy", "testb");

            HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX
                    + ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION));
            httpPost.setEntity(new StringEntity(requestNode.toString()));
            CloseableHttpResponse response = executeRequest(httpPost, HttpStatus.SC_CREATED);

            // Check if content item is created
            List<ContentItem> contentItems = contentService.createContentItemQuery().list();
            assertEquals(1, contentItems.size());

            urlContentItem = contentItems.get(0);

            JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent());
            closeResponse(response);
            assertEquals(urlContentItem.getId(), responseNode.get("id").asText());
            assertEquals("Simple content item", responseNode.get("name").asText());
            assertEquals("application/pdf", responseNode.get("mimeType").asText());
            assertEquals("12345", responseNode.get("taskId").asText());
            assertEquals("123456", responseNode.get("processInstanceId").asText());
            assertEquals("id", responseNode.get("contentStoreId").asText());
            assertEquals("testStore", responseNode.get("contentStoreName").asText());
            assertFalse(responseNode.get("contentAvailable").asBoolean());
            assertEquals("testa", responseNode.get("createdBy").asText());
            assertEquals("testb", responseNode.get("lastModifiedBy").asText());
            assertEquals(urlContentItem.getCreated(), getDateFromISOString(responseNode.get("created").asText()));
            assertEquals(urlContentItem.getLastModified(),
                    getDateFromISOString(responseNode.get("lastModified").asText()));
            assertTrue(responseNode.get("url").textValue().endsWith(ContentRestUrls
                    .createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM, urlContentItem.getId())));

        } finally {
            if (urlContentItem != null) {
                contentService.deleteContentItem(urlContentItem.getId());
            }
        }
    }

    public void testCreateContentItemWithContent() throws Exception {
        ContentItem urlContentItem = null;
        try {
            InputStream binaryContent = new ByteArrayInputStream("This is binary content".getBytes());

            // Add name, type and scope
            Map<String, String> additionalFields = new HashMap<>();
            additionalFields.put("name", "Simple content item");
            additionalFields.put("mimeType", "application/pdf");
            additionalFields.put("taskId", "12345");
            additionalFields.put("processInstanceId", "123456");
            additionalFields.put("createdBy", "testa");
            additionalFields.put("lastModifiedBy", "testb");

            HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX
                    + ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION));
            httpPost.setEntity(HttpMultipartHelper.getMultiPartEntity("value", "application/octet-stream",
                    binaryContent, additionalFields));
            CloseableHttpResponse response = executeBinaryRequest(httpPost, HttpStatus.SC_CREATED);

            // Check if content item is created
            List<ContentItem> contentItems = contentService.createContentItemQuery().list();
            assertEquals(1, contentItems.size());

            urlContentItem = contentItems.get(0);

            assertEquals("This is binary content",
                    IOUtils.toString(contentService.getContentItemData(urlContentItem.getId())));

            JsonNode responseNode = objectMapper.readTree(response.getEntity().getContent());
            closeResponse(response);
            assertEquals(urlContentItem.getId(), responseNode.get("id").asText());
            assertEquals("Simple content item", responseNode.get("name").asText());
            assertEquals("application/pdf", responseNode.get("mimeType").asText());
            assertEquals("12345", responseNode.get("taskId").asText());
            assertEquals("123456", responseNode.get("processInstanceId").asText());
            assertEquals(urlContentItem.getContentStoreId(), responseNode.get("contentStoreId").asText());
            assertEquals("file", responseNode.get("contentStoreName").asText());
            assertTrue(responseNode.get("contentAvailable").asBoolean());
            assertEquals("testa", responseNode.get("createdBy").asText());
            assertEquals("testb", responseNode.get("lastModifiedBy").asText());
            assertEquals(urlContentItem.getCreated(), getDateFromISOString(responseNode.get("created").asText()));
            assertEquals(urlContentItem.getLastModified(),
                    getDateFromISOString(responseNode.get("lastModified").asText()));
            assertTrue(responseNode.get("url").textValue().endsWith(ContentRestUrls
                    .createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM, urlContentItem.getId())));

        } finally {
            if (urlContentItem != null) {
                contentService.deleteContentItem(urlContentItem.getId());
            }
        }
    }

    public void testCreateContentItemNoName() throws Exception {
        ObjectNode requestNode = objectMapper.createObjectNode();
        requestNode.put("mimeType", "application/pdf");

        // Post JSON without name
        HttpPost httpPost = new HttpPost(SERVER_URL_PREFIX
                + ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION));
        httpPost.setEntity(new StringEntity(requestNode.toString()));
        closeResponse(executeRequest(httpPost, HttpStatus.SC_BAD_REQUEST));
    }

    public void testGetContentItems() throws Exception {
        try {
            Calendar contentItemCreateCal = Calendar.getInstance();
            contentItemCreateCal.set(Calendar.MILLISECOND, 0);

            Calendar contentItem2CreateCal = Calendar.getInstance();
            contentItem2CreateCal.add(Calendar.HOUR, 2);
            contentItem2CreateCal.set(Calendar.MILLISECOND, 0);

            Calendar inBetweenCreateCal = Calendar.getInstance();
            inBetweenCreateCal.add(Calendar.HOUR, 1);

            contentEngineConfiguration.getClock().setCurrentTime(contentItemCreateCal.getTime());
            ContentItem contentItem = contentService.newContentItem();
            contentItem.setName("one.pdf");
            contentItem.setMimeType("application/pdf");
            contentItem.setTaskId("task1");
            contentItem.setProcessInstanceId("process1");
            contentItem.setContentStoreId("value1");
            contentItem.setContentStoreName("store1");
            contentItem.setField("name");
            contentItem.setCreatedBy("test1");
            contentItem.setLastModifiedBy("test1");
            contentItem.setTenantId("tenant1");

            contentService.saveContentItem(contentItem);

            contentEngineConfiguration.getClock().setCurrentTime(contentItem2CreateCal.getTime());
            ContentItem contentItem2 = contentService.newContentItem();
            contentItem2.setName("two.pdf");
            contentItem2.setMimeType("application/text");
            contentItem2.setTaskId("task1");
            contentItem2.setField("name2");
            contentItem2.setCreatedBy("test1");
            contentItem2.setLastModifiedBy("test3");

            contentService.saveContentItem(contentItem2,
                    this.getClass().getClassLoader().getResourceAsStream("test.txt"));
            long contentItem2Size = contentItem2.getContentSize();

            String url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION);
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Name filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?name=one.pdf";
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Name like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?nameLike=" + encode("%.pdf");
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Mime type filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?mimeType=" + encode("application/pdf");
            assertResultsPresentInDataResponse(url, contentItem.getId());

            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?mimeType=" + encode("nonexisting");
            assertEmptyResultsPresentInDataResponse(url);

            // Mime type like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?mimeTypeLike=" + encode("%pdf");
            assertResultsPresentInDataResponse(url, contentItem.getId());

            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?mimeTypeLike=" + encode("%nonexisting");
            assertEmptyResultsPresentInDataResponse(url);

            // Task id filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?taskId=task1";
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Task id like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?taskIdLike=" + encode("task%");
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Process instance id filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?processInstanceId=process1";
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Process instance id like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?processInstanceIdLike=" + encode("process%");
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Content store id filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?contentStoreId=value1";
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Content store id like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?contentStoreIdLike=" + encode("value%");
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Content store name filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?contentStoreName=file";
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Content store name like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?contentStoreNameLike=" + encode("fi%");
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Content size filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?contentSize=" + contentItem2Size;
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Minimum content size filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?minimumContentSize=1";
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Maximum content size filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?maximumContentSize=999999";
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Field filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?field=name";
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Field like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?fieldLike=" + encode("name%");
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // CreatedOn filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?createdOn=" + getISODateString(contentItemCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // CreatedAfter filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?createdAfter=" + getISODateString(inBetweenCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // CreatedBefore filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?createdBefore=" + getISODateString(inBetweenCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Created by filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?createdBy=test1";
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Created by like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?createdByLike=" + encode("test%");
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // LastModifiedOn filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?lastModifiedOn=" + getISODateString(contentItemCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // LastModifiedAfter filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?lastModifiedAfter=" + getISODateString(inBetweenCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // LastModifiedBefore filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?lastModifiedBefore=" + getISODateString(inBetweenCreateCal.getTime());
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // LastModified by filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?lastModifiedBy=test3";
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // LastModified by like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?lastModifiedByLike=" + encode("test%");
            assertResultsPresentInDataResponse(url, contentItem.getId(), contentItem2.getId());

            // Without tenantId filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?withoutTenantId=true";
            assertResultsPresentInDataResponse(url, contentItem2.getId());

            // Tenant id filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?tenantId=tenant1";
            assertResultsPresentInDataResponse(url, contentItem.getId());

            // Tenant id like filtering
            url = ContentRestUrls.createRelativeResourceUrl(ContentRestUrls.URL_CONTENT_ITEM_COLLECTION)
                    + "?tenantIdLike=" + encode("%enant1");
            assertResultsPresentInDataResponse(url, contentItem.getId());

        } finally {
            // Clean content items even if test fails
            List<ContentItem> contentItems = contentService.createContentItemQuery().list();
            for (ContentItem contentItem : contentItems) {
                contentService.deleteContentItem(contentItem.getId());
            }
        }
    }
}