/** * 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.item.selector.web.internal; import com.liferay.item.selector.ItemSelectorCriterion; import com.liferay.item.selector.ItemSelectorRendering; import com.liferay.item.selector.ItemSelectorReturnType; import com.liferay.item.selector.ItemSelectorView; import com.liferay.item.selector.ItemSelectorViewRenderer; import com.liferay.item.selector.constants.ItemSelectorPortletKeys; import com.liferay.item.selector.web.internal.util.ItemSelectorCriterionSerializerImpl; import com.liferay.portal.json.JSONFactoryImpl; import com.liferay.portal.kernel.json.JSONFactoryUtil; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.portlet.LiferayPortletURL; import com.liferay.portal.kernel.portlet.RequestBackedPortletURLFactory; import com.liferay.portal.kernel.test.ReflectionTestUtil; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.util.HttpUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.util.StringUtil; import com.liferay.portal.model.impl.GroupImpl; import com.liferay.portal.util.HttpImpl; import com.liferay.portal.util.PortalImpl; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; /** * @author Iván Zaera * @author Roberto Díaz */ public class ItemSelectorImplTest extends PowerMockito { @Before public void setUp() { _flickrItemSelectorCriterion = new FlickrItemSelectorCriterion(); List<ItemSelectorReturnType> desiredItemSelectorReturnTypes = new ArrayList<>(); desiredItemSelectorReturnTypes.add(_testURLItemSelectorReturnType); _flickrItemSelectorCriterion.setDesiredItemSelectorReturnTypes( desiredItemSelectorReturnTypes); _itemSelectorImpl = new ItemSelectorImpl(); _stubItemSelectorCriterionSerializer.addItemSelectorReturnType( _testFileEntryItemSelectorReturnType); _stubItemSelectorCriterionSerializer.addItemSelectorReturnType( _testStringItemSelectorReturnType); _stubItemSelectorCriterionSerializer.addItemSelectorReturnType( _testURLItemSelectorReturnType); _itemSelectorImpl.setItemSelectorCriterionSerializer( _stubItemSelectorCriterionSerializer); ReflectionTestUtil.setFieldValue( _itemSelectorImpl, "_http", new HttpImpl()); ReflectionTestUtil.setFieldValue( _itemSelectorImpl, "_portal", new PortalImpl()); _mediaItemSelectorCriterion = new MediaItemSelectorCriterion(); _mediaItemSelectorCriterion.setFileExtension("jpg"); _mediaItemSelectorCriterion.setMaxSize(2048); desiredItemSelectorReturnTypes = new ArrayList<>(); desiredItemSelectorReturnTypes.add( new TestFileEntryItemSelectorReturnType()); desiredItemSelectorReturnTypes.add(_testURLItemSelectorReturnType); _mediaItemSelectorCriterion.setDesiredItemSelectorReturnTypes( desiredItemSelectorReturnTypes); HttpUtil httpUtil = new HttpUtil(); httpUtil.setHttp(new HttpImpl()); JSONFactoryUtil jsonFactoryUtil = new JSONFactoryUtil(); jsonFactoryUtil.setJSONFactory(new JSONFactoryImpl()); PortalUtil portalUtil = new PortalUtil(); portalUtil.setPortal(new PortalImpl()); } @Test public void testGetItemSelectedEventName() { String itemSelectorURL = getItemSelectorURL( "testItemSelectedEventName", _mediaItemSelectorCriterion, _flickrItemSelectorCriterion); setUpItemSelectionCriterionHandlers(); Assert.assertEquals( "testItemSelectedEventName", _itemSelectorImpl.getItemSelectedEventName(itemSelectorURL)); } @Test public void testGetItemSelectorCriteriaFromItemSelectorURL() { String itemSelectorURL = getItemSelectorURL( StringUtil.randomString(), _mediaItemSelectorCriterion, _flickrItemSelectorCriterion); setUpItemSelectionCriterionHandlers(); List<ItemSelectorCriterion> itemSelectorCriteria = _itemSelectorImpl.getItemSelectorCriteria(itemSelectorURL); Assert.assertEquals( itemSelectorCriteria.toString(), 2, itemSelectorCriteria.size()); MediaItemSelectorCriterion mediaItemSelectorCriterion = (MediaItemSelectorCriterion)itemSelectorCriteria.get(0); Assert.assertEquals( "jpg", mediaItemSelectorCriterion.getFileExtension()); Assert.assertEquals(2048, mediaItemSelectorCriterion.getMaxSize()); List<ItemSelectorReturnType> desiredItemSelectorReturnTypes = mediaItemSelectorCriterion.getDesiredItemSelectorReturnTypes(); Assert.assertEquals( desiredItemSelectorReturnTypes.toString(), 2, desiredItemSelectorReturnTypes.size()); Assert.assertTrue( desiredItemSelectorReturnTypes.get(0) instanceof TestFileEntryItemSelectorReturnType); Assert.assertTrue( desiredItemSelectorReturnTypes.get(1) instanceof TestURLItemSelectorReturnType); Assert.assertTrue( itemSelectorCriteria.get(1) instanceof FlickrItemSelectorCriterion); } @Test public void testGetItemSelectorParameters() { Map<String, String[]> parameters = _itemSelectorImpl.getItemSelectorParameters( "itemSelectedEventName", _mediaItemSelectorCriterion, _flickrItemSelectorCriterion); Assert.assertEquals( "itemSelectedEventName", parameters.get( ItemSelectorImpl.PARAMETER_ITEM_SELECTED_EVENT_NAME)[0]); Assert.assertEquals( MediaItemSelectorCriterion.class.getName() + "," + FlickrItemSelectorCriterion.class.getName(), parameters.get(ItemSelectorImpl.PARAMETER_CRITERIA)[0]); Assert.assertNull(parameters.get("0_desiredItemSelectorReturnTypes")); Assert.assertNotNull(parameters.get("0_json")[0]); Assert.assertNotNull(parameters.get("1_json")[0]); Assert.assertEquals(parameters.toString(), 4, parameters.size()); } @Test public void testGetItemSelectorRendering() { setUpItemSelectionCriterionHandlers(); ItemSelectorRendering itemSelectorRendering = getItemSelectorRendering(); Assert.assertEquals( "itemSelectedEventName", itemSelectorRendering.getItemSelectedEventName()); List<ItemSelectorViewRenderer> itemSelectorViewRenderers = itemSelectorRendering.getItemSelectorViewRenderers(); ItemSelectorViewRenderer mediaItemSelectorViewRenderer = itemSelectorViewRenderers.get(0); MediaItemSelectorCriterion mediaItemSelectorCriterion = (MediaItemSelectorCriterion) mediaItemSelectorViewRenderer.getItemSelectorCriterion(); Assert.assertEquals( _mediaItemSelectorCriterion.getFileExtension(), mediaItemSelectorCriterion.getFileExtension()); Assert.assertEquals( _mediaItemSelectorCriterion.getMaxSize(), mediaItemSelectorCriterion.getMaxSize()); Assert.assertTrue( (ItemSelectorView<?>) mediaItemSelectorViewRenderer.getItemSelectorView() instanceof MediaItemSelectorView); ItemSelectorViewRenderer flickrItemSelectorViewRenderer = itemSelectorViewRenderers.get(1); FlickrItemSelectorCriterion flickrItemSelectorCriterion = (FlickrItemSelectorCriterion) flickrItemSelectorViewRenderer.getItemSelectorCriterion(); Assert.assertEquals( _flickrItemSelectorCriterion.getUser(), flickrItemSelectorCriterion.getUser()); Assert.assertTrue( (ItemSelectorView<?>) flickrItemSelectorViewRenderer.getItemSelectorView() instanceof FlickrItemSelectorView); Assert.assertEquals( itemSelectorViewRenderers.toString(), 2, itemSelectorViewRenderers.size()); } protected ItemSelectorRendering getItemSelectorRendering() { RequestBackedPortletURLFactory requestBackedPortletURLFactory = mock( RequestBackedPortletURLFactory.class); LiferayPortletURL mockLiferayPortletURL = mock(LiferayPortletURL.class); when( requestBackedPortletURLFactory.createControlPanelRenderURL( Mockito.anyString(), Mockito.any(Group.class), Mockito.anyLong(), Mockito.anyLong()) ).thenReturn( mockLiferayPortletURL ); Map<String, String[]> parameters = _itemSelectorImpl.getItemSelectorParameters( "itemSelectedEventName", _mediaItemSelectorCriterion, _flickrItemSelectorCriterion); ThemeDisplay themeDisplay = mock(ThemeDisplay.class); themeDisplay.setScopeGroupId(12345); when( themeDisplay.getScopeGroup() ).thenReturn( new GroupImpl() ); return _itemSelectorImpl.getItemSelectorRendering( requestBackedPortletURLFactory, parameters, themeDisplay); } protected String getItemSelectorURL( String itemSelectedEventName, ItemSelectorCriterion... itemSelectorCriteria) { Map<String, String[]> itemSelectorParameters = _itemSelectorImpl.getItemSelectorParameters( itemSelectedEventName, itemSelectorCriteria); String itemSelectorURL = "http://localhost?p_p_state=popup&p_p_mode=view"; String namespace = PortalUtil.getPortletNamespace( ItemSelectorPortletKeys.ITEM_SELECTOR); for (String itemSelectorParameterKey : itemSelectorParameters.keySet()) { itemSelectorURL = HttpUtil.addParameter( itemSelectorURL, namespace + itemSelectorParameterKey, itemSelectorParameters.get(itemSelectorParameterKey)[0]); } return itemSelectorURL; } protected void setUpItemSelectionCriterionHandlers() { _itemSelectorImpl.setItemSelectionCriterionHandler( new FlickrItemSelectorCriterionHandler()); _itemSelectorImpl.setItemSelectionCriterionHandler( new MediaItemSelectorCriterionHandler()); } private FlickrItemSelectorCriterion _flickrItemSelectorCriterion; private ItemSelectorImpl _itemSelectorImpl; private MediaItemSelectorCriterion _mediaItemSelectorCriterion; private final StubItemSelectorCriterionSerializerImpl _stubItemSelectorCriterionSerializer = new StubItemSelectorCriterionSerializerImpl(); private final ItemSelectorReturnType _testFileEntryItemSelectorReturnType = new TestFileEntryItemSelectorReturnType(); private final ItemSelectorReturnType _testStringItemSelectorReturnType = new TestStringItemSelectorReturnType(); private final ItemSelectorReturnType _testURLItemSelectorReturnType = new TestURLItemSelectorReturnType(); private class StubItemSelectorCriterionSerializerImpl extends ItemSelectorCriterionSerializerImpl { @Override public void addItemSelectorReturnType( ItemSelectorReturnType itemSelectorReturnType) { super.addItemSelectorReturnType(itemSelectorReturnType); } } }