/** * Copyright (C) 2011 JTalks.org Team * 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. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ package org.jtalks.jcommune.service.security; import org.jtalks.common.model.permissions.BranchPermission; import org.jtalks.common.model.permissions.JtalksPermission; import org.jtalks.jcommune.plugin.api.PluginsPermissionFactory; import org.springframework.security.acls.model.Permission; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.mockito.Mock; import static org.mockito.Mockito.*; import static org.mockito.MockitoAnnotations.initMocks; import static org.testng.Assert.*; /** * @author Mikhail Stryzhonok */ public class JCPermissionFactoryTest { @Mock private JtalksPermissionFactory jtalksPermissionFactory; @Mock private PluginsPermissionFactory pluginsPermissionFactory; @BeforeMethod public void init() { initMocks(this); } @Test public void buildFromMaskShouldReturnPermissionFromCommons() { Permission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromMask(targetPermission.getMask())).thenReturn(targetPermission); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromMask(targetPermission.getMask()); assertEquals(result, targetPermission); verify(pluginsPermissionFactory, never()).buildFromMask(anyInt()); } @Test public void buildFromMaskShouldReturnPluginPermissionWhenCommonNotFound() { Permission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromMask(anyInt())).thenReturn(null); when(pluginsPermissionFactory.buildFromMask(targetPermission.getMask())).thenReturn(targetPermission); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromMask(targetPermission.getMask()); assertEquals(result, targetPermission); verify(jtalksPermissionFactory).buildFromMask(targetPermission.getMask()); } @Test public void buildFromMaskShouldReturnAnyNotNullDefaultValueWhenNoPermissionFound() { Permission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromMask(anyInt())).thenReturn(null); when(pluginsPermissionFactory.buildFromMask(anyInt())).thenReturn(null); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromMask(targetPermission.getMask()); assertNotNull(result); verify(jtalksPermissionFactory).buildFromMask(targetPermission.getMask()); verify(pluginsPermissionFactory).buildFromMask(targetPermission.getMask()); } @Test public void buildFromNameShouldReturnPermissionFromCommons() { JtalksPermission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromName(targetPermission.getName())).thenReturn(targetPermission); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromName(targetPermission.getName()); assertEquals(result, targetPermission); verify(pluginsPermissionFactory, never()).buildFromName(anyString()); } @Test public void buildFromNameShouldReturnPluginPermissionWhenCommonNotFound() { JtalksPermission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromName(anyString())).thenReturn(null); when(pluginsPermissionFactory.buildFromName(targetPermission.getName())).thenReturn(targetPermission); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromName(targetPermission.getName()); assertEquals(result, targetPermission); verify(jtalksPermissionFactory).buildFromName(targetPermission.getName()); } @Test public void buildFromNameShouldReturnAnyNotNullDefaultValueWhenNoPermissionFound() { JtalksPermission targetPermission = BranchPermission.VIEW_TOPICS; when(jtalksPermissionFactory.buildFromName(anyString())).thenReturn(null); when(pluginsPermissionFactory.buildFromName(anyString())).thenReturn(null); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); Permission result = permissionFactory.buildFromName(targetPermission.getName()); assertNotNull(result); verify(jtalksPermissionFactory).buildFromName(targetPermission.getName()); verify(pluginsPermissionFactory).buildFromName(targetPermission.getName()); } @Test public void buildFromNamesShouldReturnBothOfCommonAndPluginPermissions() { JtalksPermission commonPermission = BranchPermission.VIEW_TOPICS; JtalksPermission pluginPermission = BranchPermission.CLOSE_TOPICS; List<String> names = Arrays.asList(commonPermission.getName(), pluginPermission.getName()); List<Permission> expected = Arrays.asList((Permission)commonPermission, (Permission)pluginPermission); when(jtalksPermissionFactory.buildFromNames(names)).thenReturn(Arrays.asList((Permission)commonPermission)); when(pluginsPermissionFactory.buildFromNames(names)).thenReturn(Arrays.asList((Permission)pluginPermission)); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); List<Permission> actual = permissionFactory.buildFromNames(names); assertEquals(actual, expected); verify(jtalksPermissionFactory).buildFromNames(names); verify(pluginsPermissionFactory).buildFromNames(names); } @Test public void buildFromNamesShouldReturnEmptyListIfNoPermissionsFound() { when(jtalksPermissionFactory.buildFromNames(any(List.class))).thenReturn(Collections.EMPTY_LIST); when(pluginsPermissionFactory.buildFromNames(any(List.class))).thenReturn(Collections.EMPTY_LIST); List<String> names = Arrays.asList("permission1", "permission2"); JCPermissionFactory permissionFactory = new JCPermissionFactory(jtalksPermissionFactory,pluginsPermissionFactory); List<Permission> result = permissionFactory.buildFromNames(names); assertEquals(result, Collections.EMPTY_LIST); verify(jtalksPermissionFactory).buildFromNames(names); verify(pluginsPermissionFactory).buildFromNames(names); } }