com.liferay.document.library.verify.test.DLServiceVerifyProcessTest.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.verify.test.DLServiceVerifyProcessTest.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.document.library.verify.test;

import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileEntryMetadata;
import com.liferay.document.library.kernel.model.DLFileEntryType;
import com.liferay.document.library.kernel.model.DLFileVersion;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.service.DLAppLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLAppServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFolderLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLTrashServiceUtil;
import com.liferay.dynamic.data.mapping.io.DDMFormXSDDeserializer;
import com.liferay.dynamic.data.mapping.kernel.DDMForm;
import com.liferay.dynamic.data.mapping.kernel.DDMFormField;
import com.liferay.dynamic.data.mapping.kernel.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.kernel.DDMFormValues;
import com.liferay.dynamic.data.mapping.kernel.UnlocalizedValue;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMFormTestUtil;
import com.liferay.dynamic.data.mapping.util.DDMBeanTranslatorUtil;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileShortcut;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.security.auth.PrincipalThreadLocal;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionThreadLocal;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun;
import com.liferay.portal.kernel.test.rule.Sync;
import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule;
import com.liferay.portal.kernel.test.util.GroupTestUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.test.util.ServiceContextTestUtil;
import com.liferay.portal.kernel.test.util.TestPropsValues;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.security.permission.SimplePermissionChecker;
import com.liferay.portal.test.randomizerbumpers.TikaSafeRandomizerBumper;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.verify.VerifyProcess;
import com.liferay.portal.verify.test.BaseVerifyProcessTestCase;
import com.liferay.registry.Filter;
import com.liferay.registry.Registry;
import com.liferay.registry.RegistryUtil;
import com.liferay.registry.ServiceTracker;

import java.io.ByteArrayInputStream;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

/**
 * @author Manuel de la Pea
 * @author Eudaldo Alonso
 * @author Sergio Gonzlez
 */
@RunWith(Arquillian.class)
@Sync
public class DLServiceVerifyProcessTest extends BaseVerifyProcessTestCase {

    @ClassRule
    @Rule
    public static final AggregateTestRule aggregateTestRule = new AggregateTestRule(
            new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE);

    @BeforeClass
    public static void setUpClass() {
        Registry registry = RegistryUtil.getRegistry();

        Filter filter = registry.getFilter("(&(objectClass=" + VerifyProcess.class.getName()
                + ")(verify.process.name=com.liferay.document.library.service))");

        _serviceTracker = registry.trackServices(filter);

        _serviceTracker.open();
    }

    @Before
    @Override
    public void setUp() throws Exception {
        super.setUp();

        setUpDDMFormXSDDeserializer();
        setUpPermissionThreadLocal();
        setUpPrincipalThreadLocal();

        _group = GroupTestUtil.addGroup();
    }

    @After
    @Override
    public void tearDown() throws Exception {
        super.tearDown();

        PermissionThreadLocal.setPermissionChecker(_originalPermissionChecker);

        PrincipalThreadLocal.setName(_originalName);
    }

    @Test
    public void testDeleteMismatchCompanyIdDLFileEntryMetadatas() throws Exception {

        DLFileEntry dlFileEntry = addDLFileEntry();

        DLFileEntryType dlFileEntryType = dlFileEntry.getDLFileEntryType();

        List<com.liferay.dynamic.data.mapping.kernel.DDMStructure> ddmStructures = dlFileEntryType
                .getDDMStructures();

        com.liferay.dynamic.data.mapping.kernel.DDMStructure ddmStructure = ddmStructures.get(0);

        DDMStructure modelDDMStructure = DDMStructureLocalServiceUtil
                .getDDMStructure(ddmStructure.getStructureId());

        modelDDMStructure.setCompanyId(12345);

        DDMStructureLocalServiceUtil.updateDDMStructure(modelDDMStructure);

        DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();

        DLFileEntryMetadata dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil
                .fetchFileEntryMetadata(modelDDMStructure.getStructureId(), dlFileVersion.getFileVersionId());

        Assert.assertNotNull(dlFileEntryMetadata);

        doVerify();

        dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil
                .fetchFileEntryMetadata(modelDDMStructure.getStructureId(), dlFileVersion.getFileVersionId());

        Assert.assertNull(dlFileEntryMetadata);
    }

