com.liferay.journal.service.persistence.test.JournalArticleFinderTest.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.journal.service.persistence.test.JournalArticleFinderTest.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.journal.service.persistence.test;

import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.test.util.DDMStructureTestUtil;
import com.liferay.dynamic.data.mapping.test.util.DDMTemplateTestUtil;
import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.model.JournalArticleConstants;
import com.liferay.journal.model.JournalFolder;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.journal.service.persistence.JournalArticleFinder;
import com.liferay.journal.test.util.JournalTestUtil;
import com.liferay.journal.util.comparator.ArticleCreateDateComparator;
import com.liferay.journal.util.comparator.ArticleDisplayDateComparator;
import com.liferay.journal.util.comparator.ArticleIDComparator;
import com.liferay.journal.util.comparator.ArticleModifiedDateComparator;
import com.liferay.journal.util.comparator.ArticleReviewDateComparator;
import com.liferay.journal.util.comparator.ArticleVersionComparator;
import com.liferay.portal.kernel.dao.orm.QueryDefinition;
import com.liferay.portal.kernel.model.Group;
import com.liferay.portal.kernel.test.rule.AggregateTestRule;
import com.liferay.portal.kernel.test.rule.DeleteAfterTestRun;
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.TestPropsValues;
import com.liferay.portal.kernel.transaction.Propagation;
import com.liferay.portal.kernel.transaction.Transactional;
import com.liferay.portal.kernel.util.OrderByComparator;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.test.rule.LiferayIntegrationTestRule;
import com.liferay.portal.test.rule.TransactionalTestRule;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import org.junit.After;
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;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.ServiceReference;

/**
 * @author Zsolt Berentey
 * @author Laszlo Csontos
 */
@RunWith(Arquillian.class)
@Sync
public class JournalArticleFinderTest {

    @ClassRule
    @Rule
    public static final AggregateTestRule aggregateTestRule = new AggregateTestRule(
            new LiferayIntegrationTestRule(), SynchronousDestinationTestRule.INSTANCE,
            new TransactionalTestRule(Propagation.SUPPORTS, "com.liferay.journal.service"));

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

        _ddmStructure = DDMStructureTestUtil.addStructure(_group.getGroupId(), JournalArticle.class.getName());

        _folder = JournalTestUtil.addFolder(_group.getGroupId(), "Folder 1");

        _basicWebContentDDMStructure = DDMStructureTestUtil.addStructure(_group.getGroupId(),
                JournalArticle.class.getName());

        _basicWebContentDDMTemplate = DDMTemplateTestUtil.addTemplate(_group.getGroupId(),
                _basicWebContentDDMStructure.getStructureId(), PortalUtil.getClassNameId(JournalArticle.class));

        JournalArticle article = JournalTestUtil.addArticleWithXMLContent(_group.getGroupId(),
                _folder.getFolderId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT, "<title>Article 1</title>",
                _basicWebContentDDMStructure.getStructureKey(), _basicWebContentDDMTemplate.getTemplateKey());

        _articles.add(article);

        JournalFolder folder = JournalTestUtil.addFolder(_group.getGroupId(), "Folder 2");

        DDMTemplate ddmTemplate = DDMTemplateTestUtil.addTemplate(_group.getGroupId(),
                _ddmStructure.getStructureId(), PortalUtil.getClassNameId(JournalArticle.class));

