com.liferay.exportimport.test.LayoutExportImportTest.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.exportimport.test.LayoutExportImportTest.java

Source

/**
 * 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.exportimport.test.util.lar.BaseExportImportTestCase;
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.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.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)
public class LayoutExportImportTest extends BaseExportImportTestCase {

    @ClassRule
    @Rule
    public static final AggregateTestRule aggregateTestRule = new LiferayIntegrationTestRule();

    @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 = { 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 = { 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);
        }
    }

}