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

Java tutorial

Introduction

Here is the source code for com.liferay.exportimport.test.ExportImportDateUtilTest.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.lar.ExportImportDateUtil;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.lar.PortletDataContextImpl;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.LayoutSet;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.service.LayoutSetLocalServiceUtil;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun;
import com.liferay.portal.kernel.test.util.GroupTestUtil;
import com.liferay.portal.kernel.util.DateRange;
import com.liferay.portal.kernel.util.PortletKeys;
import com.liferay.portal.kernel.util.Time;
import com.liferay.portal.kernel.util.UnicodeProperties;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.util.test.LayoutTestUtil;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.portlet.PortletPreferences;

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 Mate Thurzo
 */
@RunWith(Arquillian.class)
public class ExportImportDateUtilTest {

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

    @Before
    public void setUp() throws Exception {
        _group = GroupTestUtil.addGroup();

        _layout = LayoutTestUtil.addLayout(_group);

        _layoutSet = _layout.getLayoutSet();

        _portletPreferences = PortletPreferencesFactoryUtil.getPortletSetup(_layout, PortletKeys.EXPORT_IMPORT,
                null);
    }

    @Test
    public void testGetLastPublishDateFromLastPublishDate() throws Exception {
        PortletDataContext portletDataContext = new PortletDataContextImpl(null);

        portletDataContext.setGroupId(_group.getGroupId());

        Date portletDataContextLastPublishDate = new Date();

        updateLastPublishDate(portletDataContext, ExportImportDateUtil.RANGE_FROM_LAST_PUBLISH_DATE,
                portletDataContextLastPublishDate);

        Date portletLastPublishDate = new Date();

        updateLastPublishDate(_portletPreferences, portletLastPublishDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(portletDataContext, _portletPreferences);

        Assert.assertEquals(portletDataContextLastPublishDate, lastPublishDate);
    }

    @Test
    public void testGetLastPublishDateNotFromLastPublishDate() throws Exception {

        PortletDataContext portletDataContext = new PortletDataContextImpl(null);

        portletDataContext.setGroupId(_group.getGroupId());

        Date portletDataContextLastPublishDate = new Date();

        updateLastPublishDate(portletDataContext, ExportImportDateUtil.RANGE_ALL,
                portletDataContextLastPublishDate);

        Date portletLastPublishDate = new Date();

        updateLastPublishDate(_portletPreferences, portletLastPublishDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(portletDataContext, _portletPreferences);

        Assert.assertEquals(portletDataContextLastPublishDate, lastPublishDate);
    }

    @Test
    public void testGetLastPublishDateWithoutPorltetLastPublishDate() throws Exception {

        PortletDataContext portletDataContext = new PortletDataContextImpl(null);

        portletDataContext.setGroupId(_group.getGroupId());

        updateLastPublishDate(portletDataContext, ExportImportDateUtil.RANGE_FROM_LAST_PUBLISH_DATE, new Date());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(portletDataContext, _portletPreferences);

        Assert.assertNull(lastPublishDate);
    }

    @Test
    public void testGetLastPublishDateWithoutPortletDataContextLastPublishDate() throws Exception {

        PortletDataContext portletDataContext = new PortletDataContextImpl(null);

        portletDataContext.setGroupId(_group.getGroupId());

        updateLastPublishDate(portletDataContext, ExportImportDateUtil.RANGE_FROM_LAST_PUBLISH_DATE, null);

        Date portletLastPublishDate = new Date();

        updateLastPublishDate(_portletPreferences, portletLastPublishDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(portletDataContext, _portletPreferences);

        Assert.assertEquals(portletLastPublishDate, lastPublishDate);
    }

    @Test
    public void testUpdateLastPublishDateFirstPublishLayoutSet() throws Exception {

        Date now = new Date();

        Date startDate = new Date(now.getTime() + Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        // It should be null, since no update should have happened, because it
        // would result in a gap for contents

        Assert.assertNull(lastPublishDate);
    }

    @Test
    public void testUpdateLastPublishDateFirstPublishPortlet() throws Exception {

        Date now = new Date();

        Date startDate = new Date(now.getTime() + Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        // It should be null, since no update should have happened, because it
        // would result in a gap for contents

        Assert.assertNull(lastPublishDate);
    }

    @Test
    public void testUpdateLastPublishDateOverlappingRangeLayoutSet() throws Exception {

        Date now = new Date();

        updateLastPublishDate(_layoutSet, now);

        Date startDate = new Date(now.getTime() - Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateOverlappingRangePortlet() throws Exception {

        Date now = new Date();

        updateLastPublishDate(_portletPreferences, now);

        Date startDate = new Date(now.getTime() - Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateRangeBeforeLastPublishDateLayoutSet() throws Exception {

        Date now = new Date();

        updateLastPublishDate(_layoutSet, now);

        Date startDate = new Date(now.getTime() - Time.WEEK);
        Date endDate = new Date(now.getTime() - Time.DAY);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        Assert.assertEquals(now.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateRangeBeforeLastPublishDatePortlet() throws Exception {

        Date now = new Date();

        updateLastPublishDate(_portletPreferences, now);

        Date startDate = new Date(now.getTime() - Time.WEEK);
        Date endDate = new Date(now.getTime() - Time.DAY);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(now.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateWithGapLayoutSet() throws Exception {
        Date now = new Date();

        updateLastPublishDate(_layoutSet, now);

        Date startDate = new Date(now.getTime() + Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        Assert.assertEquals(now.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateWithGapPortlet() throws Exception {
        Date now = new Date();

        updateLastPublishDate(_portletPreferences, now);

        Date startDate = new Date(now.getTime() + Time.DAY);
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(now.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateWithoutExistingLastPublishDate() throws Exception {

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertNull(lastPublishDate);

        Date now = new Date();

        DateRange dateRange = new DateRange(now, null);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange, now);

        lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertNull(lastPublishDate);

        dateRange = new DateRange(null, now);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange, now);

        lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(now, lastPublishDate);
    }

    @Test
    public void testUpdateLastPublishDateWithoutGapLayoutSet() throws Exception {

        Date now = new Date();

        updateLastPublishDate(_layoutSet, now);

        // Start date is exactly the last publish date

        Date startDate = new Date(now.getTime());
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());

        updateLastPublishDate(_layoutSet, now);

        // End date is exactly the last publish date

        startDate = new Date(now.getTime() - Time.WEEK);
        endDate = new Date(now.getTime());

        dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(_layoutSet.getGroupId(), _layoutSet.isPrivateLayout(), dateRange,
                endDate);

        _layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(_layoutSet.getLayoutSetId());

        lastPublishDate = ExportImportDateUtil.getLastPublishDate(_layoutSet);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());
    }

    @Test
    public void testUpdateLastPublishDateWithoutGapPortlet() throws Exception {
        Date now = new Date();

        updateLastPublishDate(_portletPreferences, now);

        // Start date is exactly the last publish date

        Date startDate = new Date(now.getTime());
        Date endDate = new Date(now.getTime() + Time.WEEK);

        DateRange dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        Date lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());

        updateLastPublishDate(_portletPreferences, now);

        // End date is exactly the last publish date

        startDate = new Date(now.getTime() - Time.WEEK);
        endDate = new Date(now.getTime());

        dateRange = new DateRange(startDate, endDate);

        ExportImportDateUtil.updateLastPublishDate(PortletKeys.EXPORT_IMPORT, _portletPreferences, dateRange,
                endDate);

        lastPublishDate = ExportImportDateUtil.getLastPublishDate(_portletPreferences);

        Assert.assertEquals(endDate.getTime(), lastPublishDate.getTime());
    }

    protected void updateLastPublishDate(LayoutSet layoutSet, Date lastPublishDate) throws Exception {

        UnicodeProperties settingsProperties = layoutSet.getSettingsProperties();

        settingsProperties.setProperty("last-publish-date", String.valueOf(lastPublishDate.getTime()));

        LayoutSetLocalServiceUtil.updateSettings(layoutSet.getGroupId(), layoutSet.isPrivateLayout(),
                settingsProperties.toString());
    }

    protected void updateLastPublishDate(PortletDataContext portletDataContext, String range, Date startDate)
            throws Exception {

        Map<String, String[]> parameterMap = portletDataContext.getParameterMap();

        if (portletDataContext.getParameterMap() == null) {
            parameterMap = new HashMap<>();

            portletDataContext.setParameterMap(parameterMap);
        }

        parameterMap.put("range", new String[] { range });

        portletDataContext.setStartDate(startDate);
    }

    protected void updateLastPublishDate(PortletPreferences portletPreferences, Date lastPublishDate)
            throws Exception {

        portletPreferences.setValue("last-publish-date", String.valueOf(lastPublishDate.getTime()));

        portletPreferences.store();
    }

    @DeleteAfterTestRun
    private Group _group;

    private Layout _layout;
    private LayoutSet _layoutSet;
    private PortletPreferences _portletPreferences;

}