        article = JournalTestUtil.addArticleWithXMLContent(_group.getGroupId(), folder.getFolderId(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, "<title>Article 2</title>",
                _ddmStructure.getStructureKey(), ddmTemplate.getTemplateKey());

        _articles.add(article);

        article = JournalTestUtil.addArticleWithXMLContent(_group.getGroupId(), folder.getFolderId(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, "<title>Article 3</title>",
                _basicWebContentDDMStructure.getStructureKey(), _basicWebContentDDMTemplate.getTemplateKey());

        _articles.add(article);

        article.setUserId(_USER_ID);

        Calendar calendar = new GregorianCalendar();

        calendar.add(Calendar.DATE, -1);

        article.setExpirationDate(calendar.getTime());
        article.setReviewDate(calendar.getTime());

        JournalArticleLocalServiceUtil.updateJournalArticle(article);

        JournalArticleLocalServiceUtil.moveArticleToTrash(TestPropsValues.getUserId(), article);

        article = JournalTestUtil.addArticleWithXMLContent(_group.getGroupId(), folder.getFolderId(),
                PortalUtil.getClassNameId(DDMStructure.class), "<title>Article 4</title>",
                _ddmStructure.getStructureKey(), ddmTemplate.getTemplateKey());

        _articles.add(article);

        _folderIds.clear();

        _folderIds.add(_folder.getFolderId());
        _folderIds.add(folder.getFolderId());

        _article = _articles.get(0);

        Bundle bundle = FrameworkUtil.getBundle(getClass());

        _bundleContext = bundle.getBundleContext();

        _serviceReference = _bundleContext.getServiceReference(JournalArticleFinder.class);

        _journalArticleFinder = _bundleContext.getService(_serviceReference);
    }

    @After
    public void tearDown() {
        _bundleContext.ungetService(_serviceReference);
    }

    @Test
    public void testDraftArticles() throws Exception {
        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>(WorkflowConstants.STATUS_ANY);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 2);

        queryDefinition.setOwnerUserId(TestPropsValues.getUserId());

        JournalArticle article = JournalTestUtil.addArticleWithXMLContent(_group.getGroupId(),
                _folder.getFolderId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT, "<title>Article 1</title>",
                _basicWebContentDDMStructure.getStructureKey(), _basicWebContentDDMTemplate.getTemplateKey());

        article.setUserId(_USER_ID);
        article.setStatus(WorkflowConstants.STATUS_DRAFT);

        JournalArticleLocalServiceUtil.updateJournalArticle(article);

        _articles.add(article);

        queryDefinition.setIncludeOwner(true);
        queryDefinition.setOwnerUserId(_USER_ID);
        queryDefinition.setStatus(WorkflowConstants.STATUS_APPROVED);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 3);

