/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.vertical.adminweb;
import org.junit.Test;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfigField;
import com.enonic.cms.core.security.userstore.UserStoreEntity;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig;
import com.enonic.cms.api.plugin.ext.userstore.UserFieldType;
import static org.junit.Assert.*;
public class UserFormEditableFieldsResolverTest
{
private boolean canCreateUserConnectorPolicy = false;
private boolean canUpdateUserConnectorPolicy = false;
private UserStoreEntity userStore;
private UserStoreConfig userStoreConfig = new UserStoreConfig();
private UserFormEditableFieldsResolver resolver;
@Test
public void isEmailEditable_given_local_userStore_when_creating_then_true_is_returned()
{
userStore = createUserStore( false, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isEmailEditable() );
}
@Test
public void isEmailEditable_given_local_userStore_when_updating_then_true_is_returned()
{
userStore = createUserStore( false, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.UPDATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isEmailEditable() );
}
@Test
public void isEmailEditable_given_remote_userStore_and_userStore_policy_is_readOnly_when_creating_then_false_is_returned()
{
canCreateUserConnectorPolicy = false;
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isEmailEditable() );
}
@Test
public void isEmailEditable_given_remote_userStore_and_userStore_policy_is_not_readOnly_when_creating_then_true_is_returned()
{
canCreateUserConnectorPolicy = true;
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isEmailEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_not_readOnly_and_userStore_is_local_when_creating_then_returns_true()
{
userStoreConfig.addUserFieldConfig( createLocalUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( false, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_readOnly_and_userStore_is_local_when_creating_then_returns_false()
{
userStoreConfig.addUserFieldConfig( createLocalReadOnlyUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( false, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_local_and_not_readOnly_when_creating_then_returns_true()
{
userStoreConfig.addUserFieldConfig( createLocalUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_local_and_readOnly_when_creating_then_returns_false()
{
userStoreConfig.addUserFieldConfig( createLocalReadOnlyUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_not_readOnly_and_userstore_policy_is_readOnly_when_creating_then_returns_false()
{
canCreateUserConnectorPolicy = false;
userStoreConfig.addUserFieldConfig( createRemoteUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_readOnly_and_userstore_policy_is_readOnly_when_creating_then_returns_false()
{
canCreateUserConnectorPolicy = false;
userStoreConfig.addUserFieldConfig( createRemoteReadOnlyUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_not_readOnly_and_userstore_policy_is_not_readOnly_when_creating_then_returns_true()
{
canCreateUserConnectorPolicy = true;
userStoreConfig.addUserFieldConfig( createRemoteUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_not_readOnly_and_userstore_policy_is_not_readOnly_when_updating_then_returns_true()
{
canUpdateUserConnectorPolicy = true;
userStoreConfig.addUserFieldConfig( createRemoteUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.UPDATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertTrue( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_not_readOnly_and_userstore_policy_is_readOnly_when_creating_then_returns_true()
{
canCreateUserConnectorPolicy = false;
userStoreConfig.addUserFieldConfig( createRemoteUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.CREATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
@Test
public void isFirstNameEditable_given_field_is_remote_and_not_readOnly_and_userstore_policy_is_readOnly_when_updating_then_returns_false()
{
canUpdateUserConnectorPolicy = false;
userStoreConfig.addUserFieldConfig( createRemoteUserFieldConfig( UserFieldType.FIRST_NAME ) );
userStore = createUserStore( true, userStoreConfig );
resolver =
new UserFormEditableFieldsResolver( userStore, UserFormEditableFieldsResolver.FormAction.UPDATE, canCreateUserConnectorPolicy,
canUpdateUserConnectorPolicy );
assertFalse( resolver.isFirstNameEditable() );
}
private UserStoreConfigField createLocalUserFieldConfig( UserFieldType type )
{
UserStoreConfigField userFieldConfig = new UserStoreConfigField( type );
userFieldConfig.setRemote( false );
userFieldConfig.setReadOnly( false );
return userFieldConfig;
}
private UserStoreConfigField createLocalReadOnlyUserFieldConfig( UserFieldType type )
{
UserStoreConfigField userFieldConfig = new UserStoreConfigField( type );
userFieldConfig.setRemote( false );
userFieldConfig.setReadOnly( true );
return userFieldConfig;
}
private UserStoreConfigField createRemoteUserFieldConfig( UserFieldType type )
{
UserStoreConfigField userFieldConfig = new UserStoreConfigField( type );
userFieldConfig.setRemote( true );
userFieldConfig.setReadOnly( false );
return userFieldConfig;
}
private UserStoreConfigField createRemoteReadOnlyUserFieldConfig( UserFieldType type )
{
UserStoreConfigField userFieldConfig = new UserStoreConfigField( type );
userFieldConfig.setRemote( true );
userFieldConfig.setReadOnly( true );
return userFieldConfig;
}
private UserStoreEntity createUserStore( boolean remote, UserStoreConfig config )
{
UserStoreEntity userStore = new UserStoreEntity();
userStore.setConfig( config );
if ( remote )
{
userStore.setConnectorName( "myRemoteConnector" );
}
assertTrue( userStore.isRemote() == remote );
return userStore;
}
}