/** * 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.service.permission; import com.liferay.portal.kernel.model.Role; import com.liferay.portal.kernel.model.RoleConstants; import com.liferay.portal.kernel.security.permission.ActionKeys; import com.liferay.portal.kernel.service.RoleLocalServiceUtil; import com.liferay.portal.kernel.service.permission.ModelPermissions; import com.liferay.portal.kernel.service.permission.ModelPermissionsFactory; import com.liferay.portal.kernel.util.ListUtil; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.junit.Assert; import org.junit.Before; 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 Jorge Ferrer */ @PrepareForTest(RoleLocalServiceUtil.class) @RunWith(PowerMockRunner.class) public class ModelPermissionsFactoryTest extends PowerMockito { @Before public void setUp() throws Exception { mockStatic(RoleLocalServiceUtil.class); Role guestRole = Mockito.mock(Role.class); Mockito.when( guestRole.getName() ).thenReturn( RoleConstants.GUEST ); when( RoleLocalServiceUtil.getRole( Mockito.anyLong(), Mockito.eq(RoleConstants.GUEST)) ).thenReturn( guestRole ); Role siteMemberRole = Mockito.mock(Role.class); Mockito.when( siteMemberRole.getName() ).thenReturn( RoleConstants.SITE_MEMBER ); when( RoleLocalServiceUtil.getDefaultGroupRole(Mockito.anyLong()) ).thenReturn( siteMemberRole ); when( RoleLocalServiceUtil.getRole( Mockito.anyLong(), Mockito.eq(RoleConstants.SITE_MEMBER)) ).thenReturn( siteMemberRole ); } @Test public void testCreateWithEmptyPermissions() throws Exception { String[] groupPermissions = {}; String[] guestPermissions = {}; ModelPermissions modelPermissions = ModelPermissionsFactory.create( groupPermissions, guestPermissions); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 0, roleNames.size()); } @Test public void testCreateWithGroupPermissions() throws Exception { String[] groupPermissions = {ActionKeys.VIEW}; String[] guestPermissions = {}; ModelPermissions modelPermissions = ModelPermissionsFactory.create( groupPermissions, guestPermissions); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 1, roleNames.size()); String roleName = roleNames.iterator().next(); Assert.assertEquals( RoleConstants.PLACEHOLDER_DEFAULT_GROUP_ROLE, roleName); Assert.assertEquals( ListUtil.fromArray(groupPermissions), modelPermissions.getActionIdsList(roleName)); } @Test public void testCreateWithGuestAndGroupPermissions() throws Exception { String[] groupPermissions = {ActionKeys.VIEW}; String[] guestPermissions = {ActionKeys.VIEW}; ModelPermissions modelPermissions = ModelPermissionsFactory.create( groupPermissions, guestPermissions); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 2, roleNames.size()); Collection<String> viewActionIdRoleNames = modelPermissions.getRoleNames(ActionKeys.VIEW); Assert.assertEquals( viewActionIdRoleNames.toString(), 2, viewActionIdRoleNames.size()); } @Test public void testCreateWithGuestPermissions() throws Exception { String[] groupPermissions = {}; String[] guestPermissions = {ActionKeys.VIEW}; ModelPermissions modelPermissions = ModelPermissionsFactory.create( groupPermissions, guestPermissions); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 1, roleNames.size()); String roleName = roleNames.iterator().next(); Assert.assertEquals(RoleConstants.GUEST, roleName); Assert.assertArrayEquals( guestPermissions, modelPermissions.getActionIds(roleName)); } @Test public void testCreateWithNullPermissions() throws Exception { String[] groupPermissions = null; String[] guestPermissions = null; ModelPermissions modelPermissions = ModelPermissionsFactory.create( groupPermissions, guestPermissions); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertTrue(roleNames.isEmpty()); } @Test public void testCreateWithoutParameters() throws Exception { Map<String, String[]> parameterMap = new HashMap<>(); ModelPermissions modelPermissions = ModelPermissionsFactory.create( parameterMap); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 0, roleNames.size()); } @Test public void testCreateWithParameterForOneRole() throws Exception { Map<String, String[]> parameterMap = new HashMap<>(); String[] permissions = {ActionKeys.VIEW}; parameterMap.put( ModelPermissionsFactory.MODEL_PERMISSIONS_PREFIX + RoleConstants.GUEST, permissions); ModelPermissions modelPermissions = ModelPermissionsFactory.create( parameterMap); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 1, roleNames.size()); String roleName = roleNames.iterator().next(); Assert.assertEquals(RoleConstants.GUEST, roleName); Assert.assertArrayEquals( permissions, modelPermissions.getActionIds(roleName)); } @Test public void testCreateWithParameterForTwoRoles() throws Exception { Map<String, String[]> parameterMap = new HashMap<>(); String[] permissions = {ActionKeys.VIEW}; parameterMap.put( ModelPermissionsFactory.MODEL_PERMISSIONS_PREFIX + RoleConstants.GUEST, permissions); parameterMap.put( ModelPermissionsFactory.MODEL_PERMISSIONS_PREFIX + RoleConstants.SITE_MEMBER, permissions); ModelPermissions modelPermissions = ModelPermissionsFactory.create( parameterMap); Collection<String> roleNames = modelPermissions.getRoleNames(); Assert.assertEquals(roleNames.toString(), 2, roleNames.size()); String roleName = roleNames.iterator().next(); Assert.assertArrayEquals( permissions, modelPermissions.getActionIds(roleName)); } }