/**
* 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.asset.kernel.service.AssetEntryLocalServiceUtil;
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.DLFolder;
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.portlet.documentlibrary.util.test.DLTestUtil;
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 Peña
* @author Eudaldo Alonso
* @author Sergio González
*/
@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 testDLFileEntryWithNoAssetEntryGetsAssetEntryAdded()
throws Exception {
DLFileEntry dlFileEntry = addDLFileEntry();
long fileEntryId = dlFileEntry.getFileEntryId();
AssetEntryLocalServiceUtil.deleteEntry(
DLFileEntry.class.getName(), fileEntryId);
Assert.assertNotNull(
DLFileEntryLocalServiceUtil.fetchDLFileEntry(fileEntryId));
Assert.assertNull(
AssetEntryLocalServiceUtil.fetchEntry(
DLFileEntry.class.getName(), fileEntryId));
doVerify();
Assert.assertNotNull(
DLFileEntryLocalServiceUtil.fetchDLFileEntry(fileEntryId));
Assert.assertNotNull(
AssetEntryLocalServiceUtil.fetchEntry(
DLFileEntry.class.getName(), fileEntryId));
}
@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();
}
@Test
public void testDLFolderWithNoAssetEntryGetsAssetEntryAdded()
throws Exception {
DLFolder dlFolder = DLTestUtil.addDLFolder(_group.getGroupId());
long folderId = dlFolder.getFolderId();
AssetEntryLocalServiceUtil.deleteEntry(
DLFolder.class.getName(), folderId);
Assert.assertNotNull(DLFolderLocalServiceUtil.fetchDLFolder(folderId));
Assert.assertNull(
AssetEntryLocalServiceUtil.fetchEntry(
DLFolder.class.getName(), folderId));
doVerify();
Assert.assertNotNull(DLFolderLocalServiceUtil.fetchDLFolder(folderId));
Assert.assertNotNull(
AssetEntryLocalServiceUtil.fetchEntry(
DLFolder.class.getName(), folderId));
}
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;
}