/*
* Tanaguru - Automated webpage assessment
* Copyright (C) 2008-2015 Tanaguru.org
*
* This file is part of Tanaguru.
*
* Tanaguru is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Contact us by mail: tanaguru AT tanaguru DOT org
*/
package org.tanaguru.webapp.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import static org.easymock.EasyMock.*;
import org.tanaguru.webapp.command.CreateUserCommand;
import org.tanaguru.webapp.command.factory.CreateUserCommandFactory;
import org.tanaguru.webapp.entity.contract.Contract;
import org.tanaguru.webapp.entity.service.user.RoleDataService;
import org.tanaguru.webapp.entity.service.user.UserDataService;
import org.tanaguru.webapp.entity.user.Role;
import org.tanaguru.webapp.entity.user.User;
import org.tanaguru.webapp.exception.ForbiddenUserException;
import org.tanaguru.webapp.security.userdetails.TgolUserDetails;
import org.tanaguru.webapp.util.TgolKeyStore;
import org.tanaguru.webapp.validator.CreateUserFormValidator;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContextImpl;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import org.springframework.validation.BeanPropertyBindingResult;
import org.springframework.validation.BindingResult;
/**
*
* @author jkowalczyk
*/
public class UserManagementControllerTest extends TestCase {
UserManagementController instance;
UserDataService mockUserDataService;
RoleDataService mockRoleDataService;
User mockAdminUser;
User mockUser;
User mockNewUser;
Role mockAdminRole;
Role mockUserRole;
Authentication mockAuthentication;
public UserManagementControllerTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
verify(mockAuthentication);
verify(mockUserDataService);
verify(mockAdminUser);
verify(mockAdminRole);
verify(mockUserRole);
verify(mockRoleDataService);
verify(mockUser);
verify(mockNewUser);
verify(mockAdminUser);
}
/**
* Test of displayAdminPage method, of class UserManagementController.
*/
public void testDisplayAdminPage() {
System.out.println("displayAdminPage");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
Model model = new ExtendedModelMap();
String result = instance.displayAdminPage(request, response, model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
}
/**
* Test of displayAdminPage method, of class UserManagementController.
*/
public void testDisplayAdminPageWithDeletedUserMessage() {
System.out.println("DisplayAdminPageWithDeletedUserMessage");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
request.getSession().setAttribute(TgolKeyStore.DELETED_USER_NAME_KEY, "DeletedUserName");
Model model = new ExtendedModelMap();
String result = instance.displayAdminPage(request, response, model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
assertTrue(model.asMap().containsKey(TgolKeyStore.DELETED_USER_NAME_KEY));
assertEquals(model.asMap().get(TgolKeyStore.DELETED_USER_NAME_KEY),"DeletedUserName");
}
/**
* Test of editUserAdminPage method, of class UserManagementController.
*/
public void testEditUserAdminPage() {
System.out.println("editUserAdminPage");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
String userId = "";
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
Model model = new ExtendedModelMap();
try {
instance.displayEditUserAdminPage(userId, request, response, model);
assertTrue(false);
} catch (ForbiddenUserException nue) {
assertTrue(true);
}
userId = "4";
String result = instance.displayEditUserAdminPage(userId, request, response, model);
assertEquals(TgolKeyStore.EDIT_USER_VIEW_NAME, result);
CreateUserCommand cuc = ((CreateUserCommand)model.asMap().get(TgolKeyStore.CREATE_USER_COMMAND_KEY));
assertNotNull(cuc);
assertTrue(cuc.getActivated());
assertTrue(cuc.getAdmin());
assertEquals("admin@test.com",cuc.getEmail());
assertEquals("http://www.admin.com",cuc.getSiteUrl());
assertEquals("0123456789",cuc.getPhoneNumber());
assertEquals("nameAdmin",cuc.getLastName());
assertEquals("firstNameAdmin",cuc.getFirstName());
assertEquals(Long.valueOf(4),request.getSession().getAttribute(TgolKeyStore.USER_ID_KEY));
userId = "5";
result = instance.displayEditUserAdminPage(userId, request, response, model);
assertEquals(TgolKeyStore.EDIT_USER_VIEW_NAME, result);
cuc = ((CreateUserCommand)model.asMap().get(TgolKeyStore.CREATE_USER_COMMAND_KEY));
assertNotNull(cuc);
assertFalse(cuc.getActivated());
assertFalse(cuc.getAdmin());
assertEquals("user@test.com",cuc.getEmail());
assertEquals("http://www.user.com",cuc.getSiteUrl());
assertEquals("9876543210",cuc.getPhoneNumber());
assertEquals("nameUser",cuc.getLastName());
assertEquals("firstNameUser",cuc.getFirstName());
assertEquals(Long.valueOf(5),request.getSession().getAttribute(TgolKeyStore.USER_ID_KEY));
}
/**
* Test of submitEditUserForm method, of class UserManagementController.
*/
public void testSubmitEditUserForm() throws Exception {
System.out.println("submitEditUserForm");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, true, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// Finally the form is conform and the admin page is returned
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setEmail("user@test.com");
createUserCommand.setLastName("newName");
createUserCommand.setFirstName("newFirstName");
createUserCommand.setPhoneNumber("0102030405");
createUserCommand.setActivated(false);
createUserCommand.setAdmin(true);
MockHttpServletRequest request = new MockHttpServletRequest();
request.getSession().setAttribute(TgolKeyStore.USER_ID_KEY, Long.valueOf(5));
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitEditUserForm(
createUserCommand,
bindingResult,
request,
model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
assertFalse(bindingResult.hasErrors());
assertTrue(bindingResult.getFieldErrors().isEmpty());
assertEquals(2, model.asMap().size());
assertEquals("user@test.com",model.asMap().get(TgolKeyStore.UPDATED_USER_NAME_KEY));
assertTrue(((List<User>)model.asMap().get(TgolKeyStore.USER_LIST_KEY)).isEmpty());
}
/**
* Test of submitEditUserForm method, of class UserManagementController.
*/
public void testSubmitEditCurrentUserForm() throws Exception {
System.out.println("testSubmitEditCurrentUserForm");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, true);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// Finally the form is conform and the admin page is returned
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setEmail("admin@test.com");
createUserCommand.setLastName("newName");
createUserCommand.setFirstName("newFirstName");
createUserCommand.setPhoneNumber("0102030405");
createUserCommand.setActivated(false);
createUserCommand.setAdmin(false);
MockHttpServletRequest request = new MockHttpServletRequest();
request.getSession().setAttribute(TgolKeyStore.USER_ID_KEY, Long.valueOf(4));
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitEditUserForm(
createUserCommand,
bindingResult,
request,
model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
assertFalse(bindingResult.hasErrors());
assertTrue(bindingResult.getFieldErrors().isEmpty());
assertEquals(2, model.asMap().size());
assertEquals("admin@test.com",model.asMap().get(TgolKeyStore.UPDATED_USER_NAME_KEY));
assertTrue(((List<User>)model.asMap().get(TgolKeyStore.USER_LIST_KEY)).isEmpty());
}
/**
* Test of submitEditUserForm method, of class UserManagementController.
*/
public void testSubmitEditUserChangeToExistingUserForm() throws Exception {
System.out.println("SubmitEditUserChangeToExistingUserForm");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// Finally the form is conform and the admin page is returned
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setSiteUrl("http://www.newSite.com/");
createUserCommand.setEmail("admin@test.com");
MockHttpServletRequest request = new MockHttpServletRequest();
request.getSession().setAttribute(TgolKeyStore.USER_ID_KEY, Long.valueOf(5));
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitEditUserForm(
createUserCommand,
bindingResult,
request,
model);
assertEquals(TgolKeyStore.EDIT_USER_VIEW_NAME, result);
assertTrue(bindingResult.hasErrors());
assertEquals(1,bindingResult.getFieldErrors().size());
assertNotNull(bindingResult.getFieldErrors("email"));
assertEquals(1,bindingResult.getFieldErrors("email").size());
assertEquals("sign-up.existingAccountWithEmail",bindingResult.getFieldErrors("email").get(0).getCode());
}
/**
* Test of addUserAdminPage method, of class UserManagementController.
*/
public void testAddUserAdminPage() {
System.out.println("addUserAdminPage");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
Model model = new ExtendedModelMap();
String result = instance.displayAddUserAdminPage(request, response, model);
assertEquals(TgolKeyStore.ADD_USER_VIEW_NAME, result);
assertEquals(1, model.asMap().size());
CreateUserCommand cuc = ((CreateUserCommand)model.asMap().get(TgolKeyStore.CREATE_USER_COMMAND_KEY));
assertNotNull(cuc);
assertFalse(cuc.getActivated());
assertFalse(cuc.getAdmin());
assertNull(cuc.getEmail());
assertEquals("http://",cuc.getSiteUrl());
assertNull(cuc.getPhoneNumber());
assertNull(cuc.getLastName());
assertNull(cuc.getFirstName());
assertNull(cuc.getPassword());
assertNull(cuc.getConfirmPassword());
}
/**
* Test of submitAddUserForm method, of class UserManagementController.
*/
public void testSubmitAddUserForm() throws Exception {
System.out.println("submitAddUserForm");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, true, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// Finally the form is conform and the admin page is returned
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setSiteUrl("http://www.newSite.com/");
createUserCommand.setEmail("newUser@test.com");
createUserCommand.setPassword("P4sSw0rD");
createUserCommand.setConfirmPassword("P4sSw0rD");
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitAddUserForm(createUserCommand, bindingResult, model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
assertFalse(bindingResult.hasErrors());
assertTrue(bindingResult.getFieldErrors().isEmpty());
assertEquals(2, model.asMap().size());
assertEquals("newUser@test.com",model.asMap().get(TgolKeyStore.ADDED_USER_NAME_KEY));
assertTrue(((List<User>)model.asMap().get(TgolKeyStore.USER_LIST_KEY)).isEmpty());
}
/**
* Test of submitAddUserForm method, of class UserManagementController.
*/
public void testSubmitAddAdminUserForm() throws Exception {
System.out.println("SubmitAddAdminUserForm");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, true, true, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// Finally the form is conform and the admin page is returned
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setSiteUrl("http://www.newSite.com/");
createUserCommand.setEmail("newUser@test.com");
createUserCommand.setPassword("P4sSw0rD");
createUserCommand.setConfirmPassword("P4sSw0rD");
createUserCommand.setAdmin(true);
createUserCommand.setActivated(true);
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitAddUserForm(createUserCommand, bindingResult, model);
assertEquals(TgolKeyStore.ADMIN_VIEW_NAME, result);
assertFalse(bindingResult.hasErrors());
assertTrue(bindingResult.getFieldErrors().isEmpty());
assertEquals(2, model.asMap().size());
assertEquals("newUser@test.com",model.asMap().get(TgolKeyStore.ADDED_USER_NAME_KEY));
assertTrue(((List<User>)model.asMap().get(TgolKeyStore.USER_LIST_KEY)).isEmpty());
}
/**
* Test of submitAddUserForm method, of class UserManagementController.
*/
public void testSubmitAddUserFormWithErrors() throws Exception {
System.out.println("SubmitAddUserFormWithErrors");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
CreateUserFormValidator createUserFormValidator = new CreateUserFormValidator();
createUserFormValidator.setUserDataService(mockUserDataService);
instance.setCreateUserFormValidator(createUserFormValidator);
// First the form is sent back empty
CreateUserCommand createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
BindingResult bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
Model model = new ExtendedModelMap();
String result = instance.submitAddUserForm(createUserCommand, bindingResult, model);
assertEquals(TgolKeyStore.ADD_USER_VIEW_NAME, result);
assertTrue(bindingResult.hasErrors());
assertEquals(3,bindingResult.getFieldErrors().size());
assertNotNull(bindingResult.getFieldErrors("email"));
assertEquals(1,bindingResult.getFieldErrors("email").size());
assertEquals("sign-up.missingEmail",bindingResult.getFieldErrors("email").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("password"));
assertEquals(1,bindingResult.getFieldErrors("password").size());
assertEquals("sign-up.missingPassword",bindingResult.getFieldErrors("password").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("generalErrorMsg"));
assertEquals(1,bindingResult.getFieldErrors("generalErrorMsg").size());
assertEquals("sign-up.mandatoryField",bindingResult.getFieldErrors("generalErrorMsg").get(0).getCode());
// First the form is sent back with passwords that don't match
createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setEmail("user@test.com");
createUserCommand.setPassword("password");
createUserCommand.setConfirmPassword("confirmation");
bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
model = new ExtendedModelMap();
result = instance.submitAddUserForm(createUserCommand, bindingResult, model);
assertEquals(TgolKeyStore.ADD_USER_VIEW_NAME, result);
assertTrue(bindingResult.hasErrors());
assertEquals(3,bindingResult.getFieldErrors().size());
assertNotNull(bindingResult.getFieldErrors("email"));
assertEquals(1,bindingResult.getFieldErrors("email").size());
assertEquals("sign-up.existingAccountWithEmail",bindingResult.getFieldErrors("email").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("password"));
assertEquals(1,bindingResult.getFieldErrors("password").size());
assertEquals("sign-up.passwordNotIdentical",bindingResult.getFieldErrors("password").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("generalErrorMsg"));
assertEquals(1,bindingResult.getFieldErrors("generalErrorMsg").size());
assertEquals("sign-up.mandatoryField",bindingResult.getFieldErrors("generalErrorMsg").get(0).getCode());
// Then the url is not conform but in this context it is not tested, so ignored
// The Email1 is not conform regardin the pattern EMAIL_CHECKER_REGEXP
// The passwords match but don't respect the constraints
createUserCommand = CreateUserCommandFactory.getInstance().getNewCreateUserCommand();
createUserCommand.setEmail("null");
createUserCommand.setPassword("password");
createUserCommand.setConfirmPassword("password");
bindingResult = new BeanPropertyBindingResult(createUserCommand,"createUserCommand");
model = new ExtendedModelMap();
result = instance.submitAddUserForm(createUserCommand, bindingResult, model);
assertEquals(TgolKeyStore.ADD_USER_VIEW_NAME, result);
assertTrue(bindingResult.hasErrors());
assertEquals(3,bindingResult.getFieldErrors().size());
assertNotNull(bindingResult.getFieldErrors("email"));
assertEquals(1,bindingResult.getFieldErrors("email").size());
assertEquals("sign-up.invalidEmail",bindingResult.getFieldErrors("email").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("password"));
assertEquals(1,bindingResult.getFieldErrors("password").size());
assertEquals("sign-up.invalidPassword",bindingResult.getFieldErrors("password").get(0).getCode());
assertNotNull(bindingResult.getFieldErrors("generalErrorMsg"));
assertEquals(1,bindingResult.getFieldErrors("generalErrorMsg").size());
assertEquals("sign-up.mandatoryField",bindingResult.getFieldErrors("generalErrorMsg").get(0).getCode());
}
/**
* Test of deleteUserPage method, of class UserManagementController.
*/
public void testDeleteUserPage() {
System.out.println("deleteUserPage");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(false, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
Model model = new ExtendedModelMap();
String idToRemove="idToRemove";
try {
instance.displayDeleteUserPage(idToRemove, request, response, model);
assertTrue(false);
} catch (ForbiddenUserException fue) {
assertTrue(true);
}
idToRemove = "4";
String result = instance.displayDeleteUserPage(idToRemove, request, response, model);
assertEquals(TgolKeyStore.ACCESS_DENIED_VIEW_NAME, result);
idToRemove = "6";
result = instance.displayDeleteUserPage(idToRemove, request, response, model);
assertEquals(TgolKeyStore.ACCESS_DENIED_VIEW_NAME, result);
idToRemove = "5";
result = instance.displayDeleteUserPage(idToRemove, request, response, model);
assertEquals(TgolKeyStore.DELETE_USER_VIEW_NAME, result);
assertEquals("user@test.com", model.asMap().get(TgolKeyStore.USER_NAME_TO_DELETE_KEY));
assertEquals(Long.valueOf(5), request.getSession().getAttribute(TgolKeyStore.USER_ID_TO_DELETE_KEY));
assertEquals(1, model.asMap().size());
}
/**
* Test of deleteUserConfirmation method, of class UserManagementController.
*/
public void testDeleteUserConfirmation() {
System.out.println("deleteUserConfirmation");
instance = new UserManagementController();
setUpMockRoleDataService();
setUpMockUserDataService(true, false, false, false, false);
setUpMockAuthenticationContext();
instance.setUserDataService(mockUserDataService);
HttpServletResponse response = new MockHttpServletResponse();
MockHttpServletRequest request = new MockHttpServletRequest();
Model model = new ExtendedModelMap();
String idToRemove="idToRemove";
request.getSession().setAttribute(TgolKeyStore.USER_ID_TO_DELETE_KEY, idToRemove);
try {
instance.displayDeleteUserConfirmation(request, response, model);
assertTrue(false);
} catch (ForbiddenUserException fue) {
assertTrue(true);
}
idToRemove = "4";
request.getSession().setAttribute(TgolKeyStore.USER_ID_TO_DELETE_KEY, idToRemove);
String result = instance.displayDeleteUserConfirmation(request, response, model);
assertEquals(TgolKeyStore.ACCESS_DENIED_VIEW_NAME, result);
request.getSession().setAttribute(TgolKeyStore.USER_ID_TO_DELETE_KEY, Long.valueOf(6));
result = instance.displayDeleteUserConfirmation(request, response, model);
assertEquals(TgolKeyStore.ACCESS_DENIED_VIEW_NAME, result);
request.getSession().setAttribute(TgolKeyStore.USER_ID_TO_DELETE_KEY, Long.valueOf(5));
result = instance.displayDeleteUserConfirmation(request, response, model);
assertEquals(TgolKeyStore.ADMIN_VIEW_REDIRECT_NAME, result);
assertTrue(model.asMap().isEmpty());
assertEquals("user@test.com", request.getSession().getAttribute(TgolKeyStore.DELETED_USER_NAME_KEY));
}
private void setUpMockAuthenticationContext(){
// initialise the context with the user identified by the email
// "test1@test.com" seen as authenticated
Collection<GrantedAuthority> gac = new ArrayList<GrantedAuthority>();
TgolUserDetails tud = new TgolUserDetails("test1@test.com", "", true, false, true, true, gac, mockAdminUser);
mockAuthentication = createMock(Authentication.class);
SecurityContextImpl securityContextImpl = new SecurityContextImpl();
securityContextImpl.setAuthentication(mockAuthentication);
SecurityContextHolder.setContext(securityContextImpl);
expect(mockAuthentication.getName()).andReturn("admin@test.com").anyTimes();
expect(mockAuthentication.getPrincipal()).andReturn(tud).anyTimes();
expect(mockAuthentication.getAuthorities()).andReturn(null).anyTimes();
replay(mockAuthentication);
}
private void setUpMockUserDataService(
boolean hasDeleteCall,
boolean hasCreateCall,
boolean activatedAndAdmin,
boolean hasUpdateUserCall,
boolean hasUpdateAdminCall) {
// initialise the context with the user identified by the email
// "test1@test.com" seen as authenticated
Collection<User> userCollection = new ArrayList<User>();
mockUserDataService = createMock(UserDataService.class);
mockAdminUser = createMock(User.class);
mockUser = createMock(User.class);
mockNewUser = createMock(User.class);
expect(mockUserDataService.findAll()).andReturn(userCollection).anyTimes();
expect(mockUserDataService.read(Long.valueOf(4))).andReturn(mockAdminUser).anyTimes();
expect(mockUserDataService.getUserFromEmail("admin@test.com")).andReturn(mockAdminUser).anyTimes();
expect(mockUserDataService.read(Long.valueOf(5))).andReturn(mockUser).anyTimes();
expect(mockUserDataService.getUserFromEmail("user@test.com")).andReturn(mockUser).anyTimes();
expect(mockUserDataService.read(Long.valueOf(6))).andReturn(null).anyTimes();
expect(mockUserDataService.getUserFromEmail("null")).andReturn(null).anyTimes();
expect(mockUserDataService.getUserFromEmail("newUser@test.com")).andReturn(null).anyTimes();
if (hasDeleteCall) {
mockUserDataService.delete(Long.valueOf(5));
expectLastCall().once();
}
if (hasCreateCall) {
expect(mockUserDataService.create()).andReturn(mockNewUser).once();
mockNewUser.setEmail1("newUser@test.com");
expectLastCall().once();
mockNewUser.setPassword("6eccfd91aa8a36582fbf64b8ea533692");
expectLastCall().once();
mockNewUser.setWebUrl1("http://www.newSite.com/");
expectLastCall().once();
mockNewUser.setPhoneNumber(null);
expectLastCall().once();
mockNewUser.setName(null);
expectLastCall().once();
mockNewUser.setFirstName(null);
expectLastCall().once();
if (activatedAndAdmin) {
mockNewUser.setAccountActivation(true);
expectLastCall().once();
mockNewUser.setRole(mockAdminRole);
expectLastCall().once();
} else {
mockNewUser.setAccountActivation(false);
expectLastCall().once();
mockNewUser.setRole(mockUserRole);
expectLastCall().once();
}
expect(mockUserDataService.saveOrUpdate(mockNewUser)).andReturn(mockNewUser).once();
expect(mockNewUser.getEmail1()).andReturn("newUser@test.com").once();
}
if (hasUpdateUserCall) {
mockUser.setEmail1("user@test.com");
expectLastCall().once();
mockUser.setName("newName");
expectLastCall().once();
mockUser.setFirstName("newFirstName");
expectLastCall().once();
mockUser.setRole(mockAdminRole);
expectLastCall().once();
mockUser.setAccountActivation(false);
expectLastCall().once();
mockUser.setPhoneNumber("0102030405");
expectLastCall().once();
expect(mockUserDataService.saveOrUpdate(mockUser)).andReturn(mockUser).once();
expect(mockUser.getEmail1()).andReturn("user@test.com").once();
}
if (hasUpdateAdminCall) {
// mockAdminUser.setEmail1("admin@test.com");
// expectLastCall().once();
mockAdminUser.setName("newName");
expectLastCall().once();
mockAdminUser.setFirstName("newFirstName");
expectLastCall().once();
// never called cause the current user is the modified user
// mockAdminUser.setRole(mockAdminRole);
// expectLastCall().once();
// mockAdminUser.setAccountActivation(false);
// expectLastCall().once();
mockAdminUser.setPhoneNumber("0102030405");
expectLastCall().once();
expect(mockUserDataService.saveOrUpdate(mockAdminUser)).andReturn(mockAdminUser).once();
expect(mockAdminUser.getEmail1()).andReturn("admin@test.com").once();
}
expect(mockAdminUser.getEmail1()).andReturn("admin@test.com").anyTimes();
expect(mockAdminUser.getWebUrl1()).andReturn("http://www.admin.com").anyTimes();
expect(mockAdminUser.getFirstName()).andReturn("firstNameAdmin").anyTimes();
expect(mockAdminUser.getName()).andReturn("nameAdmin").anyTimes();
expect(mockAdminUser.getPhoneNumber()).andReturn("0123456789").anyTimes();
expect(mockAdminUser.isAccountActivated()).andReturn(true).anyTimes();
expect(mockAdminUser.getId()).andReturn(Long.valueOf(4)).anyTimes();
expect(mockAdminUser.getRole()).andReturn(mockAdminRole).anyTimes();
expect(mockUser.getEmail1()).andReturn("user@test.com").anyTimes();
expect(mockUser.getWebUrl1()).andReturn("http://www.user.com").anyTimes();
expect(mockUser.getFirstName()).andReturn("firstNameUser").anyTimes();
expect(mockUser.getName()).andReturn("nameUser").anyTimes();
expect(mockUser.getPhoneNumber()).andReturn("9876543210").anyTimes();
expect(mockUser.isAccountActivated()).andReturn(false).anyTimes();
expect(mockUser.getId()).andReturn(Long.valueOf(5)).anyTimes();
expect(mockUser.getRole()).andReturn(mockUserRole).anyTimes();
expect(mockUser.getContractSet()).andReturn(new ArrayList<Contract>()).anyTimes();
replay(mockUserDataService);
replay(mockAdminUser);
replay(mockUser);
replay(mockNewUser);
}
private void setUpMockRoleDataService() {
mockRoleDataService = createMock(RoleDataService.class);
mockUserRole = createMock(Role.class);
mockAdminRole = createMock(Role.class);
expect(mockRoleDataService.read(Long.valueOf(2))).andReturn(mockUserRole).anyTimes();
expect(mockRoleDataService.read(Long.valueOf(3))).andReturn(mockAdminRole).anyTimes();
expect(mockAdminRole.getId()).andReturn(Long.valueOf(3)).anyTimes();
expect(mockUserRole.getId()).andReturn(Long.valueOf(2)).anyTimes();
replay(mockAdminRole);
replay(mockUserRole);
replay(mockRoleDataService);
CreateUserCommandFactory.getInstance().setRoleDataService(mockRoleDataService);
}
}