/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.itest.client; import java.io.IOException; import org.jdom.JDOMException; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.mock.web.MockHttpServletRequest; import com.enonic.cms.api.client.model.CreateUserParams; import com.enonic.cms.api.client.model.DeleteUserParams; import com.enonic.cms.api.client.model.user.UserInfo; import com.enonic.cms.api.plugin.ext.userstore.UserFieldType; import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig; import com.enonic.cms.core.client.InternalClient; import com.enonic.cms.core.config.ConfigProperties; import com.enonic.cms.core.security.PortalSecurityHolder; import com.enonic.cms.core.security.group.GroupType; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import com.enonic.cms.core.security.userstore.UserStoreEntity; import com.enonic.cms.core.security.userstore.connector.config.UserStoreConnectorConfigLoader; import com.enonic.cms.core.servlet.ServletRequestAccessor; import com.enonic.cms.itest.AbstractSpringTest; import com.enonic.cms.itest.userstore.MemUserDatabase; import com.enonic.cms.itest.util.DomainFactory; import com.enonic.cms.itest.util.DomainFixture; import static org.junit.Assert.*; public class InternalClientImpl_DeleteUserTest extends AbstractSpringTest { @Autowired @Qualifier("localClient") private InternalClient internalClient; @Autowired private DomainFixture fixture; @Autowired private UserStoreConnectorConfigLoader userStoreConnectorConfigLoader; @Autowired private MemUserDatabase userDatabase; @Before public void before() throws IOException, JDOMException { fixture.initSystemData(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setRemoteAddr( "127.0.0.1" ); ServletRequestAccessor.setRequest( request ); } @Test public void delete_user_in_local_userstore_by_userstorename_and_username_deletes_the_user() throws Exception { // setup: clientLogin( "admin" ); createUser( "testuserstore", "myuser", "mypassword", "myemail@test.com", "My User" ); fixture.flushAndClearHibernateSession(); // verify setup: assertEquals( false, fixture.findUserByName( "myuser" ).isDeleted() ); DeleteUserParams params = new DeleteUserParams(); params.user = "testuserstore:myuser"; internalClient.deleteUser( params ); fixture.flushAndClearHibernateSession(); // verify assertEquals( true, fixture.findUserByName( "myuser" ).isDeleted() ); } @Test public void delete_user_in_local_userstore_by_userkey_deletes_the_user() throws Exception { // setup: clientLogin( "admin" ); UserKey userKey = createUser( "testuserstore", "myuser", "mypassword", "myemail@test.com", "My User" ); fixture.flushAndClearHibernateSession(); // verify setup: assertEquals( false, fixture.findUserByName( "myuser" ).isDeleted() ); DeleteUserParams params = new DeleteUserParams(); params.user = "#" + userKey; internalClient.deleteUser( params ); fixture.flushAndClearHibernateSession(); // verify assertEquals( true, fixture.findUserByName( "myuser" ).isDeleted() ); } @Test public void delete_user_in_remote_userstore_by_userstorename_and_username_deletes_the_user() throws Exception { setupRemoteUserStore(); // setup: clientLogin( "admin" ); createUserWithFirstAndLastName( "myRemoteUserStore", "myuser", "mypassword", "myemail@test.com", "Firstname", "Lastname" ); fixture.flushAndClearHibernateSession(); // verify setup: assertEquals( false, fixture.findUserByName( "myuser" ).isDeleted() ); DeleteUserParams params = new DeleteUserParams(); params.user = "myRemoteUserStore:myuser"; internalClient.deleteUser( params ); fixture.flushAndClearHibernateSession(); // verify assertEquals( true, fixture.findUserByName( "myuser" ).isDeleted() ); } @Test public void delete_user_in_remote_userstore_by_userkey_deletes_the_user() throws Exception { setupRemoteUserStore(); // setup: clientLogin( "admin" ); UserKey userKey = createUserWithFirstAndLastName( "myRemoteUserStore", "myuser", "mypassword", "myemail@test.com", "Firstname", "Lastname" ); fixture.flushAndClearHibernateSession(); // verify setup: assertEquals( false, fixture.findUserByName( "myuser" ).isDeleted() ); DeleteUserParams params = new DeleteUserParams(); params.user = "#" + userKey; internalClient.deleteUser( params ); fixture.flushAndClearHibernateSession(); // verify assertEquals( true, fixture.findUserByName( "myuser" ).isDeleted() ); } private UserKey createUser( String userstoreName, String username, String password, String email, String displayName ) { CreateUserParams params = new CreateUserParams(); params.userstore = userstoreName; params.username = username; params.password = password; params.email = email; params.displayName = displayName; return new UserKey( internalClient.createUser( params ) ); } private UserKey createUserWithFirstAndLastName( String userstoreName, String username, String password, String email, String firstName, String lastName ) { CreateUserParams params = new CreateUserParams(); params.userstore = userstoreName; params.username = username; params.password = password; params.email = email; UserInfo userInfo = new UserInfo(); userInfo.setFirstName( firstName ); userInfo.setLastName( lastName ); params.userInfo = userInfo; return new UserKey( internalClient.createUser( params ) ); } private void clientLogin( String username ) { UserEntity user = fixture.findUserByName( username ); PortalSecurityHolder.setLoggedInUser( user.getKey() ); PortalSecurityHolder.setImpersonatedUser( user.getKey() ); } private void setupRemoteUserStore() throws Exception { this.userDatabase.clear(); final ConfigProperties properties = new ConfigProperties(); properties.setProperty( "cms.userstore.connector.myRemoteUserStore.userPolicy", "all" ); properties.setProperty( "cms.userstore.connector.myRemoteUserStore.plugin", "mem" ); this.userStoreConnectorConfigLoader.setProperties( properties ); final DomainFactory factory = this.fixture.getFactory(); UserStoreEntity userStore = factory.createUserStore( "myRemoteUserStore", "myRemoteUserStore", true ); UserStoreConfig userStoreConfig = new UserStoreConfig(); userStoreConfig.addUserFieldConfig( factory.createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "remote, required" ) ); userStoreConfig.addUserFieldConfig( factory.createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "remote, required" ) ); userStore.setConfig( userStoreConfig ); this.fixture.save( userStore ); this.fixture.save( factory.createGroupInUserstore( GroupType.AUTHENTICATED_USERS.getName(), GroupType.AUTHENTICATED_USERS, "myRemoteUserStore" ) ); this.fixture.save( factory.createGroupInUserstore( GroupType.USERSTORE_ADMINS.getName(), GroupType.USERSTORE_ADMINS, "myRemoteUserStore" ) ); this.fixture.flushAndClearHibernateSession(); } }