/**
* 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.internal.exportimport.data.handler.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.document.library.kernel.model.DLFileEntryMetadata;
import com.liferay.document.library.kernel.model.DLFileEntryType;
import com.liferay.document.library.kernel.model.DLFolder;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.service.DLAppServiceUtil;
import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalServiceUtil;
import com.liferay.document.library.kernel.service.DLFolderLocalServiceUtil;
import com.liferay.document.library.kernel.util.DLUtil;
import com.liferay.dynamic.data.mapping.kernel.DDMStructureManagerUtil;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandler;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerRegistryUtil;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.StagedModel;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.Sync;
import com.liferay.portal.kernel.test.rule.SynchronousDestinationTestRule;
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.DateUtil;
import com.liferay.portal.lar.test.BaseStagedModelDataHandlerTestCase;
import com.liferay.portal.repository.liferayrepository.model.LiferayFolder;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Mate Thurzo
*/
@RunWith(Arquillian.class)
@Sync
public class FolderStagedModelDataHandlerTest
extends BaseStagedModelDataHandlerTestCase {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
SynchronousDestinationTestRule.INSTANCE);
@Test
public void testCompanyScopeDependencies() throws Exception {
initExport();
Map<String, List<StagedModel>> dependentStagedModelsMap =
addCompanyDependencies();
StagedModel stagedModel = addStagedModel(
stagingGroup, dependentStagedModelsMap);
StagedModelDataHandlerUtil.exportStagedModel(
portletDataContext, stagedModel);
initImport();
StagedModel exportedStagedModel = readExportedStagedModel(stagedModel);
Assert.assertNotNull(exportedStagedModel);
StagedModelDataHandlerUtil.importStagedModel(
portletDataContext, exportedStagedModel);
validateCompanyDependenciesImport(dependentStagedModelsMap, liveGroup);
}
protected Map<String, List<StagedModel>> addCompanyDependencies()
throws Exception {
Map<String, List<StagedModel>> dependentStagedModelsMap =
new HashMap<>();
Company company = CompanyLocalServiceUtil.fetchCompany(
stagingGroup.getCompanyId());
Group companyGroup = company.getGroup();
DDMStructure ddmStructure = DDMStructureTestUtil.addStructure(
companyGroup.getGroupId(), DLFileEntryMetadata.class.getName());
addDependentStagedModel(
dependentStagedModelsMap,
DDMStructureManagerUtil.getDDMStructureModelClass(), ddmStructure);
DLFileEntryType dlFileEntryType = addDLFileEntryType(
companyGroup.getGroupId(), ddmStructure.getStructureId());
addDependentStagedModel(
dependentStagedModelsMap, DLFileEntryType.class, dlFileEntryType);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
stagingGroup.getGroupId(), TestPropsValues.getUserId());
Folder folder = DLAppServiceUtil.addFolder(
stagingGroup.getGroupId(),
DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
RandomTestUtil.randomString(), RandomTestUtil.randomString(),
serviceContext);
addDependentStagedModel(
dependentStagedModelsMap, DLFolder.class, folder);
return dependentStagedModelsMap;
}
@Override
protected Map<String, List<StagedModel>> addDependentStagedModelsMap(
Group group)
throws Exception {
Map<String, List<StagedModel>> dependentStagedModelsMap =
new HashMap<>();
DDMStructure ddmStructure = DDMStructureTestUtil.addStructure(
group.getGroupId(), DLFileEntryMetadata.class.getName());
addDependentStagedModel(
dependentStagedModelsMap,
DDMStructureManagerUtil.getDDMStructureModelClass(), ddmStructure);
DLFileEntryType dlFileEntryType = addDLFileEntryType(
group.getGroupId(), ddmStructure.getStructureId());
addDependentStagedModel(
dependentStagedModelsMap, DLFileEntryType.class, dlFileEntryType);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
group.getGroupId(), TestPropsValues.getUserId());
Folder folder = DLAppServiceUtil.addFolder(
group.getGroupId(), DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
RandomTestUtil.randomString(), RandomTestUtil.randomString(),
serviceContext);
addDependentStagedModel(
dependentStagedModelsMap, DLFolder.class, folder);
return dependentStagedModelsMap;
}
protected DLFileEntryType addDLFileEntryType(
long groupId, long ddmStructureId)
throws Exception {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
groupId, TestPropsValues.getUserId());
DLFileEntryType dlFileEntryType =
DLFileEntryTypeLocalServiceUtil.addFileEntryType(
TestPropsValues.getUserId(), groupId,
RandomTestUtil.randomString(), RandomTestUtil.randomString(),
new long[] {ddmStructureId}, serviceContext);
DDMStructureManagerUtil.updateStructureKey(
ddmStructureId, DLUtil.getDDMStructureKey(dlFileEntryType));
return dlFileEntryType;
}
@Override
protected StagedModel addStagedModel(
Group group,
Map<String, List<StagedModel>> dependentStagedModelsMap)
throws Exception {
List<StagedModel> folderDependentStagedModels =
dependentStagedModelsMap.get(DLFolder.class.getSimpleName());
Folder folder = (Folder)folderDependentStagedModels.get(0);
List<StagedModel> dlFileEntryTypeDependentStagedModels =
dependentStagedModelsMap.get(DLFileEntryType.class.getSimpleName());
DLFileEntryType dlFileEntryType =
(DLFileEntryType)dlFileEntryTypeDependentStagedModels.get(0);
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
group.getGroupId(), TestPropsValues.getUserId());
folder = DLAppServiceUtil.addFolder(
group.getGroupId(), folder.getFolderId(),
RandomTestUtil.randomString(), RandomTestUtil.randomString(),
serviceContext);
DLFolder dlFolder = (DLFolder)folder.getModel();
dlFolder.setDefaultFileEntryTypeId(
dlFileEntryType.getFileEntryTypeId());
dlFolder.setRestrictionType(
DLFolderConstants.RESTRICTION_TYPE_FILE_ENTRY_TYPES_AND_WORKFLOW);
DLFolderLocalServiceUtil.updateDLFolder(dlFolder);
List<Long> dlFileEntryTypeIds = new ArrayList<>();
dlFileEntryTypeIds.add(dlFileEntryType.getFileEntryTypeId());
DLFileEntryTypeLocalServiceUtil.updateFolderFileEntryTypes(
dlFolder, dlFileEntryTypeIds, dlFileEntryType.getFileEntryTypeId(),
serviceContext);
return folder;
}
@Override
@SuppressWarnings({"rawtypes", "unchecked"})
protected void deleteStagedModel(
StagedModel stagedModel,
Map<String, List<StagedModel>> dependentStagedModelsMap,
Group group)
throws Exception {
List<StagedModel> dlFileEntryTypestagedModels =
dependentStagedModelsMap.get(DLFileEntryType.class.getSimpleName());
StagedModelDataHandler stagedModelDataHandler =
StagedModelDataHandlerRegistryUtil.getStagedModelDataHandler(
DLFileEntryType.class.getName());
for (StagedModel dlFileEntryTypeStagedModel :
dlFileEntryTypestagedModels) {
stagedModelDataHandler.deleteStagedModel(
dlFileEntryTypeStagedModel);
}
super.deleteStagedModel(stagedModel, dependentStagedModelsMap, group);
}
@Override
protected StagedModel getStagedModel(String uuid, Group group) {
try {
DLFolder dlFolder =
DLFolderLocalServiceUtil.getDLFolderByUuidAndGroupId(
uuid, group.getGroupId());
return new LiferayFolder(dlFolder);
}
catch (Exception e) {
return null;
}
}
@Override
protected Class<? extends StagedModel> getStagedModelClass() {
return DLFolder.class;
}
protected void validateCompanyDependenciesImport(
Map<String, List<StagedModel>> dependentStagedModelsMap,
Group group)
throws Exception {
Class<?> ddmStructureClass =
DDMStructureManagerUtil.getDDMStructureModelClass();
List<StagedModel> ddmStructureDependentStagedModels =
dependentStagedModelsMap.get(ddmStructureClass.getSimpleName());
Assert.assertEquals(
ddmStructureDependentStagedModels.toString(), 1,
ddmStructureDependentStagedModels.size());
DDMStructure ddmStructure =
(DDMStructure)ddmStructureDependentStagedModels.get(0);
Assert.assertNull(
"Company DDM structure dependency should not be imported",
DDMStructureManagerUtil.fetchStructureByUuidAndGroupId(
ddmStructure.getUuid(), group.getGroupId()));
List<StagedModel> dlFileEntryTypesDependentStagedModels =
dependentStagedModelsMap.get(DLFileEntryType.class.getSimpleName());
Assert.assertEquals(
dlFileEntryTypesDependentStagedModels.toString(), 1,
dlFileEntryTypesDependentStagedModels.size());
DLFileEntryType dlFileEntryType =
(DLFileEntryType)dlFileEntryTypesDependentStagedModels.get(0);
Assert.assertNull(
"Company DL file entry should not be imported",
DLFileEntryTypeLocalServiceUtil.
fetchDLFileEntryTypeByUuidAndGroupId(
dlFileEntryType.getUuid(), group.getGroupId()));
}
@Override
protected void validateImport(
Map<String, List<StagedModel>> dependentStagedModelsMap,
Group group)
throws Exception {
Class<?> ddmStructureClass =
DDMStructureManagerUtil.getDDMStructureModelClass();
List<StagedModel> ddmStructureDependentStagedModels =
dependentStagedModelsMap.get(ddmStructureClass.getSimpleName());
Assert.assertEquals(
ddmStructureDependentStagedModels.toString(), 1,
ddmStructureDependentStagedModels.size());
DDMStructure ddmStructure =
(DDMStructure)ddmStructureDependentStagedModels.get(0);
DDMStructureManagerUtil.getStructureByUuidAndGroupId(
ddmStructure.getUuid(), group.getGroupId());
List<StagedModel> dlFileEntryTypesDependentStagedModels =
dependentStagedModelsMap.get(DLFileEntryType.class.getSimpleName());
Assert.assertEquals(
dlFileEntryTypesDependentStagedModels.toString(), 1,
dlFileEntryTypesDependentStagedModels.size());
DLFileEntryType dlFileEntryType =
(DLFileEntryType)dlFileEntryTypesDependentStagedModels.get(0);
DLFileEntryTypeLocalServiceUtil.getDLFileEntryTypeByUuidAndGroupId(
dlFileEntryType.getUuid(), group.getGroupId());
List<StagedModel> folderDependentStagedModels =
dependentStagedModelsMap.get(DLFolder.class.getSimpleName());
Assert.assertEquals(
folderDependentStagedModels.toString(), 1,
folderDependentStagedModels.size());
Folder parentFolder = (Folder)folderDependentStagedModels.get(0);
DLFolderLocalServiceUtil.getDLFolderByUuidAndGroupId(
parentFolder.getUuid(), group.getGroupId());
}
@Override
protected void validateImportedStagedModel(
StagedModel stagedModel, StagedModel importedStagedModel)
throws Exception {
Assert.assertTrue(
stagedModel.getCreateDate() + " " +
importedStagedModel.getCreateDate(),
DateUtil.equals(
stagedModel.getCreateDate(),
importedStagedModel.getCreateDate()));
Assert.assertEquals(
stagedModel.getUuid(), importedStagedModel.getUuid());
Folder folder = (Folder)stagedModel;
Folder importedFolder = (Folder)importedStagedModel;
Assert.assertEquals(folder.getName(), importedFolder.getName());
Assert.assertEquals(
folder.getDescription(), importedFolder.getDescription());
}
}