/** * 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.asset.publisher.service.test; import com.liferay.arquillian.extension.junit.bridge.junit.Arquillian; import com.liferay.asset.kernel.model.AssetCategory; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.asset.kernel.model.AssetVocabulary; import com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil; import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil; import com.liferay.asset.kernel.service.AssetVocabularyLocalServiceUtil; import com.liferay.asset.publisher.test.util.AssetPublisherTestUtil; import com.liferay.asset.publisher.web.util.AssetPublisherUtil; import com.liferay.journal.model.JournalArticle; import com.liferay.journal.service.JournalArticleLocalServiceUtil; import com.liferay.journal.test.util.JournalTestUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.security.permission.PermissionChecker; import com.liferay.portal.kernel.security.permission.PermissionCheckerFactoryUtil; import com.liferay.portal.kernel.service.ServiceContext; 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.test.util.RandomTestUtil; import com.liferay.portal.kernel.test.util.ServiceContextTestUtil; import com.liferay.portal.kernel.test.util.TestPropsValues; import com.liferay.portal.kernel.util.ArrayUtil; import com.liferay.portal.test.rule.LiferayIntegrationTestRule; import java.util.ArrayList; import java.util.List; 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; import org.springframework.mock.web.portlet.MockPortletPreferences; import org.springframework.mock.web.portlet.MockPortletRequest; /** * Tests basic capabilities of the Asset Publisher and its integration with * Asset Categories and Tags services including * * <ul> * <li> * Adding vocabularies and categories * </li> * <li> * Adding asset entries * </li> * <li> * Searching for asset entries using category and tag filters * </li> * </ul> * * @author Roberto Díaz */ @RunWith(Arquillian.class) public class AssetPublisherServiceTest { @ClassRule @Rule public static final AggregateTestRule aggregateTestRule = new LiferayIntegrationTestRule(); @Before public void setUp() throws Exception { _group = GroupTestUtil.addGroup(); _assetEntries = addAssetEntries( _NO_ASSET_CATEGORY_IDS, _NO_ASSET_TAG_NAMES, 5, true); _permissionChecker = PermissionCheckerFactoryUtil.create( TestPropsValues.getUser()); } @Test public void testGetAssetEntries() throws Exception { PortletPreferences portletPreferences = getAssetPublisherPortletPreferences(); List<AssetEntry> assetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, false, false); Assert.assertEquals(_assetEntries, assetEntries); } @Test public void testGetAssetEntriesFilteredByAssetCategoryIds() throws Exception { addAssetVocabulary(); long[] allAssetCategoryIds = {_assetCategoryIds[0], _assetCategoryIds[1], _assetCategoryIds[2]}; List<AssetEntry> expectedAssetEntries = addAssetEntries( allAssetCategoryIds, _NO_ASSET_TAG_NAMES, 2, true); PortletPreferences portletPreferences = getAssetPublisherPortletPreferences(); List<AssetEntry> assetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, false, false); Assert.assertEquals( assetEntries.toString(), _assetEntries.size() + expectedAssetEntries.size(), assetEntries.size()); List<AssetEntry> filteredAsssetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, allAssetCategoryIds, _NO_ASSET_TAG_NAMES, false, false); Assert.assertEquals(expectedAssetEntries, filteredAsssetEntries); } @Test public void testGetAssetEntriesFilteredByAssetCategoryIdsAndAssetTagNames() throws Exception { addAssetVocabulary(); long[] allCategoyIds = { _assetCategoryIds[0], _assetCategoryIds[1], _assetCategoryIds[2], _assetCategoryIds[3] }; String[] allAssetTagNames = {_ASSET_TAG_NAMES[0], _ASSET_TAG_NAMES[1]}; List<AssetEntry> expectedAssetEntries = addAssetEntries( allCategoyIds, allAssetTagNames, 2, true); PortletPreferences portletPreferences = getAssetPublisherPortletPreferences(); List<AssetEntry> assetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, false, false); Assert.assertEquals( assetEntries.toString(), _assetEntries.size() + expectedAssetEntries.size(), assetEntries.size()); List<AssetEntry> filteredAssetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, allCategoyIds, allAssetTagNames, false, false); Assert.assertEquals(expectedAssetEntries, filteredAssetEntries); } @Test public void testGetAssetEntriesFilteredByAssetTagNames() throws Exception { String[] allAssetTagNames = {_ASSET_TAG_NAMES[0], _ASSET_TAG_NAMES[1]}; List<AssetEntry> expectedAssetEntries = addAssetEntries( _NO_ASSET_CATEGORY_IDS, allAssetTagNames, 2, true); PortletPreferences portletPreferences = getAssetPublisherPortletPreferences(); List<AssetEntry> assetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, false, false); Assert.assertEquals( assetEntries.toString(), _assetEntries.size() + expectedAssetEntries.size(), assetEntries.size()); List<AssetEntry> filteredAssetEntries = AssetPublisherUtil.getAssetEntries( new MockPortletRequest(), portletPreferences, _permissionChecker, new long[] {_group.getGroupId()}, _NO_ASSET_CATEGORY_IDS, allAssetTagNames, false, false); Assert.assertEquals(expectedAssetEntries, filteredAssetEntries); } protected void addAssetCategories(long vocabularyId) throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(); for (String assetCategoryName : _ASSET_CATEGORY_NAMES) { AssetCategory assetCategory = AssetCategoryLocalServiceUtil.addCategory( TestPropsValues.getUserId(), serviceContext.getScopeGroupId(), assetCategoryName, vocabularyId, serviceContext); _assetCategoryIds = ArrayUtil.append( _assetCategoryIds, assetCategory.getCategoryId()); } } protected List<AssetEntry> addAssetEntries( long[] assetCategoryIds, String[] assetTagNames, int count, boolean manualMode) throws Exception { List<AssetEntry> assetEntries = new ArrayList<>(); for (int i = 0; i < count; i++) { JournalArticle article = JournalTestUtil.addArticle( _group.getGroupId(), RandomTestUtil.randomString(), RandomTestUtil.randomString(100)); JournalArticleLocalServiceUtil.updateAsset( TestPropsValues.getUserId(), article, assetCategoryIds, assetTagNames, null, null); AssetEntry assetEntry = AssetEntryLocalServiceUtil.getEntry( JournalArticle.class.getName(), article.getResourcePrimKey()); assetEntries.add(assetEntry); if (manualMode) { _assetEntryXmls = ArrayUtil.append( _assetEntryXmls, AssetPublisherTestUtil.getAssetEntryXml(assetEntry)); } } return assetEntries; } protected void addAssetVocabulary() throws Exception { ServiceContext serviceContext = ServiceContextTestUtil.getServiceContext(_group.getGroupId()); serviceContext.setAddGroupPermissions(false); serviceContext.setAddGuestPermissions(false); AssetVocabulary assetVocabulary = AssetVocabularyLocalServiceUtil.addVocabulary( TestPropsValues.getUserId(), _group.getGroupId(), RandomTestUtil.randomString(), serviceContext); addAssetCategories(assetVocabulary.getVocabularyId()); } protected PortletPreferences getAssetPublisherPortletPreferences() throws Exception { PortletPreferences portletPreferences = new MockPortletPreferences(); portletPreferences.setValues("assetEntryXml", _assetEntryXmls); return portletPreferences; } private static final String[] _ASSET_CATEGORY_NAMES = {"Athletic", "Barcelona", "RealMadrid", "Sevilla", "Sporting"}; private static final String[] _ASSET_TAG_NAMES = {"basketball", "football", "tennis"}; private static final long[] _NO_ASSET_CATEGORY_IDS = new long[0]; private static final String[] _NO_ASSET_TAG_NAMES = new String[0]; private long[] _assetCategoryIds = new long[0]; private List<AssetEntry> _assetEntries = new ArrayList<>(); private String[] _assetEntryXmls = new String[0]; @DeleteAfterTestRun private Group _group; private PermissionChecker _permissionChecker; }