/**
* 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.asset.publisher.lar.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.asset.kernel.model.AssetCategory;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetTag;
import com.liferay.asset.kernel.model.AssetVocabulary;
import com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil;
import com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil;
import com.liferay.asset.publisher.test.util.AssetPublisherTestUtil;
import com.liferay.asset.publisher.web.constants.AssetPublisherPortletKeys;
import com.liferay.asset.publisher.web.display.context.AssetEntryResult;
import com.liferay.asset.publisher.web.display.context.AssetPublisherDisplayContext;
import com.liferay.asset.publisher.web.util.AssetPublisherUtil;
import com.liferay.asset.publisher.web.util.DefaultAssetPublisherCustomizer;
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.service.DLFileEntryTypeLocalServiceUtil;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil;
import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationConstants;
import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationSettingsMapFactory;
import com.liferay.exportimport.kernel.lar.ExportImportHelperUtil;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys;
import com.liferay.exportimport.kernel.model.ExportImportConfiguration;
import com.liferay.exportimport.kernel.service.ExportImportConfigurationLocalServiceUtil;
import com.liferay.exportimport.kernel.service.ExportImportLocalServiceUtil;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalArticleConstants;
import com.liferay.journal.model.JournalFolderConstants;
import com.liferay.journal.test.util.JournalTestUtil;
import com.liferay.portal.kernel.dao.search.SearchContainer;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.PortletInstance;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.ServiceContext;
import com.liferay.portal.kernel.servlet.PortletServlet;
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.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.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ArrayUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.JavaConstants;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.lar.test.BasePortletExportImportTestCase;
import com.liferay.portal.service.test.ServiceTestUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.util.test.LayoutTestUtil;
import com.liferay.portlet.asset.util.test.AssetTestUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import javax.portlet.PortletPreferences;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.portlet.MockPortletRequest;
import org.springframework.mock.web.portlet.MockPortletResponse;
/**
* Tests the export and import behavior of the Asset Publisher bundle with
* different types of assets.
*
* @author Julio Camarero
*/
@RunWith(Arquillian.class)
@Sync
public class AssetPublisherExportImportTest
extends BasePortletExportImportTestCase {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
SynchronousDestinationTestRule.INSTANCE);
@Override
public String getPortletId() throws Exception {
PortletInstance portletInstance = new PortletInstance(
AssetPublisherPortletKeys.ASSET_PUBLISHER,
RandomTestUtil.randomString());
return portletInstance.getPortletInstanceKey();
}
@Before
@Override
public void setUp() throws Exception {
ServiceTestUtil.setUser(TestPropsValues.getUser());
super.setUp();
_permissionChecker = PermissionCheckerFactoryUtil.create(
TestPropsValues.getUser());
}
@Test
public void testAnyDLFileEntryType() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
long dlFileEntryClassNameId = PortalUtil.getClassNameId(
DLFileEntry.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(dlFileEntryClassNameId)});
preferenceMap.put(
"anyClassTypeDLFileEntryAssetRendererFactory",
new String[] {String.valueOf(Boolean.TRUE)});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
long anyAssetType = GetterUtil.getLong(
portletPreferences.getValue("anyAssetType", null));
Assert.assertEquals(dlFileEntryClassNameId, anyAssetType);
String anyClassTypeDLFileEntryAssetRendererFactory =
portletPreferences.getValue(
"anyClassTypeDLFileEntryAssetRendererFactory", null);
Assert.assertEquals(
anyClassTypeDLFileEntryAssetRendererFactory,
String.valueOf(Boolean.TRUE));
}
@Test
public void testAnyJournalStructure() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
long journalArticleClassNameId = PortalUtil.getClassNameId(
JournalArticle.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(journalArticleClassNameId)});
preferenceMap.put(
"anyClassTypeJournalArticleAssetRendererFactory",
new String[] {String.valueOf(Boolean.TRUE)});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
long anyAssetType = GetterUtil.getLong(
portletPreferences.getValue("anyAssetType", null));
Assert.assertEquals(journalArticleClassNameId, anyAssetType);
String anyClassTypeDLFileEntryAssetRendererFactory =
portletPreferences.getValue(
"anyClassTypeJournalArticleAssetRendererFactory", null);
Assert.assertEquals(
anyClassTypeDLFileEntryAssetRendererFactory,
String.valueOf(Boolean.TRUE));
}
@Test
public void testAssetCategories() throws Exception {
AssetVocabulary assetVocabulary = AssetTestUtil.addVocabulary(
group.getGroupId());
AssetCategory assetCategory = AssetTestUtil.addCategory(
group.getGroupId(), assetVocabulary.getVocabularyId());
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put("queryName0", new String[] {"assetCategories"});
preferenceMap.put(
"queryValues0",
new String[] {String.valueOf(assetCategory.getCategoryId())});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
long importedAssetCategoryId = GetterUtil.getLong(
portletPreferences.getValue("queryValues0", null));
Assert.assertNotEquals(importedAssetCategoryId, 0L);
Assert.assertNotEquals(
assetCategory.getCategoryId(), importedAssetCategoryId);
AssetCategory importedAssetCategory =
AssetCategoryLocalServiceUtil.fetchAssetCategory(
importedAssetCategoryId);
Assert.assertNotNull(importedAssetCategory);
Assert.assertEquals(
assetCategory.getUuid(), importedAssetCategory.getUuid());
}
@Test
public void testChildLayoutScopeIds() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
Group childGroup = GroupTestUtil.addGroup(group.getGroupId());
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_CHILD_GROUP_PREFIX +
childGroup.getGroupId()
});
try {
PortletPreferences portletPreferences =
getImportedPortletPreferences(preferenceMap);
Assert.assertEquals(
null, portletPreferences.getValue("scopeId", null));
Assert.assertTrue(
"The child group ID should have been filtered out on import",
ArrayUtil.isEmpty(
portletPreferences.getValues("scopeIds", null)));
}
finally {
GroupLocalServiceUtil.deleteGroup(childGroup);
}
}
@Test
public void testDisplayStyle() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
String displayStyle = RandomTestUtil.randomString();
preferenceMap.put("displayStyle", new String[] {displayStyle});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
displayStyle, portletPreferences.getValue("displayStyle", null));
Assert.assertTrue(
"The display style should not be null",
Validator.isNotNull(
portletPreferences.getValue("displayStyle", null)));
}
@Test
public void testDynamicExportImportAssetCategoryFiltering()
throws Exception {
AssetVocabulary assetVocabulary = AssetTestUtil.addVocabulary(
group.getGroupId());
AssetCategory assetCategory = AssetTestUtil.addCategory(
group.getGroupId(), assetVocabulary.getVocabularyId());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
serviceContext.setAssetCategoryIds(
new long[] {assetCategory.getCategoryId()});
List<AssetEntry> expectedAssetEntries = addAssetEntries(
group, 2, new ArrayList<AssetEntry>(), serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put("queryContains0", new String[] {"true"});
preferenceMap.put("queryName0", new String[] {"assetCategories"});
preferenceMap.put(
"queryValues0",
new String[] {String.valueOf(assetCategory.getCategoryId())});
testDynamicExportImport(preferenceMap, expectedAssetEntries, true);
}
@Test
public void testDynamicExportImportAssetTagFiltering() throws Exception {
AssetTag assetTag = AssetTestUtil.addTag(group.getGroupId());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
serviceContext.setAssetTagNames(new String[] {assetTag.getName()});
List<AssetEntry> expectedAssetEntries = addAssetEntries(
group, 2, new ArrayList<AssetEntry>(), serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put(
"queryContains0", new String[] {Boolean.TRUE.toString()});
preferenceMap.put("queryValues0", new String[] {assetTag.getName()});
testDynamicExportImport(preferenceMap, expectedAssetEntries, true);
}
@Test
public void testDynamicExportImportAssetVocabularyFiltering()
throws Exception {
AssetVocabulary assetVocabulary = AssetTestUtil.addVocabulary(
group.getGroupId());
AssetCategory assetCategory1 = AssetTestUtil.addCategory(
group.getGroupId(), assetVocabulary.getVocabularyId());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
serviceContext.setAssetCategoryIds(
new long[] {assetCategory1.getCategoryId()});
List<AssetEntry> expectedAssetEntries = addAssetEntries(
group, 1, new ArrayList<AssetEntry>(), serviceContext);
AssetCategory assetCategory2 = AssetTestUtil.addCategory(
group.getGroupId(), assetVocabulary.getVocabularyId());
serviceContext.setAssetCategoryIds(
new long[] {assetCategory2.getCategoryId()});
expectedAssetEntries = addAssetEntries(
group, 1, expectedAssetEntries, serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put(
"assetVocabularyId",
new String[] {String.valueOf(assetVocabulary.getVocabularyId())});
testDynamicExportImport(preferenceMap, expectedAssetEntries, true);
}
@Test
public void testDynamicExportImportClassTypeFiltering() throws Exception {
List<AssetEntry> expectedAssetEntries = new ArrayList<>();
JournalArticle journalArticle = JournalTestUtil.addArticle(
group.getGroupId(), RandomTestUtil.randomString(),
RandomTestUtil.randomString(100),
ServiceContextTestUtil.getServiceContext());
expectedAssetEntries.add(getAssetEntry(journalArticle));
Map<String, String[]> preferenceMap = new HashMap<>();
long journalArticleClassNameId = PortalUtil.getClassNameId(
JournalArticle.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(journalArticleClassNameId)});
DDMStructure ddmStructure = journalArticle.getDDMStructure();
preferenceMap.put(
"classTypeIds",
new String[] {String.valueOf(ddmStructure.getStructureId())});
testDynamicExportImport(preferenceMap, expectedAssetEntries, true);
}
@Test
public void testDynamicExportImportLayoutFiltering() throws Exception {
List<AssetEntry> expectedAssetEntries = new ArrayList<>();
Map<Locale, String> titleMap = new HashMap<>();
titleMap.put(LocaleUtil.getDefault(), RandomTestUtil.randomString());
Map<Locale, String> contentMap = new HashMap<>();
contentMap.put(
LocaleUtil.getDefault(), RandomTestUtil.randomString(100));
JournalArticle journalArticle = JournalTestUtil.addArticle(
group.getGroupId(), JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID,
JournalArticleConstants.CLASSNAME_ID_DEFAULT, titleMap, titleMap,
contentMap, layout.getUuid(), LocaleUtil.getDefault(), null, false,
false, ServiceContextTestUtil.getServiceContext());
expectedAssetEntries.add(getAssetEntry(journalArticle));
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put(
"showOnlyLayoutAssets", new String[] {Boolean.TRUE.toString()});
testDynamicExportImport(preferenceMap, expectedAssetEntries, true);
}
@Test
public void testDynamicExportImportOtherClassNameFiltering()
throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
long dlFileEntryClassNameId = PortalUtil.getClassNameId(
DLFileEntry.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(dlFileEntryClassNameId)});
testDynamicExportImport(
preferenceMap, new ArrayList<AssetEntry>(), true);
}
@Test
public void testDynamicExportImportWithNoFiltering() throws Exception {
List<AssetEntry> expectedAssetEntries = addAssetEntries(
group, 2, new ArrayList<AssetEntry>(),
ServiceContextTestUtil.getServiceContext());
testDynamicExportImport(
new HashMap<String, String[]>(), expectedAssetEntries, false);
}
@Test
public void testExportImportAssetEntries() throws Exception {
testExportImportAssetEntries(group);
}
@Ignore
@Override
@Test
public void testExportImportAssetLinks() throws Exception {
}
@Test
public void testExportImportLayoutScopedAssetEntries() throws Exception {
Group layoutGroup = GroupTestUtil.addGroup(
TestPropsValues.getUserId(), layout);
testExportImportAssetEntries(layoutGroup);
}
@Test
public void testExportImportSeveralScopedAssetEntries() throws Exception {
List<Group> groups = new ArrayList<>();
Company company = CompanyLocalServiceUtil.getCompany(
layout.getCompanyId());
Group companyGroup = company.getGroup();
groups.add(companyGroup);
groups.add(group);
Group group2 = GroupTestUtil.addGroup();
groups.add(group2);
Group layoutGroup1 = GroupTestUtil.addGroup(
TestPropsValues.getUserId(), layout);
groups.add(layoutGroup1);
Layout layout2 = LayoutTestUtil.addLayout(group);
Group layoutGroup2 = GroupTestUtil.addGroup(
TestPropsValues.getUserId(), layout2);
groups.add(layoutGroup2);
testExportImportAssetEntries(groups);
}
@Test
public void testGlobalScopeId() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
Company company = CompanyLocalServiceUtil.getCompany(
layout.getCompanyId());
Group companyGroup = company.getGroup();
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_GROUP_PREFIX +
companyGroup.getGroupId()
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
AssetPublisherUtil.SCOPE_ID_GROUP_PREFIX +
companyGroup.getGroupId(),
portletPreferences.getValue("scopeIds", null));
Assert.assertEquals(null, portletPreferences.getValue("scopeId", null));
}
@Test
public void testLayoutScopeId() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
GroupTestUtil.addGroup(TestPropsValues.getUserId(), layout);
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX +
layout.getUuid()
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX +
importedLayout.getUuid(),
portletPreferences.getValue("scopeIds", null));
Assert.assertEquals(null, portletPreferences.getValue("scopeId", null));
}
@Test
public void testLegacyLayoutScopeId() throws Exception {
Map<String, String[]> preferenceMap = new HashMap<>();
GroupTestUtil.addGroup(TestPropsValues.getUserId(), layout);
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_LAYOUT_PREFIX + layout.getLayoutId()
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX +
importedLayout.getUuid(),
portletPreferences.getValue("scopeIds", null));
Assert.assertEquals(null, portletPreferences.getValue("scopeId", null));
}
@Test
public void testOneDLFileEntryType() throws Exception {
DDMStructure ddmStructure = DDMStructureTestUtil.addStructure(
group.getGroupId(), DLFileEntryMetadata.class.getName());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
group.getGroupId(), TestPropsValues.getUserId());
DLFileEntryType dlFileEntryType = addDLFileEntryType(
group.getGroupId(), ddmStructure.getStructureId(), serviceContext);
serviceContext.setUuid(ddmStructure.getUuid());
DDMStructure importedDDMStructure = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), DLFileEntryMetadata.class.getName(), 0,
ddmStructure.getDDMForm(), LocaleUtil.getDefault(), serviceContext);
serviceContext.setUuid(dlFileEntryType.getUuid());
DLFileEntryType importedDLFileEntryType = addDLFileEntryType(
importedGroup.getGroupId(), importedDDMStructure.getStructureId(),
serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
long dlFileEntryClassNameId = PortalUtil.getClassNameId(
DLFileEntry.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(dlFileEntryClassNameId)});
preferenceMap.put(
"anyClassTypeDLFileEntryAssetRendererFactory",
new String[] {
String.valueOf(dlFileEntryType.getFileEntryTypeId())
});
preferenceMap.put(
"classTypeIds",
new String[] {
String.valueOf(dlFileEntryType.getFileEntryTypeId())
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
long anyClassTypeDLFileEntryAssetRendererFactory = GetterUtil.getLong(
portletPreferences.getValue(
"anyClassTypeDLFileEntryAssetRendererFactory", null));
Assert.assertEquals(
anyClassTypeDLFileEntryAssetRendererFactory,
importedDLFileEntryType.getFileEntryTypeId());
long anyAssetType = GetterUtil.getLong(
portletPreferences.getValue("anyAssetType", null));
Assert.assertEquals(dlFileEntryClassNameId, anyAssetType);
long classTypeIds = GetterUtil.getLong(
portletPreferences.getValue("classTypeIds", null));
Assert.assertEquals(
importedDLFileEntryType.getFileEntryTypeId(), classTypeIds);
}
@Test
public void testOneJournalStructure() throws Exception {
DDMStructure ddmStructure = DDMStructureTestUtil.addStructure(
group.getGroupId(), JournalArticle.class.getName());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
serviceContext.setUuid(ddmStructure.getUuid());
DDMStructure importedDDMStructure = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), JournalArticle.class.getName(), 0,
ddmStructure.getDDMForm(), LocaleUtil.getDefault(), serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
long journalArticleClassNameId = PortalUtil.getClassNameId(
JournalArticle.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(journalArticleClassNameId)});
preferenceMap.put(
"anyClassTypeJournalArticleAssetRendererFactory",
new String[] {String.valueOf(ddmStructure.getStructureId())});
preferenceMap.put(
"classTypeIds",
new String[] {String.valueOf(ddmStructure.getStructureId())});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
long anyClassTypeJournalArticleAssetRendererFactory =
GetterUtil.getLong(
portletPreferences.getValue(
"anyClassTypeJournalArticleAssetRendererFactory", null));
Assert.assertEquals(
anyClassTypeJournalArticleAssetRendererFactory,
importedDDMStructure.getStructureId());
long anyAssetType = GetterUtil.getLong(
portletPreferences.getValue("anyAssetType", null));
Assert.assertEquals(journalArticleClassNameId, anyAssetType);
long classTypeIds = GetterUtil.getLong(
portletPreferences.getValue("classTypeIds", null));
Assert.assertEquals(
importedDDMStructure.getStructureId(), classTypeIds);
}
@Test
public void testSeveralDLFileEntryTypes() throws Exception {
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
group.getGroupId(), DLFileEntryMetadata.class.getName());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext(
group.getGroupId(), TestPropsValues.getUserId());
DLFileEntryType dlFileEntryType1 = addDLFileEntryType(
group.getGroupId(), ddmStructure1.getStructureId(), serviceContext);
serviceContext.setUuid(ddmStructure1.getUuid());
DDMStructure importedDDMStructure1 = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), DLFileEntryMetadata.class.getName(), 0,
ddmStructure1.getDDMForm(), LocaleUtil.getDefault(),
serviceContext);
serviceContext.setUuid(dlFileEntryType1.getUuid());
DLFileEntryType importedDLFileEntryType1 = addDLFileEntryType(
importedGroup.getGroupId(), importedDDMStructure1.getStructureId(),
serviceContext);
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
group.getGroupId(), DLFileEntryMetadata.class.getName());
serviceContext.setUuid(null);
DLFileEntryType dlFileEntryType2 = addDLFileEntryType(
group.getGroupId(), ddmStructure2.getStructureId(), serviceContext);
serviceContext.setUuid(ddmStructure2.getUuid());
DDMStructure importedDDMStructure2 = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), DLFileEntryMetadata.class.getName(), 0,
ddmStructure2.getDDMForm(), LocaleUtil.getDefault(),
serviceContext);
serviceContext.setUuid(dlFileEntryType2.getUuid());
DLFileEntryType importedDLFileEntryType2 = addDLFileEntryType(
importedGroup.getGroupId(), importedDDMStructure2.getStructureId(),
serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
long dlFileEntryClassNameId = PortalUtil.getClassNameId(
DLFileEntry.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(dlFileEntryClassNameId)});
preferenceMap.put(
"anyClassTypeDLFileEntryAssetRendererFactory",
new String[] {String.valueOf(Boolean.FALSE)});
preferenceMap.put(
"classTypeIdsDLFileEntryAssetRendererFactory",
new String[] {
String.valueOf(dlFileEntryType1.getFileEntryTypeId()),
String.valueOf(dlFileEntryType2.getFileEntryTypeId())
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
importedDLFileEntryType1.getFileEntryTypeId() + StringPool.COMMA +
importedDLFileEntryType2.getFileEntryTypeId(),
StringUtil.merge(
portletPreferences.getValues(
"classTypeIdsDLFileEntryAssetRendererFactory", null)));
}
@Test
public void testSeveralJournalStructures() throws Exception {
DDMStructure ddmStructure1 = DDMStructureTestUtil.addStructure(
group.getGroupId(), JournalArticle.class.getName());
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
serviceContext.setUuid(ddmStructure1.getUuid());
DDMStructure importedDDMStructure1 = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), JournalArticle.class.getName(), 0,
ddmStructure1.getDDMForm(), LocaleUtil.getDefault(),
serviceContext);
DDMStructure ddmStructure2 = DDMStructureTestUtil.addStructure(
group.getGroupId(), JournalArticle.class.getName());
serviceContext.setUuid(ddmStructure2.getUuid());
DDMStructure importedDDMStructure2 = DDMStructureTestUtil.addStructure(
importedGroup.getGroupId(), JournalArticle.class.getName(), 0,
ddmStructure1.getDDMForm(), LocaleUtil.getDefault(),
serviceContext);
Map<String, String[]> preferenceMap = new HashMap<>();
long journalArticleClassNameId = PortalUtil.getClassNameId(
JournalArticle.class);
preferenceMap.put(
"anyAssetType",
new String[] {String.valueOf(journalArticleClassNameId)});
preferenceMap.put(
"anyClassTypeJournalArticleAssetRendererFactory",
new String[] {String.valueOf(Boolean.FALSE)});
preferenceMap.put(
"classTypeIdsJournalArticleAssetRendererFactory",
new String[] {
String.valueOf(ddmStructure1.getStructureId()),
String.valueOf(ddmStructure2.getStructureId())
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertEquals(
importedDDMStructure1.getStructureId() + StringPool.COMMA +
importedDDMStructure2.getStructureId(),
StringUtil.merge(
portletPreferences.getValues(
"classTypeIdsJournalArticleAssetRendererFactory", null)));
}
@Test
public void testSeveralLayoutScopeIds() throws Exception {
Company company = CompanyLocalServiceUtil.getCompany(
layout.getCompanyId());
Layout secondLayout = LayoutTestUtil.addLayout(group);
GroupTestUtil.addGroup(TestPropsValues.getUserId(), secondLayout);
Map<String, String[]> preferenceMap = new HashMap<>();
GroupTestUtil.addGroup(TestPropsValues.getUserId(), layout);
Group companyGroup = company.getGroup();
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_GROUP_PREFIX +
companyGroup.getGroupId(),
AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX +
layout.getUuid(),
AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX +
secondLayout.getUuid()
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Layout importedSecondLayout =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
secondLayout.getUuid(), importedGroup.getGroupId(),
importedLayout.isPrivateLayout());
Assert.assertEquals(null, portletPreferences.getValue("scopeId", null));
StringBundler sb = new StringBundler(8);
sb.append(AssetPublisherUtil.SCOPE_ID_GROUP_PREFIX);
sb.append(companyGroup.getGroupId());
sb.append(StringPool.COMMA);
sb.append(AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX);
sb.append(importedLayout.getUuid());
sb.append(StringPool.COMMA);
sb.append(AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX);
sb.append(importedSecondLayout.getUuid());
Assert.assertEquals(
sb.toString(),
StringUtil.merge(portletPreferences.getValues("scopeIds", null)));
}
@Test
public void testSeveralLegacyLayoutScopeIds() throws Exception {
Layout secondLayout = LayoutTestUtil.addLayout(group);
GroupTestUtil.addGroup(TestPropsValues.getUserId(), secondLayout);
Map<String, String[]> preferenceMap = new HashMap<>();
GroupTestUtil.addGroup(TestPropsValues.getUserId(), layout);
preferenceMap.put(
"scopeIds",
new String[] {
AssetPublisherUtil.SCOPE_ID_LAYOUT_PREFIX +
layout.getLayoutId(),
AssetPublisherUtil.SCOPE_ID_LAYOUT_PREFIX +
secondLayout.getLayoutId()
});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Layout importedSecondLayout =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
secondLayout.getUuid(), importedGroup.getGroupId(),
importedLayout.isPrivateLayout());
Assert.assertEquals(null, portletPreferences.getValue("scopeId", null));
StringBundler sb = new StringBundler(5);
sb.append(AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX);
sb.append(importedLayout.getUuid());
sb.append(StringPool.COMMA);
sb.append(AssetPublisherUtil.SCOPE_ID_LAYOUT_UUID_PREFIX);
sb.append(importedSecondLayout.getUuid());
Assert.assertEquals(
sb.toString(),
StringUtil.merge(portletPreferences.getValues("scopeIds", null)));
}
@Test
public void testSortByAssetVocabulary() throws Exception {
testSortByAssetVocabulary(false);
}
@Test
public void testSortByGlobalAssetVocabulary() throws Exception {
testSortByAssetVocabulary(true);
}
protected List<AssetEntry> addAssetEntries(
Group group, int count, List<AssetEntry> assetEntries,
ServiceContext serviceContext)
throws Exception {
for (int i = 0; i < count; i++) {
JournalArticle journalArticle = JournalTestUtil.addArticle(
group.getGroupId(), RandomTestUtil.randomString(),
RandomTestUtil.randomString(100), serviceContext);
assetEntries.add(getAssetEntry(journalArticle));
}
return assetEntries;
}
protected DLFileEntryType addDLFileEntryType(
long groupId, long ddmStructureId, ServiceContext serviceContext)
throws Exception {
return DLFileEntryTypeLocalServiceUtil.addFileEntryType(
serviceContext.getUserId(), groupId, RandomTestUtil.randomString(),
RandomTestUtil.randomString(), new long[] {ddmStructureId},
serviceContext);
}
protected void assertAssetEntries(
List<AssetEntry> expectedAssetEntries,
List<AssetEntry> actualAssetEntries) {
Assert.assertEquals(
actualAssetEntries.toString(), expectedAssetEntries.size(),
actualAssetEntries.size());
Iterator<AssetEntry> expectedAssetEntriesIterator =
expectedAssetEntries.iterator();
Iterator<AssetEntry> actualAssetEntriesIterator =
expectedAssetEntries.iterator();
while (expectedAssetEntriesIterator.hasNext() &&
actualAssetEntriesIterator.hasNext()) {
AssetEntry expectedAssetEntry = expectedAssetEntriesIterator.next();
AssetEntry actualAssetEntry = actualAssetEntriesIterator.next();
Assert.assertEquals(
expectedAssetEntry.getClassName(),
actualAssetEntry.getClassName());
Assert.assertEquals(
expectedAssetEntry.getClassUuid(),
actualAssetEntry.getClassUuid());
}
}
@Override
protected void exportImportPortlet(String portletId) throws Exception {
List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
layout.getGroupId(), layout.isPrivateLayout());
User user = TestPropsValues.getUser();
Map<String, Serializable> exportLayoutSettingsMap =
ExportImportConfigurationSettingsMapFactory.
buildExportLayoutSettingsMap(
user, layout.getGroupId(), layout.isPrivateLayout(),
ExportImportHelperUtil.getLayoutIds(layouts),
getExportParameterMap());
ExportImportConfiguration exportConfiguration =
ExportImportConfigurationLocalServiceUtil.
addDraftExportImportConfiguration(
user.getUserId(),
ExportImportConfigurationConstants.TYPE_EXPORT_LAYOUT,
exportLayoutSettingsMap);
larFile = ExportImportLocalServiceUtil.exportLayoutsAsFile(
exportConfiguration);
// Import site LAR
Map<String, Serializable> importLayoutSettingsMap =
ExportImportConfigurationSettingsMapFactory.
buildImportLayoutSettingsMap(
user, importedGroup.getGroupId(), layout.isPrivateLayout(),
null, getImportParameterMap());
ExportImportConfiguration importConfiguration =
ExportImportConfigurationLocalServiceUtil.
addDraftExportImportConfiguration(
user.getUserId(),
ExportImportConfigurationConstants.TYPE_IMPORT_LAYOUT,
importLayoutSettingsMap);
ExportImportLocalServiceUtil.importLayouts(
importConfiguration, larFile);
importedLayout = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout.getUuid(), importedGroup.getGroupId(),
layout.isPrivateLayout());
Assert.assertNotNull(importedLayout);
}
protected String[] getAssetEntriesXmls(List<AssetEntry> assetEntries) {
String[] assetEntriesXmls = new String[assetEntries.size()];
for (int i = 0; i < assetEntries.size(); i++) {
assetEntriesXmls[i] = AssetPublisherTestUtil.getAssetEntryXml(
assetEntries.get(i));
}
return assetEntriesXmls;
}
@Override
protected Map<String, String[]> getExportParameterMap() throws Exception {
Map<String, String[]> parameterMap = new HashMap<>();
parameterMap.put(
PortletDataHandlerKeys.PORTLET_CONFIGURATION,
new String[] {Boolean.TRUE.toString()});
parameterMap.put(
PortletDataHandlerKeys.PORTLET_CONFIGURATION_ALL,
new String[] {Boolean.TRUE.toString()});
parameterMap.put(
PortletDataHandlerKeys.PORTLET_DATA,
new String[] {Boolean.TRUE.toString()});
parameterMap.put(
PortletDataHandlerKeys.PORTLET_SETUP_ALL,
new String[] {Boolean.TRUE.toString()});
return parameterMap;
}
protected long[] getGroupIdsFromScopeIds(String[] scopeIds, Layout layout)
throws Exception {
long[] groupIds = new long[scopeIds.length];
for (int i = 0; i < scopeIds.length; i++) {
groupIds[i] = AssetPublisherUtil.getGroupIdFromScopeId(
scopeIds[i], layout.getGroupId(), layout.isPrivateLayout());
}
return groupIds;
}
@Override
protected Map<String, String[]> getImportParameterMap() throws Exception {
return getExportParameterMap();
}
protected void testDynamicExportImport(
Map<String, String[]> preferenceMap,
List<AssetEntry> expectedAssetEntries, boolean filtering)
throws Exception {
if (filtering) {
// Creating entries to validate filtering
addAssetEntries(
group, 2, new ArrayList<AssetEntry>(),
ServiceContextTestUtil.getServiceContext());
}
DefaultAssetPublisherCustomizer defaultAssetPublisherCustomizer =
new DefaultAssetPublisherCustomizer();
defaultAssetPublisherCustomizer.activate(new HashMap<String, Object>());
MockPortletRequest mockPortletRequest = new MockPortletRequest();
MockHttpServletRequest mockHttpServletRequest =
new MockHttpServletRequest();
String scopeId = AssetPublisherUtil.getScopeId(
group, group.getGroupId());
preferenceMap.put("scopeIds", new String[] {scopeId});
preferenceMap.put("selectionStyle", new String[] {"dynamic"});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
ThemeDisplay themeDisplay = new ThemeDisplay();
Company company = CompanyLocalServiceUtil.getCompany(
TestPropsValues.getCompanyId());
themeDisplay.setCompany(company);
themeDisplay.setLayout(importedLayout);
themeDisplay.setScopeGroupId(importedGroup.getGroupId());
themeDisplay.setUser(TestPropsValues.getUser());
mockHttpServletRequest.setAttribute(
WebKeys.THEME_DISPLAY, themeDisplay);
mockPortletRequest.setPreferences(portletPreferences);
mockPortletRequest.setAttribute(
PortletServlet.PORTLET_SERVLET_REQUEST, mockHttpServletRequest);
mockHttpServletRequest.setAttribute(
JavaConstants.JAVAX_PORTLET_REQUEST, mockPortletRequest);
AssetPublisherDisplayContext assetPublisherDisplayContext =
new AssetPublisherDisplayContext(
defaultAssetPublisherCustomizer, mockPortletRequest,
new MockPortletResponse(), portletPreferences);
SearchContainer<AssetEntry> searchContainer = new SearchContainer<>();
searchContainer.setTotal(10);
List<AssetEntryResult> actualAssetEntryResults =
AssetPublisherUtil.getAssetEntryResults(
assetPublisherDisplayContext, searchContainer,
portletPreferences);
List<AssetEntry> actualAssetEntries = new ArrayList<>();
for (AssetEntryResult assetEntryResult : actualAssetEntryResults) {
actualAssetEntries.addAll(assetEntryResult.getAssetEntries());
}
assertAssetEntries(expectedAssetEntries, actualAssetEntries);
}
protected void testExportImportAssetEntries(Group scopeGroup)
throws Exception {
List<Group> groups = new ArrayList<>();
groups.add(scopeGroup);
testExportImportAssetEntries(groups);
}
protected void testExportImportAssetEntries(List<Group> scopeGroups)
throws Exception {
List<AssetEntry> assetEntries = new ArrayList<>();
String[] scopeIds = new String[0];
for (Group scopeGroup : scopeGroups) {
ServiceContext serviceContext =
ServiceContextTestUtil.getServiceContext();
if (scopeGroup.isLayout()) {
// Creating structures and templates in layout scope group is
// not possible
Company company = CompanyLocalServiceUtil.getCompany(
layout.getCompanyId());
serviceContext.setAttribute("ddmGroupId", company.getGroupId());
}
assetEntries = addAssetEntries(
scopeGroup, 3, assetEntries, serviceContext);
String scopeId = AssetPublisherUtil.getScopeId(
scopeGroup, group.getGroupId());
scopeIds = ArrayUtil.append(scopeIds, scopeId);
}
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put("assetEntryXml", getAssetEntriesXmls(assetEntries));
preferenceMap.put("scopeIds", scopeIds);
PortletPreferences importedPortletPreferences =
getImportedPortletPreferences(preferenceMap);
String[] importedScopeIds = importedPortletPreferences.getValues(
"scopeIds", null);
long[] selectedGroupIds = getGroupIdsFromScopeIds(
importedScopeIds, importedLayout);
List<AssetEntry> actualAssetEntries =
AssetPublisherUtil.getAssetEntries(
new MockPortletRequest(), importedPortletPreferences,
_permissionChecker, selectedGroupIds, false, false);
assertAssetEntries(assetEntries, actualAssetEntries);
}
protected void testSortByAssetVocabulary(boolean globalVocabulary)
throws Exception {
long groupId = group.getGroupId();
if (globalVocabulary) {
Company company = CompanyLocalServiceUtil.getCompany(
layout.getCompanyId());
groupId = company.getGroupId();
}
AssetVocabulary assetVocabulary =
AssetVocabularyLocalServiceUtil.addVocabulary(
TestPropsValues.getUserId(), groupId,
RandomTestUtil.randomString(),
ServiceContextTestUtil.getServiceContext(groupId));
Map<String, String[]> preferenceMap = new HashMap<>();
preferenceMap.put(
"assetVocabularyId",
new String[] {String.valueOf(assetVocabulary.getVocabularyId())});
PortletPreferences portletPreferences = getImportedPortletPreferences(
preferenceMap);
Assert.assertNotNull(
"Portlet preference \"assetVocabularyId\" is null",
portletPreferences.getValue("assetVocabularyId", null));
long importedAssetVocabularyId = GetterUtil.getLong(
portletPreferences.getValue("assetVocabularyId", null));
AssetVocabulary importedVocabulary =
AssetVocabularyLocalServiceUtil.fetchAssetVocabulary(
importedAssetVocabularyId);
Assert.assertNotNull(
"Vocabulary " + importedAssetVocabularyId + " does not exist",
importedVocabulary);
long expectedGroupId = groupId;
if (!globalVocabulary) {
expectedGroupId = importedGroup.getGroupId();
}
Assert.assertEquals(
"Vocabulary " + importedAssetVocabularyId +
" does not belong to group " + expectedGroupId,
expectedGroupId, importedVocabulary.getGroupId());
AssetVocabularyLocalServiceUtil.deleteAssetVocabulary(assetVocabulary);
}
private PermissionChecker _permissionChecker;
}