/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.security.userstore.connector.remote; import java.util.List; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.user.UserKey; import com.enonic.cms.core.security.user.UserSpecification; import com.enonic.cms.core.security.userstore.UserStoreEntity; import com.enonic.cms.core.security.userstore.UserStoreKey; import com.enonic.cms.api.plugin.ext.userstore.RemoteUser; import com.enonic.cms.store.dao.UserDao; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isA; import static org.easymock.EasyMock.replay; import static org.junit.Assert.*; /** * Created by rmy - Date: Sep 4, 2009 */ public class AbstractBaseUserSynchronizerTest { private AbstractBaseUserSynchronizer abstractBaseUserSynchronizer; private UserDao userDao; private UserStoreEntity userStore; private int lastUserKeyCounter; @Before public void setUp() { userStore = createUserStore( 1 ); abstractBaseUserSynchronizer = new UserSynchronizer( userStore, false ); userDao = createMock( UserDao.class ); abstractBaseUserSynchronizer.setUserDao( userDao ); } @Test public void emailAlreadyUsedByOtherUser_returns_false_when_user_email_is_unique() { UserEntity localUser = createUser( "rmy", "rmy@enonic.com", userStore, false ); RemoteUser remoteUser = createRemoteUser( "rmy" ); List<UserEntity> matchingUsers = Lists.newArrayList( localUser ); expect( userDao.findBySpecification( isA( UserSpecification.class ) ) ).andReturn( matchingUsers ).anyTimes(); replay( userDao ); final String email = abstractBaseUserSynchronizer.getEmailToVerify( localUser, remoteUser ); assertFalse( abstractBaseUserSynchronizer.emailAlreadyUsedByOtherUser( email, localUser ) ); } @Test public void emailAlreadyUsedByOtherUser_returns_false_when_other_user_with_same_email_is_deleted() { UserEntity localUser = createUser( "rmy", "rmy@enoni.com", userStore, false ); RemoteUser remoteUser = createRemoteUser( "rmy" ); List<UserEntity> matchingUsers = Lists.newArrayList( localUser ); expect( userDao.findBySpecification( isA( UserSpecification.class ) ) ).andReturn( matchingUsers ).anyTimes(); replay( userDao ); final String email = abstractBaseUserSynchronizer.getEmailToVerify( localUser, remoteUser ); assertFalse( abstractBaseUserSynchronizer.emailAlreadyUsedByOtherUser( email, localUser ) ); } @Test public void emailAlreadyUsedByOtherUser_returns_true_when_other_user_with_same_email_exists() { RemoteUser remoteUser = createRemoteUser( "rmy" ); UserEntity localUser = createUser( "rmy", "rmy@enoni.com", userStore, false ); List<UserEntity> matchingUsers = Lists.newArrayList( localUser, createUser( "extrmy", "rmy@enoni.com", userStore, false ) ); expect( userDao.findBySpecification( isA( UserSpecification.class ) ) ).andReturn( matchingUsers ).anyTimes(); replay( userDao ); final String email = abstractBaseUserSynchronizer.getEmailToVerify( localUser, remoteUser ); assertTrue( abstractBaseUserSynchronizer.emailAlreadyUsedByOtherUser( email, localUser ) ); } @Test public void emailAlreadyUsedByOtherUser_returns_true_when_same_user_exists_twice_with_same_email() { RemoteUser remoteUser = createRemoteUser( "rmy" ); UserEntity localUser = createUser( "rmy", "rmy@enoni.com", userStore, false ); List<UserEntity> matchingUsers = Lists.newArrayList( localUser, createUser( "rmy", "rmy@enoni.com", userStore, false ) ); expect( userDao.findBySpecification( isA( UserSpecification.class ) ) ).andReturn( matchingUsers ).anyTimes(); replay( userDao ); final String email = abstractBaseUserSynchronizer.getEmailToVerify( localUser, remoteUser ); assertTrue( abstractBaseUserSynchronizer.emailAlreadyUsedByOtherUser( email, localUser ) ); } private UserEntity createUser( String uid, String email, UserStoreEntity userStore, boolean isDeleted ) { UserEntity user = new UserEntity(); UserKey userKey = new UserKey( uid + ( lastUserKeyCounter++ ) ); user.setKey( userKey ); user.setName( uid ); user.setEmail( email ); user.setUserStore( userStore ); user.setDeleted( isDeleted ); return user; } private RemoteUser createRemoteUser( String id ) { RemoteUser user = new RemoteUser( id ); user.setEmail( id + "@enonic" ); return user; } private UserStoreEntity createUserStore( int key ) { UserStoreEntity userStore = new UserStoreEntity(); userStore.setKey( new UserStoreKey( key ) ); userStore.setName( "myUserStore" + key ); return userStore; } }