/**
* 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.search.bar.portlet.action;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.portlet.LiferayPortletRequest;
import com.liferay.portal.kernel.test.ReflectionTestUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.Http;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.servlet.http.HttpServletRequest;
import org.junit.Before;
import org.junit.Test;
import org.mockito.AdditionalAnswers;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
/**
* @author André de Oliveira
*/
public class SearchBarRedirectMVCActionCommandTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
setUpPortalUtil();
searchBarRedirectMVCActionCommand =
createSearchBarRedirectMVCActionCommand();
ReflectionTestUtil.setFieldValue(
searchBarRedirectMVCActionCommand, "_http", http);
}
@Test
public void testPlainURL() throws Exception {
String url = RandomTestUtil.randomString();
ActionRequestBuilder actionRequestBuilder = new ActionRequestBuilder() {
{
friendlyURL = url;
}
};
ActionRequest actionRequest = actionRequestBuilder.build();
ActionResponse actionResponse = Mockito.mock(ActionResponse.class);
doProcessAction(actionRequest, actionResponse);
verifyParameterNotAdded("scope", http);
verifySendRedirect(StringPool.SLASH.concat(url), actionResponse);
}
@Test
public void testScopeURLParameter() throws Exception {
String parameterValue = RandomTestUtil.randomString();
String url = RandomTestUtil.randomString();
ActionRequestBuilder actionRequestBuilder = new ActionRequestBuilder() {
{
friendlyURL = url;
scope = parameterValue;
}
};
ActionRequest actionRequest = actionRequestBuilder.build();
ActionResponse actionResponse = Mockito.mock(ActionResponse.class);
doProcessAction(actionRequest, actionResponse);
verifyParameterAdded(
StringPool.SLASH.concat(url), "scope", parameterValue, http);
}
@Test
public void testScopeURLParameterBlank() throws Exception {
ActionRequestBuilder actionRequestBuilder = new ActionRequestBuilder() {
{
friendlyURL = RandomTestUtil.randomString();
scope = StringPool.BLANK;
}
};
ActionRequest actionRequest = actionRequestBuilder.build();
ActionResponse actionResponse = Mockito.mock(ActionResponse.class);
doProcessAction(actionRequest, actionResponse);
verifyParameterNotAdded("scope", http);
}
protected SearchBarRedirectMVCActionCommand
createSearchBarRedirectMVCActionCommand() {
Portal portal2 = portal;
return new SearchBarRedirectMVCActionCommand() {
{
portal = portal2;
}
};
}
protected void doProcessAction(
ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception {
searchBarRedirectMVCActionCommand.doProcessAction(
actionRequest, actionResponse);
}
protected void setUpPortalUtil() {
Mockito.doAnswer(
AdditionalAnswers.returnsFirstArg()
).when(
portal
).escapeRedirect(
Mockito.anyString()
);
Mockito.doReturn(
Mockito.mock(HttpServletRequest.class)
).when(
portal
).getHttpServletRequest(
Mockito.any()
);
Mockito.doReturn(
Mockito.mock(LiferayPortletRequest.class)
).when(
portal
).getLiferayPortletRequest(
Mockito.any()
);
Mockito.doAnswer(
AdditionalAnswers.returnsFirstArg()
).when(
portal
).getOriginalServletRequest(
Mockito.any()
);
PortalUtil portalUtil = new PortalUtil();
portalUtil.setPortal(portal);
}
protected void verifyParameterAdded(
String url, String name, String value, Http http) {
Mockito.verify(
http
).addParameter(
url, name, value
);
}
protected void verifyParameterNotAdded(String name, Http http) {
Mockito.verify(
http, Mockito.never()
).addParameter(
Mockito.anyString(), Mockito.eq(name), Mockito.anyString()
);
}
protected void verifySendRedirect(String url, ActionResponse actionResponse)
throws Exception {
Mockito.verify(
actionResponse
).sendRedirect(
url
);
}
@Mock
protected Http http;
@Mock
protected Portal portal;
protected SearchBarRedirectMVCActionCommand
searchBarRedirectMVCActionCommand;
protected static class ActionRequestBuilder {
public ActionRequest build() {
ActionRequest actionRequest = Mockito.mock(ActionRequest.class);
Mockito.doReturn(
createThemeDisplay()
).when(
actionRequest
).getAttribute(
WebKeys.THEME_DISPLAY
);
if (scope != null) {
Mockito.doReturn(
scope
).when(
actionRequest
).getParameter(
"scope"
);
}
return actionRequest;
}
protected Layout createLayout() {
Layout layout = Mockito.mock(Layout.class);
Mockito.doReturn(
friendlyURL
).when(
layout
).getFriendlyURL(
Mockito.any()
);
return layout;
}
protected ThemeDisplay createThemeDisplay() {
ThemeDisplay themeDisplay = new ThemeDisplay();
themeDisplay.setLayout(createLayout());
themeDisplay.setURLCurrent(friendlyURL);
return themeDisplay;
}
protected String friendlyURL;
protected String scope;
}
}