/*!
* Copyright 2010 - 2015 Pentaho Corporation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.pentaho.di.ui.repository.repositoryexplorer;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.pentaho.di.repository.IUser;
import org.pentaho.di.repository.ObjectRecipient;
import org.pentaho.di.repository.pur.model.EERoleInfo;
import org.pentaho.di.repository.pur.model.EEUserInfo;
import org.pentaho.di.repository.pur.model.IRole;
import org.pentaho.di.ui.repository.pur.repositoryexplorer.IUIEEUser;
import org.pentaho.di.ui.repository.pur.repositoryexplorer.IUIRole;
import org.pentaho.di.ui.repository.pur.repositoryexplorer.model.UIEERepositoryUser;
import org.pentaho.di.ui.repository.pur.repositoryexplorer.model.UIEESecurity;
import org.pentaho.di.ui.repository.pur.repositoryexplorer.model.UIRepositoryRole;
import org.pentaho.di.ui.repository.repositoryexplorer.model.IUIUser;
import org.pentaho.di.ui.repository.repositoryexplorer.model.UIRepositoryUser;
public class UIEESecurityTest implements java.io.Serializable {
static final long serialVersionUID = -7889725393698207931L; /* EESOURCE: UPDATE SERIALVERUID */
private List<IUser> users = new ArrayList<IUser>();
private List<IRole> roles = new ArrayList<IRole>();
private UIEESecurity security = new UIEESecurity();
List<IUIRole> rroles;
List<IUIUser> rusers;
EEUserInfo joeUser;
EEUserInfo patUser;
EEUserInfo suzyUser;
EEUserInfo tiffanyUser;
EERoleInfo adminRole = new EERoleInfo( "Admin", "Super User" );
EERoleInfo anonymousRole = new EERoleInfo( "Anonymous", "User has not logged in" );
EERoleInfo authenticatedRole = new EERoleInfo( "Authenticated", "User has logged in" );
EERoleInfo ceoRole = new EERoleInfo( "ceo", "Chief Executive Officer" );
EERoleInfo ctoRole = new EERoleInfo( "cto", "Chief Technology Officer" );
EERoleInfo devRole = new EERoleInfo( "dev", "Developer" );
EERoleInfo devmgrRole = new EERoleInfo( "devmgr", "Development Manager" );
EERoleInfo isRole = new EERoleInfo( "is", "Information Services" );
@Before
public void init() {
roles.add( adminRole );
roles.add( anonymousRole );
roles.add( authenticatedRole );
roles.add( ceoRole );
roles.add( ctoRole );
roles.add( devRole );
roles.add( devmgrRole );
roles.add( isRole );
joeUser = new EEUserInfo( "joe", "password", "joe", "joe", true );
patUser = new EEUserInfo( "pat", "password", "pat", "pat", true );
suzyUser = new EEUserInfo( "suzy", "password", "suzy", "suzy", true );
tiffanyUser = new EEUserInfo( "tiffany", "password", "tiffany", "tiffany", true );
joeUser.addRole( roles.get( 0 ) );
joeUser.addRole( roles.get( 2 ) );
joeUser.addRole( roles.get( 3 ) );
suzyUser.addRole( roles.get( 2 ) );
suzyUser.addRole( roles.get( 4 ) );
suzyUser.addRole( roles.get( 7 ) );
patUser.addRole( roles.get( 2 ) );
patUser.addRole( roles.get( 5 ) );
tiffanyUser.addRole( roles.get( 2 ) );
tiffanyUser.addRole( roles.get( 5 ) );
tiffanyUser.addRole( roles.get( 6 ) );
adminRole.addUser( joeUser );
adminRole.addUser( patUser );
anonymousRole.addUser( tiffanyUser );
authenticatedRole.addUser( joeUser );
authenticatedRole.addUser( patUser );
authenticatedRole.addUser( suzyUser );
authenticatedRole.addUser( tiffanyUser );
ceoRole.addUser( joeUser );
ctoRole.addUser( patUser );
devmgrRole.addUser( joeUser );
devmgrRole.addUser( patUser );
isRole.addUser( joeUser );
isRole.addUser( suzyUser );
users.add( joeUser );
users.add( patUser );
users.add( suzyUser );
users.add( tiffanyUser );
rroles = new ArrayList<IUIRole>();
for ( IRole EERoleInfo : roles ) {
IUIRole role = new UIRepositoryRole( EERoleInfo );
rroles.add( role );
}
rusers = new ArrayList<IUIUser>();
for ( IUser eEUserInfo : users ) {
rusers.add( new UIRepositoryUser( eEUserInfo ) );
}
security.setUserList( rusers );
security.setRoleList( rroles );
}
protected IUIUser findUser( String username ) {
for ( IUIUser user : security.getUserList() ) {
if ( user.getName().equals( username ) ) {
return user;
}
}
return null;
}
private IUIRole findRole( String rolename ) {
for ( IUIRole role : security.getRoleList() ) {
if ( role.getName().equals( rolename ) ) {
return role;
}
}
return null;
}
@Test
public void testAddUser() throws Exception {
try {
security.setSelectedDeck( ObjectRecipient.Type.USER );
UIEERepositoryUser userToAdd = new UIEERepositoryUser( new EEUserInfo() );
userToAdd.setName( "newuser" );
userToAdd.setPassword( "newpassword" );
userToAdd.setDescription( "new description" );
Set<IUIRole> rolesToAssign = new HashSet<IUIRole>();
rolesToAssign.add( new UIRepositoryRole( ctoRole ) );
rolesToAssign.add( new UIRepositoryRole( isRole ) );
rolesToAssign.add( new UIRepositoryRole( adminRole ) );
rolesToAssign.add( new UIRepositoryRole( authenticatedRole ) );
userToAdd.setRoles( rolesToAssign );
security.addUser( userToAdd );
assertEquals( security.getSelectedUser(), userToAdd );
assertEquals( security.getSelectedDeck(), ObjectRecipient.Type.USER );
assertEquals( security.getUserList().size(), 5 );
} catch ( Exception e ) {
Assert.fail();
}
}
@Test
public void testUpdateUser() throws Exception {
try {
UIEERepositoryUser userToAdd = new UIEERepositoryUser( new EEUserInfo() );
userToAdd.setName( "newuser" );
userToAdd.setPassword( "newpassword" );
userToAdd.setDescription( "new description" );
Set<IUIRole> rolesToAssign = new HashSet<IUIRole>();
rolesToAssign.add( new UIRepositoryRole( ctoRole ) );
rolesToAssign.add( new UIRepositoryRole( isRole ) );
rolesToAssign.add( new UIRepositoryRole( adminRole ) );
rolesToAssign.add( new UIRepositoryRole( authenticatedRole ) );
userToAdd.setRoles( rolesToAssign );
security.addUser( userToAdd );
IUIUser selectedUser = security.getSelectedUser();
selectedUser.setPassword( "newpassword123" );
selectedUser.setDescription( "new description 123" );
( (IUIEEUser) selectedUser ).addRole( new UIRepositoryRole( ctoRole ) );
( (IUIEEUser) selectedUser ).addRole( new UIRepositoryRole( isRole ) );
( (IUIEEUser) selectedUser ).removeRole( new UIRepositoryRole( adminRole ) );
( (IUIEEUser) selectedUser ).removeRole( new UIRepositoryRole( authenticatedRole ) );
security.updateUser( selectedUser, rolesToAssign );
assertEquals( selectedUser.getPassword(), "newpassword123" );//$NON-NLS-1$
assertEquals( selectedUser.getDescription(), "new description 123" ); //$NON-NLS-1$
assertEquals( security.getSelectedUser(), selectedUser );
assertEquals( security.getUserList().size(), 5 );
} catch ( Exception e ) {
Assert.fail();
}
}
@Test
public void testRemoveUser() throws Exception {
try {
UIEERepositoryUser userToAdd = new UIEERepositoryUser( new EEUserInfo() );
userToAdd.setName( "newuser" );
userToAdd.setPassword( "newpassword" );
userToAdd.setDescription( "new description" );
Set<IUIRole> rolesToAssign = new HashSet<IUIRole>();
rolesToAssign.add( new UIRepositoryRole( ctoRole ) );
rolesToAssign.add( new UIRepositoryRole( isRole ) );
rolesToAssign.add( new UIRepositoryRole( adminRole ) );
rolesToAssign.add( new UIRepositoryRole( authenticatedRole ) );
userToAdd.setRoles( rolesToAssign );
security.addUser( userToAdd );
// IUIUser selectedUser = security.getSelectedUser();
int removeUserIndex = security.getSelectedUserIndex();
security.removeUser( "newuser" );
assertEquals( security.getSelectedUserIndex(), removeUserIndex - 1 );
assertEquals( security.getUserList().size(), 4 );
} catch ( Exception e ) {
Assert.fail();
}
}
@Test
public void testAddRole() throws Exception {
try {
security.setSelectedDeck( ObjectRecipient.Type.ROLE );
UIRepositoryRole roleToAdd = new UIRepositoryRole( new EERoleInfo() );
roleToAdd.setName( "newrole" );
roleToAdd.setDescription( "new description" );
Set<EEUserInfo> usersToAssign = new HashSet<EEUserInfo>();
usersToAssign.add( suzyUser );
usersToAssign.add( tiffanyUser );
usersToAssign.add( joeUser );
security.addRole( roleToAdd );
assertEquals( security.getSelectedRole(), roleToAdd );
assertEquals( security.getSelectedDeck(), ObjectRecipient.Type.ROLE );
assertEquals( security.getRoleList().size(), 9 );
} catch ( Exception e ) {
Assert.fail();
}
}
@Test
public void testUpdateRole() throws Exception {
try {
IUIRole roleToAdd = new UIRepositoryRole( new EERoleInfo() );
roleToAdd.setName( "newrole" );
roleToAdd.setDescription( "new description" );
Set<IUIUser> usersToAssign = new HashSet<IUIUser>();
usersToAssign.add( new UIRepositoryUser( suzyUser ) );
usersToAssign.add( new UIRepositoryUser( tiffanyUser ) );
usersToAssign.add( new UIRepositoryUser( joeUser ) );
roleToAdd.setUsers( usersToAssign );
security.addRole( roleToAdd );
security.setSelectedRole( findRole( "newrole" ) );
IUIRole selectedRole = security.getSelectedRole();
selectedRole.setDescription( "new description 123" );
selectedRole.addUser( new UIRepositoryUser( patUser ) );
selectedRole.removeUser( new UIRepositoryUser( suzyUser ) );
selectedRole.removeUser( new UIRepositoryUser( tiffanyUser ) );
security.updateRole( selectedRole, usersToAssign );
assertEquals( selectedRole.getDescription(), "new description 123" ); //$NON-NLS-1$
assertEquals( security.getSelectedRole(), selectedRole );
assertEquals( security.getRoleList().size(), 9 );
} catch ( Exception e ) {
Assert.fail();
}
}
@Test
public void testRemoveRole() throws Exception {
try {
UIRepositoryRole roleToAdd = new UIRepositoryRole( new EERoleInfo() );
roleToAdd.setName( "newrole" );
roleToAdd.setDescription( "new description" );
Set<EEUserInfo> usersToAssign = new HashSet<EEUserInfo>();
usersToAssign.add( suzyUser );
usersToAssign.add( tiffanyUser );
usersToAssign.add( joeUser );
security.addRole( roleToAdd );
// IUIRole selectedRole = security.getSelectedRole();
int removeRoleIndex = security.getSelectedRoleIndex();
security.removeRole( "newrole" );
assertEquals( security.getSelectedRoleIndex(), removeRoleIndex - 1 );
assertEquals( security.getRoleList().size(), 8 );
} catch ( Exception e ) {
Assert.fail();
}
}
}