        queryDefinition.setIncludeOwner(false);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 0);
    }

    @Test
    public void testFindByExpirationDate() throws Exception {

        // Status any

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>();

        queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);

        List<JournalArticle> articles = _journalArticleFinder
                .findByExpirationDate(JournalArticleConstants.CLASSNAME_ID_DEFAULT, new Date(), queryDefinition);

        Assert.assertEquals(articles.toString(), 1, articles.size());

        JournalArticle article = articles.get(0);

        Assert.assertEquals(_USER_ID, article.getUserId());

        // Status in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH);

        articles = _journalArticleFinder.findByExpirationDate(JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                new Date(), queryDefinition);

        Assert.assertEquals(articles.toString(), 1, articles.size());

        article = articles.get(0);

        Assert.assertEquals(_USER_ID, article.getUserId());

        // Status not in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH, true);

        articles = _journalArticleFinder.findByExpirationDate(JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                new Date(), queryDefinition);

        Assert.assertEquals(articles.toString(), 0, articles.size());
    }

    @Test
    public void testFindByR_D() throws Exception {
        JournalArticle article = _journalArticleFinder.findByR_D(_article.getResourcePrimKey(), new Date());

        Assert.assertNotNull(article);

        Assert.assertEquals(_folder.getFolderId(), article.getFolderId());
    }

    @Test
    public void testFindByReviewDate() throws Exception {
        Calendar calendar = new GregorianCalendar();

        calendar.add(Calendar.DATE, -2);

        List<JournalArticle> articles = _journalArticleFinder
                .findByReviewDate(JournalArticleConstants.CLASSNAME_ID_DEFAULT, new Date(), calendar.getTime());

        Assert.assertEquals(articles.toString(), 1, articles.size());

        JournalArticle article = articles.get(0);

        Assert.assertEquals(_USER_ID, article.getUserId());
    }

    @Test
    public void testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R() throws Exception {

        // Status any

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>();

        queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);

        testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R(_group.getCompanyId(), _group.getGroupId(), _folderIds,
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, null, null, "Article", null, null, null,
                (String) null, null, null, null, null, true, queryDefinition, 3);
        testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R(_group.getCompanyId(), _group.getGroupId(), _folderIds,
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, null, null, null, null, null, null,
                _ddmStructure.getStructureKey(), null, null, null, null, true, queryDefinition, 1);

        // Status in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH);

        testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R(_group.getCompanyId(), _group.getGroupId(), _folderIds,
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, null, null, "Article", null, null, null,
                (String) null, null, null, null, null, true, queryDefinition, 1);

        // Status not in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH, true);

        testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R(_group.getCompanyId(), _group.getGroupId(), _folderIds,
                PortalUtil.getClassNameId(DDMStructure.class), null, null, "Article", null, null, null,
                (String) null, null, null, null, null, true, queryDefinition, 1);
    }

    @Test
    public void testQueryByG_C_S() throws Exception {

        // Status any

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>();

        queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);

        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _ddmStructure.getStructureKey(), queryDefinition, 1);
        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _basicWebContentDDMStructure.getStructureKey(), queryDefinition, 2);

        // Status in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH);

        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _ddmStructure.getStructureKey(), queryDefinition, 0);
        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _basicWebContentDDMStructure.getStructureKey(), queryDefinition, 1);

        // Status not in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH, true);

        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _ddmStructure.getStructureKey(), queryDefinition, 1);
        testQueryByG_C_S(_group.getGroupId(), JournalArticleConstants.CLASSNAME_ID_DEFAULT,
                _basicWebContentDDMStructure.getStructureKey(), queryDefinition, 1);
    }

    @Test
    public void testQueryByG_F() throws Exception {

        // Status any

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>();

        queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);

        testQueryByG_F(_group.getGroupId(), _folderIds, queryDefinition, 4);

        // Status in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH);

        testQueryByG_F(_group.getGroupId(), _folderIds, queryDefinition, 1);

        // Status not in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH, true);

        testQueryByG_F(_group.getGroupId(), _folderIds, queryDefinition, 3);

        // Comparators

        testQueryByG_F(new ArticleCreateDateComparator(true));
        testQueryByG_F(new ArticleCreateDateComparator(false));
        testQueryByG_F(new ArticleDisplayDateComparator(true));
        testQueryByG_F(new ArticleDisplayDateComparator(false));
        testQueryByG_F(new ArticleIDComparator(true));
        testQueryByG_F(new ArticleIDComparator(false));
        testQueryByG_F(new ArticleModifiedDateComparator(true));
        testQueryByG_F(new ArticleModifiedDateComparator(false));
        testQueryByG_F(new ArticleReviewDateComparator(true));
        testQueryByG_F(new ArticleReviewDateComparator(false));
        testQueryByG_F(new ArticleVersionComparator(true));
        testQueryByG_F(new ArticleVersionComparator(false));
    }

    @Test
    public void testQueryByG_F_C() throws Exception {

        // Status any (constructor), which is status not in trash

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>(WorkflowConstants.STATUS_ANY);

        queryDefinition.setOwnerUserId(TestPropsValues.getUserId());

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 2);

        // Status any

        queryDefinition.setStatus(WorkflowConstants.STATUS_ANY);
        queryDefinition.setOwnerUserId(_USER_ID);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 1);

        // Status in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH);
        queryDefinition.setOwnerUserId(_USER_ID);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 1);

        // Status not in trash

        queryDefinition.setStatus(WorkflowConstants.STATUS_IN_TRASH, true);
        queryDefinition.setOwnerUserId(_USER_ID);

        testQueryByG_C(_group.getGroupId(), Collections.<Long>emptyList(),
                JournalArticleConstants.CLASSNAME_ID_DEFAULT, queryDefinition, 0);
    }

    protected void prepareSortedArticles() throws Exception {
        Calendar calendar = new GregorianCalendar();

        calendar.set(Calendar.DATE, 1);
        calendar.set(Calendar.MONTH, 1);
        calendar.set(Calendar.YEAR, 2014);

        for (int i = 0; i < _articles.size(); ++i) {
            calendar.add(Calendar.DATE, 1);

            JournalArticle article = _articles.get(i);

            article.setCreateDate(calendar.getTime());
            article.setModifiedDate(calendar.getTime());
            article.setArticleId("a" + i);
            article.setVersion(i);
            article.setDisplayDate(calendar.getTime());
            article.setReviewDate(calendar.getTime());

            JournalArticleLocalServiceUtil.updateJournalArticle(article);
        }
    }

    protected void testQueryByC_G_F_C_A_V_T_D_C_T_S_T_D_R(long companyId, long groupId, List<Long> folderIds,
            long classNameId, String articleId, Double version, String title, String description, String content,
            String type, String ddmStructureKey, String ddmTemplateKey, Date displayDateGT, Date displayDateLT,
            Date reviewDate, boolean andOperator, QueryDefinition<JournalArticle> queryDefinition,
            int expectedCount) throws Exception {

        int actualCount = _journalArticleFinder.countByC_G_F_C_A_V_T_D_C_S_T_D_R(companyId, groupId, folderIds,
                classNameId, articleId, version, title, description, content, ddmStructureKey, ddmTemplateKey,
                displayDateGT, displayDateLT, reviewDate, andOperator, queryDefinition);

        Assert.assertEquals(expectedCount, actualCount);

        List<JournalArticle> articles = _journalArticleFinder.findByC_G_F_C_A_V_T_D_C_S_T_D_R(companyId, groupId,
                folderIds, classNameId, articleId, version, title, description, content, ddmStructureKey,
                ddmTemplateKey, displayDateGT, displayDateLT, reviewDate, andOperator, queryDefinition);

        actualCount = articles.size();

        Assert.assertEquals(expectedCount, actualCount);
    }

    protected void testQueryByG_C(long groupId, List<Long> folderIds, long classNameId,
            QueryDefinition<JournalArticle> queryDefinition, int expectedCount) throws Exception {

        int actualCount = _journalArticleFinder.countByG_F_C(groupId, folderIds, classNameId, queryDefinition);

        List<JournalArticle> articles = _journalArticleFinder.findByG_F_C(groupId, folderIds, classNameId,
                queryDefinition);

        Assert.assertEquals(expectedCount, actualCount);

        actualCount = articles.size();

        Assert.assertEquals(expectedCount, actualCount);
    }

    protected void testQueryByG_C_S(long groupId, long classNameId, String ddmStructureKey,
            QueryDefinition<JournalArticle> queryDefinition, int expectedCount) throws Exception {

        int actualCount = _journalArticleFinder.countByG_C_S(groupId, classNameId, ddmStructureKey,
                queryDefinition);

        Assert.assertEquals(expectedCount, actualCount);

        List<JournalArticle> articles = _journalArticleFinder.findByG_C_S(groupId, classNameId, ddmStructureKey,
                queryDefinition);

        actualCount = articles.size();

        Assert.assertEquals(expectedCount, actualCount);
    }

    protected void testQueryByG_F(long groupId, List<Long> folderIds,
            QueryDefinition<JournalArticle> queryDefinition, int expectedCount) throws Exception {

        int actualCount = _journalArticleFinder.countByG_F(groupId, folderIds, queryDefinition);

        Assert.assertEquals(expectedCount, actualCount);

        List<JournalArticle> articles = _journalArticleFinder.findByG_F(groupId, folderIds, queryDefinition);

        actualCount = articles.size();

        Assert.assertEquals(expectedCount, actualCount);
    }

    protected void testQueryByG_F(OrderByComparator<JournalArticle> orderByComparator) throws Exception {

        prepareSortedArticles();

        QueryDefinition<JournalArticle> queryDefinition = new QueryDefinition<>();

        queryDefinition.setOrderByComparator(orderByComparator);

        List<JournalArticle> expectedArticles = null;

        if (orderByComparator.isAscending()) {
            expectedArticles = _articles;
        } else {
            expectedArticles = new ArrayList<>(_articles);

            Collections.reverse(expectedArticles);
        }

        List<JournalArticle> actualArticles = _journalArticleFinder.findByG_F(_group.getGroupId(), _folderIds,
                queryDefinition);

        Assert.assertEquals(expectedArticles, actualArticles);
    }

    private static final long _USER_ID = 1234L;

    private JournalArticle _article;
    private final List<JournalArticle> _articles = new ArrayList<>();
    private DDMStructure _basicWebContentDDMStructure;
    private DDMTemplate _basicWebContentDDMTemplate;
    private BundleContext _bundleContext;
    private DDMStructure _ddmStructure;
    private JournalFolder _folder;
    private final List<Long> _folderIds = new ArrayList<>();

    @DeleteAfterTestRun
    private Group _group;

    private JournalArticleFinder _journalArticleFinder;
    private ServiceReference<JournalArticleFinder> _serviceReference;

}