/**
* 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.exportimport.test;
import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.exportimport.kernel.exception.LARTypeException;
import com.liferay.exportimport.kernel.lar.ExportImportHelperUtil;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys;
import com.liferay.portal.kernel.exception.LocaleException;
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.LayoutPrototype;
import com.liferay.portal.kernel.model.LayoutSetPrototype;
import com.liferay.portal.kernel.service.CompanyLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutLocalServiceUtil;
import com.liferay.portal.kernel.service.LayoutSetPrototypeLocalServiceUtil;
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.TestPropsValues;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.lar.test.BaseExportImportTestCase;
import com.liferay.portal.service.test.ServiceTestUtil;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.util.test.LayoutTestUtil;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.junit.Assert;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* @author Eduardo Garcia
*/
@RunWith(Arquillian.class)
@Sync
public class LayoutExportImportTest extends BaseExportImportTestCase {
@ClassRule
@Rule
public static final AggregateTestRule aggregateTestRule =
new AggregateTestRule(
new LiferayIntegrationTestRule(),
SynchronousDestinationTestRule.INSTANCE);
@Before
@Override
public void setUp() throws Exception {
super.setUp();
ServiceTestUtil.setUser(TestPropsValues.getUser());
}
@Test
public void testDeleteMissingLayouts() throws Exception {
Layout layout1 = LayoutTestUtil.addLayout(group);
Layout layout2 = LayoutTestUtil.addLayout(group);
List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
group.getGroupId(), false);
long[] layoutIds = ExportImportHelperUtil.getLayoutIds(layouts);
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.assertEquals(
LayoutLocalServiceUtil.getLayoutsCount(group, false),
LayoutLocalServiceUtil.getLayoutsCount(importedGroup, false));
LayoutTestUtil.addLayout(importedGroup);
Map<String, String[]> parameterMap = getImportParameterMap();
parameterMap.put(
PortletDataHandlerKeys.DELETE_MISSING_LAYOUTS,
new String[] {Boolean.TRUE.toString()});
layoutIds = new long[] {layout1.getLayoutId()};
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.assertEquals(
LayoutLocalServiceUtil.getLayoutsCount(group, false),
LayoutLocalServiceUtil.getLayoutsCount(importedGroup, false));
Layout importedLayout1 =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout1.getUuid(), importedGroup.getGroupId(), false);
Assert.assertNotNull(importedLayout1);
Layout importedLayout2 =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout2.getUuid(), importedGroup.getGroupId(), false);
Assert.assertNotNull(importedLayout2);
}
@Test
public void testExportImportCompanyGroupInvalidLARType() throws Exception {
// Import a layout set to a company layout set
Group originalImportedGroup = importedGroup;
Group originalGroup = group;
Company company = CompanyLocalServiceUtil.getCompany(
TestPropsValues.getCompanyId());
importedGroup = company.getGroup();
long[] layoutIds = new long[0];
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
finally {
importedGroup = originalImportedGroup;
}
// Import a company layout set to a layout set
group = company.getGroup();
importedGroup = originalGroup;
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
finally {
importedGroup = originalImportedGroup;
group = originalGroup;
}
}
@Test
public void testExportImportLayoutPrototypeInvalidLARType()
throws Exception {
// Import a layout prototype to a layout set
LayoutPrototype layoutPrototype = LayoutTestUtil.addLayoutPrototype(
RandomTestUtil.randomString());
group = layoutPrototype.getGroup();
importedGroup = GroupTestUtil.addGroup();
long[] layoutIds = new long[0];
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
// Import a layout prototype to a layout set pototype
LayoutSetPrototype layoutSetPrototype =
LayoutTestUtil.addLayoutSetPrototype(RandomTestUtil.randomString());
importedGroup = layoutSetPrototype.getGroup();
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
finally {
LayoutSetPrototypeLocalServiceUtil.deleteLayoutSetPrototype(
layoutSetPrototype);
importedGroup = null;
}
}
@Test
public void testExportImportLayouts() throws Exception {
LayoutTestUtil.addLayout(group);
List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
group.getGroupId(), false);
exportImportLayouts(
ExportImportHelperUtil.getLayoutIds(layouts),
getImportParameterMap());
Assert.assertEquals(
LayoutLocalServiceUtil.getLayoutsCount(group, false),
LayoutLocalServiceUtil.getLayoutsCount(importedGroup, false));
}
@Test
public void testExportImportLayoutSetInvalidLARType() throws Exception {
// Import a layout set to a layout prototype
LayoutPrototype layoutPrototype = LayoutTestUtil.addLayoutPrototype(
RandomTestUtil.randomString());
importedGroup = layoutPrototype.getGroup();
long[] layoutIds = new long[0];
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
// Import a layout set to a layout set prototype
LayoutSetPrototype layoutSetPrototype =
LayoutTestUtil.addLayoutSetPrototype(RandomTestUtil.randomString());
importedGroup = layoutSetPrototype.getGroup();
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
finally {
LayoutSetPrototypeLocalServiceUtil.deleteLayoutSetPrototype(
layoutSetPrototype);
importedGroup = null;
}
}
@Test
public void testExportImportLayoutSetPrototypeInvalidLARType()
throws Exception {
// Import a layout set prototype to a layout set
LayoutSetPrototype layoutSetPrototype =
LayoutTestUtil.addLayoutSetPrototype(RandomTestUtil.randomString());
try {
group = layoutSetPrototype.getGroup();
importedGroup = GroupTestUtil.addGroup();
long[] layoutIds = new long[0];
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
// Import a layout set prototype to a layout prototyope
LayoutPrototype layoutPrototype = LayoutTestUtil.addLayoutPrototype(
RandomTestUtil.randomString());
importedGroup = layoutPrototype.getGroup();
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.fail();
}
catch (LARTypeException larte) {
}
}
finally {
LayoutSetPrototypeLocalServiceUtil.deleteLayoutSetPrototype(
layoutSetPrototype);
group = null;
}
}
@Test
public void testExportImportLayoutsInvalidAvailableLocales()
throws Exception {
testAvailableLocales(
Arrays.asList(LocaleUtil.US, LocaleUtil.SPAIN),
Arrays.asList(LocaleUtil.US, LocaleUtil.GERMANY), true);
}
@Test
public void testExportImportLayoutsPriorities() throws Exception {
Layout layout1 = LayoutTestUtil.addLayout(group);
Layout layout2 = LayoutTestUtil.addLayout(group);
Layout layout3 = LayoutTestUtil.addLayout(group);
int priority = layout1.getPriority();
layout1.setPriority(layout3.getPriority());
layout3.setPriority(priority);
layout1 = LayoutLocalServiceUtil.updateLayout(layout1);
layout3 = LayoutLocalServiceUtil.updateLayout(layout3);
long[] layoutIds =
new long[] {layout1.getLayoutId(), layout2.getLayoutId()};
exportImportLayouts(layoutIds, getImportParameterMap());
Layout importedLayout1 =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout1.getUuid(), importedGroup.getGroupId(), false);
Assert.assertNotEquals(
layout1.getPriority(), importedLayout1.getPriority());
Layout importedLayout2 =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout2.getUuid(), importedGroup.getGroupId(), false);
Assert.assertNotEquals(
layout2.getPriority(), importedLayout2.getPriority());
List<Layout> layouts = LayoutLocalServiceUtil.getLayouts(
group.getGroupId(), false);
layoutIds = ExportImportHelperUtil.getLayoutIds(layouts);
exportImportLayouts(layoutIds, getImportParameterMap());
importedLayout1 = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout1.getUuid(), importedGroup.getGroupId(), false);
Assert.assertEquals(
layout1.getPriority(), importedLayout1.getPriority());
importedLayout2 = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout2.getUuid(), importedGroup.getGroupId(), false);
Assert.assertEquals(
layout2.getPriority(), importedLayout2.getPriority());
Layout importedLayout3 =
LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout3.getUuid(), importedGroup.getGroupId(), false);
Assert.assertEquals(
layout3.getPriority(), importedLayout3.getPriority());
}
@Test
public void testExportImportLayoutsValidAvailableLocales()
throws Exception {
testAvailableLocales(
Arrays.asList(LocaleUtil.US, LocaleUtil.US),
Arrays.asList(LocaleUtil.US, LocaleUtil.SPAIN, LocaleUtil.US),
false);
}
@Test
public void testExportImportSelectedLayouts() throws Exception {
Layout layout = LayoutTestUtil.addLayout(group);
long[] layoutIds = new long[] {layout.getLayoutId()};
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.assertEquals(
layoutIds.length,
LayoutLocalServiceUtil.getLayoutsCount(importedGroup, false));
importedLayout = LayoutLocalServiceUtil.fetchLayoutByUuidAndGroupId(
layout.getUuid(), importedGroup.getGroupId(), false);
Assert.assertNotNull(importedLayout);
}
@Test
public void testFriendlyURLCollision() throws Exception {
String defaultLanguageId = LocaleUtil.toLanguageId(
LocaleUtil.getDefault());
Layout layoutA = LayoutTestUtil.addLayout(group);
String friendlyURLA = layoutA.getFriendlyURL();
layoutA = LayoutLocalServiceUtil.updateFriendlyURL(
layoutA.getUserId(), layoutA.getPlid(), friendlyURLA + "-de", "de");
Layout layoutB = LayoutTestUtil.addLayout(group);
String friendlyURLB = layoutB.getFriendlyURL();
layoutB = LayoutLocalServiceUtil.updateFriendlyURL(
layoutB.getUserId(), layoutB.getPlid(), friendlyURLB + "-de", "de");
long[] layoutIds = {layoutA.getLayoutId(), layoutB.getLayoutId()};
exportImportLayouts(layoutIds, getImportParameterMap());
layoutA = LayoutLocalServiceUtil.updateFriendlyURL(
layoutA.getUserId(), layoutA.getPlid(), "/temp", defaultLanguageId);
layoutA = LayoutLocalServiceUtil.updateFriendlyURL(
layoutA.getUserId(), layoutA.getPlid(), "/temp-de", "de");
layoutB = LayoutLocalServiceUtil.updateFriendlyURL(
layoutB.getUserId(), layoutB.getPlid(), friendlyURLA,
defaultLanguageId);
LayoutLocalServiceUtil.updateFriendlyURL(
layoutB.getUserId(), layoutB.getPlid(), friendlyURLA + "-de", "de");
layoutA = LayoutLocalServiceUtil.updateFriendlyURL(
layoutA.getUserId(), layoutA.getPlid(), friendlyURLB,
defaultLanguageId);
LayoutLocalServiceUtil.updateFriendlyURL(
layoutA.getUserId(), layoutA.getPlid(), friendlyURLB + "-de", "de");
exportImportLayouts(layoutIds, getImportParameterMap());
}
protected void testAvailableLocales(
Collection<Locale> sourceAvailableLocales,
Collection<Locale> targetAvailableLocales, boolean expectFailure)
throws Exception {
group = GroupTestUtil.updateDisplaySettings(
group.getGroupId(), sourceAvailableLocales, null);
importedGroup = GroupTestUtil.updateDisplaySettings(
importedGroup.getGroupId(), targetAvailableLocales, null);
LayoutTestUtil.addLayout(group);
long[] layoutIds = new long[0];
try {
exportImportLayouts(layoutIds, getImportParameterMap());
Assert.assertFalse(expectFailure);
}
catch (LocaleException le) {
Assert.assertTrue(expectFailure);
}
}
}