    @Test
    public void testDeleteNoStructuresDLFileEntryMetadatas() throws Exception {
        DLFileEntry dlFileEntry = addDLFileEntry();

        DLFileEntryType dlFileEntryType = dlFileEntry.getDLFileEntryType();

        List<com.liferay.dynamic.data.mapping.kernel.DDMStructure> ddmStructures = dlFileEntryType
                .getDDMStructures();

        com.liferay.dynamic.data.mapping.kernel.DDMStructure ddmStructure = ddmStructures.get(0);

        DDMStructureLocalServiceUtil.deleteDDMStructure(ddmStructure.getStructureId());

        DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();

        DLFileEntryMetadata dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil
                .fetchFileEntryMetadata(ddmStructure.getStructureId(), dlFileVersion.getFileVersionId());

        Assert.assertNotNull(dlFileEntryMetadata);

        doVerify();

        dlFileEntryMetadata = DLFileEntryMetadataLocalServiceUtil
                .fetchFileEntryMetadata(ddmStructure.getStructureId(), dlFileVersion.getFileVersionId());

        Assert.assertNull(dlFileEntryMetadata);
    }

    @Test
    public void testDLFileEntryTreePathWithDLFileEntryInTrash() throws Exception {

        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        FileEntry fileEntry = addFileEntry(parentFolder.getFolderId());

        DLTrashServiceUtil.moveFileEntryToTrash(fileEntry.getFileEntryId());

        DLFolderLocalServiceUtil.deleteFolder(parentFolder.getFolderId(), false);

        doVerify();
    }

    @Test
    public void testDLFileEntryTreePathWithParentDLFolderInTrash() throws Exception {

        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder grandparentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(), grandparentFolder.getFolderId(),
                RandomTestUtil.randomString(), RandomTestUtil.randomString(), serviceContext);

        addFileEntry(parentFolder.getFolderId());

        DLTrashServiceUtil.moveFolderToTrash(parentFolder.getFolderId());

        DLFolderLocalServiceUtil.deleteFolder(grandparentFolder.getFolderId(), false);

