/**
* 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.portal.search.web.internal.result.display.builder;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetRenderer;
import com.liferay.asset.kernel.model.AssetRendererFactory;
import com.liferay.asset.kernel.service.AssetEntryLocalService;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.model.Company;
import com.liferay.portal.kernel.model.User;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.DocumentHelper;
import com.liferay.portal.kernel.search.DocumentImpl;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.IndexerRegistry;
import com.liferay.portal.kernel.search.Summary;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.ResourceActions;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.Html;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.LocaleThreadLocal;
import com.liferay.portal.kernel.util.Props;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.search.test.SearchTestUtil;
import com.liferay.portal.search.web.internal.display.context.PortletURLFactory;
import com.liferay.portal.search.web.internal.display.context.SearchResultPreferences;
import com.liferay.portal.search.web.internal.result.display.context.SearchResultSummaryDisplayContext;
import java.util.Locale;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/**
* @author Lino Alves
* @author André de Oliveira
*/
public class SearchResultSummaryDisplayBuilderTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
setUpAssetRenderer();
setUpHtmlUtil();
setUpLocaleThreadLocal();
setUpProps();
themeDisplay = createThemeDisplay();
}
@Test
public void testTagsURLDownloadAndUserPortraitFromResult()
throws Exception {
long userId = RandomTestUtil.randomLong();
AssetEntry assetEntry = createAssetEntryWithTagsPresent(userId);
String className = RandomTestUtil.randomString();
long entryClassPK = RandomTestUtil.randomLong();
whenAssetEntryLocalServiceFetchEntry(
className, entryClassPK, assetEntry);
whenAssetRendererFactoryGetAssetRenderer(entryClassPK, assetRenderer);
whenAssetRendererFactoryLookupGetAssetRendererFactoryByClassName(
className);
String urlDownload = RandomTestUtil.randomString();
whenAssetRendererGetURLDownload(assetRenderer, urlDownload);
whenIndexerRegistryGetIndexer(className, createIndexer());
SearchResultSummaryDisplayBuilder searchResultSummaryDisplayBuilder =
createSearchResultSummaryDisplayBuilder();
searchResultSummaryDisplayBuilder.setDocument(
createDocument(className, entryClassPK));
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext =
searchResultSummaryDisplayBuilder.build();
assertAssetRendererURLDownloadVisible(
urlDownload, searchResultSummaryDisplayContext);
assertTagsVisible(entryClassPK, searchResultSummaryDisplayContext);
assertUserPortraitVisible(userId, searchResultSummaryDisplayContext);
}
@Test
public void testUserPortraitFromResultButTagsAndURLDownloadFromRoot()
throws Exception {
long userId = RandomTestUtil.randomInt(2, Integer.MAX_VALUE);
AssetEntry assetEntry = createAssetEntry(userId);
long rootUserId = userId - 1;
AssetEntry rootAssetEntry = createAssetEntryWithTagsPresent(rootUserId);
String className = RandomTestUtil.randomString();
long entryClassPK = RandomTestUtil.randomInt(2, Integer.MAX_VALUE);
long rootEntryClassPK = entryClassPK - 1;
whenAssetEntryLocalServiceFetchEntry(
className, entryClassPK, assetEntry);
whenAssetEntryLocalServiceFetchEntry(
className, rootEntryClassPK, rootAssetEntry);
whenAssetRendererFactoryGetAssetRenderer(entryClassPK, assetRenderer);
AssetRenderer<?> rootAssetRenderer = Mockito.mock(AssetRenderer.class);
whenAssetRendererFactoryGetAssetRenderer(
rootEntryClassPK, rootAssetRenderer);
whenAssetRendererFactoryLookupGetAssetRendererFactoryByClassName(
className);
String rootURLDownload = RandomTestUtil.randomString();
whenAssetRendererGetURLDownload(rootAssetRenderer, rootURLDownload);
whenIndexerRegistryGetIndexer(className, createIndexer());
SearchResultSummaryDisplayBuilder searchResultSummaryDisplayBuilder =
createSearchResultSummaryDisplayBuilder();
Document document = createDocument(className, entryClassPK);
document.addKeyword(Field.ROOT_ENTRY_CLASS_PK, rootEntryClassPK);
searchResultSummaryDisplayBuilder.setDocument(document);
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext =
searchResultSummaryDisplayBuilder.build();
assertAssetRendererURLDownloadVisible(
rootURLDownload, searchResultSummaryDisplayContext);
assertTagsVisible(rootEntryClassPK, searchResultSummaryDisplayContext);
assertUserPortraitVisible(userId, searchResultSummaryDisplayContext);
}
protected void assertAssetRendererURLDownloadVisible(
String urlDownload,
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext) {
Assert.assertTrue(
searchResultSummaryDisplayContext.
isAssetRendererURLDownloadVisible());
Assert.assertEquals(
urlDownload,
searchResultSummaryDisplayContext.getAssetRendererURLDownload());
}
protected void assertTagsVisible(
long entryClassPK,
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext) {
Assert.assertTrue(
searchResultSummaryDisplayContext.isAssetCategoriesOrTagsVisible());
Assert.assertEquals(
entryClassPK, searchResultSummaryDisplayContext.getClassPK());
}
protected void assertUserPortraitVisible(
long userId,
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext) {
Assert.assertTrue(
searchResultSummaryDisplayContext.isUserPortraitVisible());
Assert.assertEquals(
userId, searchResultSummaryDisplayContext.getAssetEntryUserId());
}
protected AssetEntry createAssetEntry(long userId) {
AssetEntry assetEntry = Mockito.mock(AssetEntry.class);
Mockito.doReturn(
assetRenderer
).when(
assetEntry
).getAssetRenderer();
Mockito.doReturn(
assetRendererFactory
).when(
assetEntry
).getAssetRendererFactory();
Mockito.doReturn(
userId
).when(
assetEntry
).getUserId();
return assetEntry;
}
protected AssetEntry createAssetEntryWithTagsPresent(long rootUserId) {
AssetEntry rootAssetEntry = createAssetEntry(rootUserId);
Mockito.doReturn(
new String[] {RandomTestUtil.randomString()}
).when(
rootAssetEntry
).getTagNames();
return rootAssetEntry;
}
protected Document createDocument(
String entryClassName, long entryClassPK) {
Document document = new DocumentImpl();
DocumentHelper documentHelper = new DocumentHelper(document);
documentHelper.setEntryKey(entryClassName, entryClassPK);
return document;
}
protected Indexer createIndexer() throws Exception {
Indexer indexer = Mockito.mock(Indexer.class);
Mockito.doReturn(
new Summary(Locale.US, null, null)
).when(
indexer
).getSummary(
Mockito.any(), Mockito.anyString(), Mockito.any(), Mockito.any()
);
return indexer;
}
protected SearchResultSummaryDisplayBuilder
createSearchResultSummaryDisplayBuilder() {
SearchResultSummaryDisplayBuilder searchResultSummaryDisplayBuilder =
new SearchResultSummaryDisplayBuilder();
searchResultSummaryDisplayBuilder.setAssetEntryLocalService(
assetEntryLocalService);
searchResultSummaryDisplayBuilder.setAssetRendererFactoryLookup(
assetRendererFactoryLookup);
searchResultSummaryDisplayBuilder.setIndexerRegistry(indexerRegistry);
searchResultSummaryDisplayBuilder.setLanguage(
Mockito.mock(Language.class));
searchResultSummaryDisplayBuilder.setLocale(Locale.US);
searchResultSummaryDisplayBuilder.setPortletURLFactory(
Mockito.mock(PortletURLFactory.class));
searchResultSummaryDisplayBuilder.setResourceActions(
Mockito.mock(ResourceActions.class));
searchResultSummaryDisplayBuilder.setSearchResultPreferences(
Mockito.mock(SearchResultPreferences.class));
searchResultSummaryDisplayBuilder.setSearchResultViewURLSupplier(
Mockito.mock(SearchResultViewURLSupplier.class));
searchResultSummaryDisplayBuilder.setThemeDisplay(themeDisplay);
return searchResultSummaryDisplayBuilder;
}
protected ThemeDisplay createThemeDisplay() throws Exception {
ThemeDisplay themeDisplay = new ThemeDisplay();
themeDisplay.setCompany(Mockito.mock(Company.class));
themeDisplay.setUser(Mockito.mock(User.class));
themeDisplay.setPermissionChecker(permissionChecker);
return themeDisplay;
}
protected void setUpAssetRenderer() throws Exception {
Mockito.doReturn(
SearchTestUtil.SUMMARY_CONTENT
).when(
assetRenderer
).getSearchSummary(
(Locale)Matchers.any()
);
Mockito.doReturn(
SearchTestUtil.SUMMARY_TITLE
).when(
assetRenderer
).getTitle(
(Locale)Matchers.any()
);
}
protected void setUpHtmlUtil() throws Exception {
HtmlUtil htmlUtil = new HtmlUtil();
htmlUtil.setHtml(Mockito.mock(Html.class));
}
protected void setUpLocaleThreadLocal() {
LocaleThreadLocal.setThemeDisplayLocale(Locale.US);
}
protected void setUpProps() {
PropsUtil.setProps(Mockito.mock(Props.class));
}
protected void whenAssetEntryLocalServiceFetchEntry(
String className, long classPK, AssetEntry assetEntry) {
Mockito.doReturn(
assetEntry
).when(
assetEntryLocalService
).fetchEntry(
className, classPK
);
}
protected void whenAssetRendererFactoryGetAssetRenderer(
long entryClassPK, AssetRenderer<?> assetRenderer)
throws Exception {
Mockito.doReturn(
assetRenderer
).when(
assetRendererFactory
).getAssetRenderer(
entryClassPK
);
}
protected void
whenAssetRendererFactoryLookupGetAssetRendererFactoryByClassName(
String className) {
Mockito.doReturn(
assetRendererFactory
).when(
assetRendererFactoryLookup
).getAssetRendererFactoryByClassName(
className
);
}
protected void whenAssetRendererGetURLDownload(
AssetRenderer<?> assetRenderer, String urlDownload) {
Mockito.doReturn(
urlDownload
).when(
assetRenderer
).getURLDownload(
themeDisplay
);
}
protected void whenIndexerRegistryGetIndexer(
String className, Indexer<?> indexer) {
Mockito.doReturn(
indexer
).when(
indexerRegistry
).getIndexer(
className
);
}
@Mock
protected AssetEntryLocalService assetEntryLocalService;
@Mock
protected AssetRenderer<?> assetRenderer;
@Mock
protected AssetRendererFactory<?> assetRendererFactory;
@Mock
protected AssetRendererFactoryLookup assetRendererFactoryLookup;
@Mock
protected IndexerRegistry indexerRegistry;
@Mock
protected PermissionChecker permissionChecker;
protected ThemeDisplay themeDisplay;
}