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