/** * 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; }