/**
* 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.portlet;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.Portlet;
import com.liferay.portal.kernel.portlet.PortletPreferencesFactoryUtil;
import com.liferay.portal.kernel.security.auth.PrincipalException;
import com.liferay.portal.kernel.security.permission.ActionKeys;
import com.liferay.portal.kernel.security.permission.PermissionChecker;
import com.liferay.portal.kernel.security.permission.PermissionThreadLocal;
import com.liferay.portal.kernel.service.PortletLocalServiceUtil;
import com.liferay.portal.kernel.service.permission.LayoutPermissionUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.model.impl.LayoutImpl;
import com.liferay.portal.model.impl.PortletImpl;
import com.liferay.portal.tools.ToolDependencies;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* @author Brian Wing Shun Chan
* @author Jorge Ferrer
*/
@PrepareForTest(
{
LayoutPermissionUtil.class, PermissionThreadLocal.class,
PortletLocalServiceUtil.class
}
)
@RunWith(PowerMockRunner.class)
public class PortletPreferencesFactoryImplGetPreferencesIdsUnitTest {
@BeforeClass
public static void setUpClass() throws Exception {
ToolDependencies.wireCaches();
}
@Before
public void setUp() {
PortletPreferencesFactoryUtil portletPreferencesFactoryUtil =
new PortletPreferencesFactoryUtil();
portletPreferencesFactoryUtil.setPortletPreferencesFactory(
new PortletPreferencesFactoryImpl());
_layout.setCompanyId(RandomTestUtil.randomLong());
_layout.setPlid(RandomTestUtil.randomLong());
_layout.setPrivateLayout(true);
}
@Test(expected = PrincipalException.MustHavePermission.class)
public void testPreferencesWithModeEditGuestInPrivateLayout()
throws Exception {
PowerMockito.mockStatic(PortletLocalServiceUtil.class);
Mockito.when(
PortletLocalServiceUtil.getPortletById(
_layout.getCompanyId(), _PORTLET_ID)
).thenReturn(
getGroupPortlet()
);
PowerMockito.mockStatic(LayoutPermissionUtil.class);
Mockito.when(
LayoutPermissionUtil.contains(
Mockito.any(PermissionChecker.class), Mockito.eq(_layout),
Mockito.eq(ActionKeys.UPDATE))
).thenReturn(
true
);
PowerMockito.mockStatic(PermissionThreadLocal.class);
Mockito.when(
PermissionThreadLocal.getPermissionChecker()
).thenReturn(
PowerMockito.mock(PermissionChecker.class)
);
long siteGroupId = _layout.getGroupId();
boolean modeEditGuest = true;
PortletPreferencesFactoryUtil.getPortletPreferencesIds(
siteGroupId, _USER_ID, _layout, _PORTLET_ID, modeEditGuest);
}
@Test(expected = PrincipalException.MustHavePermission.class)
public void testPreferencesWithModeEditGuestInPublicLayoutWithoutPermission()
throws Exception {
_layout.setPrivateLayout(false);
PowerMockito.mockStatic(PortletLocalServiceUtil.class);
Mockito.when(
PortletLocalServiceUtil.getPortletById(
_layout.getCompanyId(), _PORTLET_ID)
).thenReturn(
getGroupPortlet()
);
PowerMockito.mockStatic(LayoutPermissionUtil.class);
Mockito.when(
LayoutPermissionUtil.contains(
Mockito.any(PermissionChecker.class), Mockito.eq(_layout),
Mockito.eq(ActionKeys.UPDATE))
).thenReturn(
false
);
PowerMockito.mockStatic(PermissionThreadLocal.class);
Mockito.when(
PermissionThreadLocal.getPermissionChecker()
).thenReturn(
PowerMockito.mock(PermissionChecker.class)
);
long siteGroupId = _layout.getGroupId();
boolean modeEditGuest = true;
PortletPreferencesFactoryUtil.getPortletPreferencesIds(
siteGroupId, _USER_ID, _layout, _PORTLET_ID, modeEditGuest);
}
protected Portlet getGroupPortlet() {
Portlet portlet = new PortletImpl();
portlet.setPreferencesCompanyWide(false);
portlet.setPreferencesOwnedByGroup(true);
portlet.setPreferencesUniquePerLayout(false);
return portlet;
}
private static final String _PORTLET_ID = RandomTestUtil.randomString(10);
private static final long _USER_ID = RandomTestUtil.randomLong();
private final Layout _layout = new LayoutImpl();
}