        doVerify();
    }

    @Test
    public void testDLFileShortcutTreePathWithDLFileShortcutInTrash() throws Exception {

        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        FileEntry fileEntry = addFileEntry(parentFolder.getFolderId());

        FileShortcut fileShortcut = DLAppLocalServiceUtil.addFileShortcut(TestPropsValues.getUserId(),
                _group.getGroupId(), parentFolder.getFolderId(), fileEntry.getFileEntryId(), serviceContext);

        DLTrashServiceUtil.moveFileShortcutToTrash(fileShortcut.getFileShortcutId());

        DLFolderLocalServiceUtil.deleteFolder(parentFolder.getFolderId(), false);

        doVerify();
    }

    @Test
    public void testDLFileShortcutTreePathWithParentDLFolderInTrash() throws Exception {

        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder grandparentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(), grandparentFolder.getFolderId(),
                RandomTestUtil.randomString(), RandomTestUtil.randomString(), serviceContext);

        addFileEntry(parentFolder.getFolderId());

        DLTrashServiceUtil.moveFolderToTrash(parentFolder.getFolderId());

        DLFolderLocalServiceUtil.deleteFolder(grandparentFolder.getFolderId(), false);

        doVerify();
    }

    @Test
    public void testDLFolderTreePathWithDLFolderInTrash() throws Exception {
        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        Folder folder = DLAppServiceUtil.addFolder(_group.getGroupId(), parentFolder.getFolderId(),
                RandomTestUtil.randomString(), RandomTestUtil.randomString(), serviceContext);

        DLTrashServiceUtil.moveFolderToTrash(folder.getFolderId());

        DLFolderLocalServiceUtil.deleteFolder(parentFolder.getFolderId(), false);

        doVerify();
    }

    @Test
    public void testDLFolderTreePathWithParentDLFolderInTrash() throws Exception {

        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        Folder grandparentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(),
                DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        Folder parentFolder = DLAppServiceUtil.addFolder(_group.getGroupId(), grandparentFolder.getFolderId(),
                RandomTestUtil.randomString(), RandomTestUtil.randomString(), serviceContext);

        DLAppServiceUtil.addFolder(_group.getGroupId(), parentFolder.getFolderId(), RandomTestUtil.randomString(),
                RandomTestUtil.randomString(), serviceContext);

        DLTrashServiceUtil.moveFolderToTrash(parentFolder.getFolderId());

        DLFolderLocalServiceUtil.deleteFolder(grandparentFolder.getFolderId(), false);

        doVerify();
    }

    protected DLFileEntry addDLFileEntry() throws Exception {
        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group,
                TestPropsValues.getUserId());

        byte[] bytes = FileUtil.getBytes(getClass(),
                "/com/liferay/document/library/service/test/dependencies" + "/ddmstructure.xml");

        com.liferay.dynamic.data.mapping.model.DDMForm ddmForm = _ddmFormXSDDeserializer
                .deserialize(new String(bytes));

        serviceContext.setAttribute("ddmForm", DDMBeanTranslatorUtil.translate(ddmForm));

        User user = TestPropsValues.getUser();

        serviceContext.setLanguageId(LocaleUtil.toLanguageId(user.getLocale()));

        DLFileEntryType dlFileEntryType = DLFileEntryTypeLocalServiceUtil.addFileEntryType(
                TestPropsValues.getUserId(), _group.getGroupId(), RandomTestUtil.randomString(), StringPool.BLANK,
                new long[0], serviceContext);

        List<com.liferay.dynamic.data.mapping.kernel.DDMStructure> ddmStructures = dlFileEntryType
                .getDDMStructures();

        com.liferay.dynamic.data.mapping.kernel.DDMStructure ddmStructure = ddmStructures.get(0);

        Map<String, DDMFormValues> ddmFormValuesMap = getDDMFormValuesMap(ddmStructure.getStructureKey(),
                user.getLocale());

        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
                RandomTestUtil.randomBytes(TikaSafeRandomizerBumper.INSTANCE));

        return DLFileEntryLocalServiceUtil.addFileEntry(TestPropsValues.getUserId(), _group.getGroupId(),
                _group.getGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID, RandomTestUtil.randomString(),
                null, RandomTestUtil.randomString(), null, null, dlFileEntryType.getFileEntryTypeId(),
                ddmFormValuesMap, null, byteArrayInputStream, byteArrayInputStream.available(), serviceContext);
    }

    protected FileEntry addFileEntry(long folderId) throws Exception {
        ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId(),
                TestPropsValues.getUserId());

        return DLAppLocalServiceUtil.addFileEntry(TestPropsValues.getUserId(), _group.getGroupId(), folderId,
                RandomTestUtil.randomString() + ".txt", ContentTypes.TEXT_PLAIN,
                RandomTestUtil.randomBytes(TikaSafeRandomizerBumper.INSTANCE), serviceContext);
    }

    protected Map<String, DDMFormValues> getDDMFormValuesMap(String ddmStructureKey, Locale currentLocale) {

        Set<Locale> availableLocales = DDMFormTestUtil.createAvailableLocales(currentLocale);

        DDMForm ddmForm = new DDMForm();

        ddmForm.setAvailableLocales(availableLocales);
        ddmForm.setDefaultLocale(currentLocale);

        DDMFormField ddmFormField = new DDMFormField("date_an", "ddm-date");

        ddmFormField.setDataType("date");

        ddmForm.addDDMFormField(ddmFormField);

        DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);

        ddmFormValues.setAvailableLocales(availableLocales);
        ddmFormValues.setDefaultLocale(currentLocale);

        DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue();

        ddmFormFieldValue.setName("date_an");
        ddmFormFieldValue.setValue(new UnlocalizedValue(""));

        ddmFormValues.addDDMFormFieldValue(ddmFormFieldValue);

        Map<String, DDMFormValues> ddmFormValuesMap = new HashMap<>();

        ddmFormValuesMap.put(ddmStructureKey, ddmFormValues);

        return ddmFormValuesMap;
    }

    @Override
    protected VerifyProcess getVerifyProcess() {
        return _serviceTracker.getService();
    }

    protected void setUpDDMFormXSDDeserializer() {
        Registry registry = RegistryUtil.getRegistry();

        _ddmFormXSDDeserializer = registry.getService(DDMFormXSDDeserializer.class);
    }

    protected void setUpPermissionThreadLocal() throws Exception {
        _originalPermissionChecker = PermissionThreadLocal.getPermissionChecker();

        PermissionThreadLocal.setPermissionChecker(new SimplePermissionChecker() {

            {
                init(TestPropsValues.getUser());
            }

            @Override
            public boolean hasOwnerPermission(long companyId, String name, String primKey, long ownerId,
                    String actionId) {

                return true;
            }

            @Override
            public boolean hasPermission(long groupId, String name, String primKey, String actionId) {

                return true;
            }

        });
    }

    protected void setUpPrincipalThreadLocal() throws Exception {
        _originalName = PrincipalThreadLocal.getName();

        PrincipalThreadLocal.setName(TestPropsValues.getUserId());
    }

    private static ServiceTracker<VerifyProcess, VerifyProcess> _serviceTracker;

    private DDMFormXSDDeserializer _ddmFormXSDDeserializer;

    @DeleteAfterTestRun
    private Group _group;

    private String _originalName;
    private PermissionChecker _originalPermissionChecker;

}