/* * Copyright (c) JForum Team. All rights reserved. * * The software in this package is published under the terms of the LGPL * license a copy of which has been included with this distribution in the * license.txt file. * * The JForum Project * http://www.jforum.net */ package net.jforum.controllers; import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.ArrayList; import java.util.Collections; import javax.servlet.http.HttpServletRequest; import net.jforum.entities.Category; import net.jforum.entities.Group; import net.jforum.entities.UserSession; import net.jforum.repository.CategoryRepository; import net.jforum.repository.GroupRepository; import net.jforum.security.RoleManager; import net.jforum.services.GroupService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import br.com.caelum.vraptor.util.test.MockResult; //import net.jforum.actions.helpers.PermissionOptions; /** * @author Rafael Steil, Jonatan Cloutier */ @RunWith(MockitoJUnitRunner.class) public class GroupAdminControllerTestCase extends AdminTestCase { @Mock private GroupService service; @Mock private GroupRepository repository; @Mock private CategoryRepository categoryRepository; @Spy private MockResult mockResult; @Mock private UserSession userSession; @Mock private HttpServletRequest mockRequest; @Mock private RoleManager roleManager; @Mock private GroupAdminController mockGroupAdminControllerForward; @Mock private GroupAdminController mockGroupAdminControllerRedirect; @InjectMocks private GroupAdminController controller; private Group group = new Group(); public GroupAdminControllerTestCase() { super(GroupAdminController.class); } @Before public void setup() { when(userSession.getRoleManager()).thenReturn(roleManager); when(mockResult.redirectTo(controller)).thenReturn(mockGroupAdminControllerRedirect); when(mockResult.forwardTo(controller)).thenReturn(mockGroupAdminControllerForward); } @Test public void permissions() { when(repository.get(1)).thenReturn(new Group()); when(roleManager.isAdministrator()).thenReturn(true); when(categoryRepository.getAllCategories()).thenReturn(new ArrayList<Category>()); when(repository.getAllGroups()).thenReturn(new ArrayList<Group>()); controller.permissions(1); verify(mockResult).include("group", new Group()); verify(mockResult).include("groups", new ArrayList<Group>()); verify(mockResult).include("categories", new ArrayList<Category>()); } @Test public void permissionsSave() { when(roleManager.isAdministrator()).thenReturn(true); when(mockRequest.getParameterNames()).thenReturn(Collections.enumeration(Collections.<String>emptyList())); controller.permissionsSave(1); verify(service).savePermissions(eq(1), anyMap()); verify(mockGroupAdminControllerRedirect).list(); } @Test public void deleteIsFullAdministratorShouldAllow() { when(roleManager.isAdministrator()).thenReturn(true); controller.delete(1, 2); verify(service).delete(1, 2); verify(mockGroupAdminControllerRedirect).list(); } @Test public void deleteIsNotFullAdministratorShouldIgnore() { when(roleManager.isAdministrator()).thenReturn(false); controller.delete(1, 2); verify(mockGroupAdminControllerRedirect).list(); } @Test public void list() { ArrayList<Group> groups = new ArrayList<Group>(); when(repository.getAllGroups()).thenReturn(groups); controller.list(); assertEquals(groups, mockResult.included("groups")); } @Test public void editExpectsAGroup() { when(roleManager.isAdministrator()).thenReturn(true); when(repository.get(2)).thenReturn(group); controller.edit(2); verify(mockResult).include("group", group); verify(mockGroupAdminControllerForward).add(); } @Test public void editSaveIsFullAdministratorExpectsSuccess() { when(roleManager.isAdministrator()).thenReturn(true); controller.editSave(group); verify(service).update(group); verify(mockGroupAdminControllerRedirect).list(); } @Test public void editSaveIsGroupManagerExpectsSuccess() { when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.isGroupManager(group.getId())).thenReturn(true); controller.editSave(group); verify(service).update(group); verify(mockGroupAdminControllerRedirect).list(); } @Test public void editSaveIsNotFullAdministratorAndNotGroupManagerShouldIgnore() { when(roleManager.isAdministrator()).thenReturn(false); when(roleManager.isGroupManager(group.getId())).thenReturn(false); controller.editSave(group); verify(mockGroupAdminControllerRedirect).list(); } @Test public void addSaveIsFullAdministratorShouldAllow() { when(roleManager.isAdministrator()).thenReturn(true); controller.addSave(new Group()); verify(service).add(notNull(Group.class)); verify(mockGroupAdminControllerRedirect).list(); } @Test public void addSaveIsNotFullAdministratorShouldIgnore() { when(roleManager.isAdministrator()).thenReturn(false); controller.addSave(new Group()); verify(mockGroupAdminControllerRedirect).list(); } @Test public void addIsNotFullAdministratorShouldIgnore() { when(roleManager.isAdministrator()).thenReturn(false); controller.add(); verify(mockGroupAdminControllerRedirect).list(); } @Test public void addIsFullAdministratorShouldAllow() { when(roleManager.isAdministrator()).thenReturn(true); controller.add(); verify(mockGroupAdminControllerRedirect,never()).list(); } }