/*
* 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 net.jforum.entities.Group;
import net.jforum.entities.User;
import net.jforum.entities.UserSession;
import net.jforum.repository.GroupRepository;
import net.jforum.repository.UserRepository;
import net.jforum.security.RoleManager;
import net.jforum.services.UserService;
import net.jforum.util.ConfigKeys;
import net.jforum.util.JForumConfig;
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;
/**
* @author Rafael Steil, Jonatan Cloutier
*/
@RunWith(MockitoJUnitRunner.class)
public class UserAdminControllerTestCase extends AdminTestCase {
@Mock private UserRepository userRepository;
@Mock private GroupRepository groupRepository;
@Mock private JForumConfig config;
@Mock private UserService userService;
@Spy private MockResult mockResult;
@Mock private UserSession userSession;
@Mock private RoleManager roleManager;
@Mock private UserAdminController mockUserAdminControllerRedirect;
@Mock private UserController mockUserController;
@InjectMocks private UserAdminController controller;
public UserAdminControllerTestCase() {
super(UserAdminController.class);
}
@Before
public void setup() {
when(userSession.getRoleManager()).thenReturn(roleManager);
when(mockResult.redirectTo(controller)).thenReturn(mockUserAdminControllerRedirect);
}
@Test
public void groupsSaveIsSuperAdministratorShouldAccept() {
when(roleManager.isAdministrator()).thenReturn(true);
controller.groupsSave(1, 1, 2);
verify(userService).saveGroups(1, 1, 2);
verify(mockUserAdminControllerRedirect).list(0);
}
@Test
public void groupsNotSuperAdministratorIsGroupManagerShouldAccept() {
when(roleManager.isAdministrator()).thenReturn(false);
when(roleManager.isGroupManager(1)).thenReturn(true);
when(roleManager.isGroupManager(2)).thenReturn(true);
controller.groupsSave(1, 1, 2);
verify(userService).saveGroups(1, 1, 2);
verify(mockUserAdminControllerRedirect).list(0);
}
@Test
public void groupsSaveNotSuperAdminNotGroupManagerShouldIgnore() {
when(roleManager.isAdministrator()).thenReturn(false);
when(roleManager.isGroupManager(1)).thenReturn(false);
controller.groupsSave(1, 1, 2);
verify(userService,never()).saveGroups(anyInt(),(int[])anyVararg());
verify(mockUserAdminControllerRedirect).list(0);
}
@Test
public void groups() {
User user = new User();
user.setId(1);
ArrayList<Group> groups = new ArrayList<Group>();
when(userRepository.get(1)).thenReturn(user);
when(groupRepository.getAllGroups()).thenReturn(groups);
controller.groups(1);
assertEquals(user, mockResult.included("user"));
assertEquals(groups, mockResult.included("groups"));
}
@Test
public void edit() {
when(mockResult.forwardTo(UserController.class)).thenReturn(mockUserController);
controller.edit(1);
verify(mockUserController).edit(1);
}
@Test
public void list() {
ArrayList<User> users = new ArrayList<User>();
when(userRepository.getTotalUsers()).thenReturn(100);
when(config.getInt(ConfigKeys.USERS_PER_PAGE)).thenReturn(10);
when(userRepository.getAllUsers(0, 10)).thenReturn(users);
controller.list(0);
assertEquals(users, mockResult.included("users"));
assertNotNull(mockResult.included("users"));
}
}