/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.web.portal.services;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.joda.time.DateMidnight;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockHttpSession;
import com.enonic.esl.containers.ExtendedMap;
import com.enonic.esl.util.DateUtil;
import com.enonic.cms.api.client.model.user.Gender;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfigField;
import com.enonic.cms.core.Attribute;
import com.enonic.cms.core.portal.httpservices.HttpServicesException;
import com.enonic.cms.core.security.PortalSecurityHolder;
import com.enonic.cms.core.security.SecurityService;
import com.enonic.cms.core.security.user.StoreNewUserCommand;
import com.enonic.cms.core.security.user.UserKey;
import com.enonic.cms.core.security.user.UserType;
import com.enonic.cms.core.security.userstore.StoreNewUserStoreCommand;
import com.enonic.cms.core.security.userstore.UserStoreKey;
import com.enonic.cms.core.security.userstore.UserStoreService;
import com.enonic.cms.api.plugin.ext.userstore.UserStoreConfig;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.core.structure.SiteKey;
import com.enonic.cms.core.structure.SitePath;
import com.enonic.cms.api.plugin.ext.userstore.UserFieldType;
import com.enonic.cms.api.plugin.ext.userstore.UserFields;
import com.enonic.cms.itest.AbstractSpringTest;
import com.enonic.cms.itest.util.DomainFixture;
import com.enonic.cms.store.dao.UserDao;
import com.enonic.cms.web.portal.SiteRedirectHelper;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
import static org.easymock.classextension.EasyMock.createMock;
public class UserServicesProcessorTest_operation_UpdateTest
extends AbstractSpringTest
{
@Autowired
private UserDao userDao;
@Autowired
private SecurityService securityService;
@Autowired
private UserStoreService userStoreService;
@Autowired
private DomainFixture fixture;
private MockHttpServletRequest request = new MockHttpServletRequest();
private MockHttpServletResponse response = new MockHttpServletResponse();
private MockHttpSession session = new MockHttpSession();
private UserServicesProcessor userHandlerController;
@Before
public void setUp()
{
fixture.initSystemData();
userHandlerController = new UserServicesProcessor();
userHandlerController.setUserDao( userDao );
userHandlerController.setSecurityService( securityService );
userHandlerController.setUserStoreService( userStoreService );
userHandlerController.setUserServicesRedirectHelper( new UserServicesRedirectUrlResolver() );
// just need a dummy of the SiteRedirectHelper
userHandlerController.setSiteRedirectHelper( createMock( SiteRedirectHelper.class ) );
request.setRemoteAddr( "127.0.0.1" );
ServletRequestAccessor.setRequest( request );
PortalSecurityHolder.setAnonUser( fixture.findUserByName( "anonymous" ).getKey() );
}
@After
public void after()
{
securityService.logoutPortalUser();
}
@Test
public void update_given_fields_not_sent_then_fields_must_not_be_nulled()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HOME_PAGE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.ORGANIZATION, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.GENDER, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HTML_EMAIL, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setBirthday( new DateMidnight( 2012, 12, 12 ).toDate() );
userFields.setOrganization( "Java Mafia" );
userFields.setHomePage( "http://www.homepage.com" );
userFields.setLocale( Locale.FRENCH );
userFields.setGender( Gender.FEMALE );
userFields.setHtmlEmail( true );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( userFields.getBirthday() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userFields.getBirthday() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userFields.getBirthday() );
assertEquals( "http://www.homepage.com", userFields.getHomePage() );
assertEquals( "Java Mafia", userFields.getOrganization() );
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( Gender.FEMALE, userFields.getGender() );
assertEquals( Boolean.TRUE, userFields.getHtmlEmail() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", "Initials changed" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "Initials changed", userFields.getInitials() );
assertEquals( "Last name changed", userFields.getLastName() );
assertEquals( "First name changed", userFields.getFirstName() );
assertEquals( null, userFields.getHomePage() );
assertEquals( null, userFields.getBirthday() );
assertEquals( null, userFields.getHomePage() );
assertEquals( null, userFields.getOrganization() );
assertEquals( null, userFields.getLocale() );
assertEquals( null, userFields.getGender() );
assertEquals( null, userFields.getHtmlEmail() );
}
@Test
public void update_given_user_field_with_empty_value()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HOME_PAGE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.ORGANIZATION, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.GENDER, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HTML_EMAIL, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userInfo = new UserFields();
userInfo.setFirstName( "First name" );
userInfo.setLastName( "Last name" );
userInfo.setInitials( "INI" );
userInfo.setBirthday( new DateMidnight( 2012, 12, 12 ).toDate() );
userInfo.setOrganization( "Java Mafia" );
userInfo.setHomePage( "http://www.homepage.com" );
userInfo.setLocale( Locale.FRENCH );
userInfo.setGender( Gender.FEMALE );
userInfo.setHtmlEmail( true );
createNormalUser( "testuser", "myLocalStore", userInfo );
// setup: verify user
userInfo = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( userInfo.getBirthday() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userInfo.getBirthday() );
assertEquals( "INI", userInfo.getInitials() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userInfo.getBirthday() );
assertEquals( "http://www.homepage.com", userInfo.getHomePage() );
assertEquals( "Java Mafia", userInfo.getOrganization() );
assertEquals( Locale.FRENCH, userInfo.getLocale() );
assertEquals( Gender.FEMALE, userInfo.getGender() );
assertEquals( Boolean.TRUE, userInfo.getHtmlEmail() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", "Initials changed" );
formItems.putString( "home_page", "" );
formItems.putString( "organization", "" );
formItems.putString( "locale", "" );
formItems.putString( "gender", "" );
formItems.putString( "html-email", "" );
formItems.putString( "birthday", "" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userInfo = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "Initials changed", userInfo.getInitials() );
assertEquals( "", userInfo.getOrganization() );
assertEquals( "", userInfo.getHomePage() );
assertEquals( null, userInfo.getLocale() );
assertEquals( null, userInfo.getGender() );
assertEquals( null, userInfo.getHtmlEmail() );
assertEquals( null, userInfo.getBirthday() );
}
@Test
public void update_given_non_textual_fields_not_sent_then_fields_must_set_to_null()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.GENDER, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HTML_EMAIL, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.TIME_ZONE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setBirthday( new DateMidnight( 2012, 12, 12 ).toDate() );
userFields.setGender( Gender.FEMALE );
userFields.setHtmlEmail( true );
userFields.setInitials( "INI" );
userFields.setLocale( Locale.FRENCH );
userFields.setTimezone( TimeZone.getTimeZone( "UTC" ) );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( userFields.getBirthday() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userFields.getBirthday() );
assertEquals( Gender.FEMALE, userFields.getGender() );
assertEquals( Boolean.TRUE, userFields.getHtmlEmail() );
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( TimeZone.getTimeZone( "UTC" ), userFields.getTimeZone() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "initials", "Initials changed" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "Initials changed", userFields.getInitials() );
assertEquals( null, userFields.getLocale() );
assertEquals( null, userFields.getGender() );
assertEquals( null, userFields.getHtmlEmail() );
assertEquals( null, userFields.getBirthday() );
assertEquals( null, userFields.getTimeZone() );
}
@Test
public void update_given_non_textual_fields_with_value_empty_then_fields_must_set_to_null()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.GENDER, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HTML_EMAIL, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.TIME_ZONE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setBirthday( new DateMidnight( 2012, 12, 12 ).toDate() );
userFields.setGender( Gender.FEMALE );
userFields.setHtmlEmail( true );
userFields.setInitials( "INI" );
userFields.setLocale( Locale.FRENCH );
userFields.setTimezone( TimeZone.getTimeZone( "UTC" ) );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( userFields.getBirthday() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userFields.getBirthday() );
assertEquals( Gender.FEMALE, userFields.getGender() );
assertEquals( Boolean.TRUE, userFields.getHtmlEmail() );
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( TimeZone.getTimeZone( "UTC" ), userFields.getTimeZone() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "initials", "Initials changed" );
formItems.putString( "locale", "" );
formItems.putString( "gender", "" );
formItems.putString( "html-email", "" );
formItems.putString( "birthday", "" );
formItems.putString( "time-zone", "" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "Initials changed", userFields.getInitials() );
assertEquals( null, userFields.getLocale() );
assertEquals( null, userFields.getGender() );
assertEquals( null, userFields.getHtmlEmail() );
assertEquals( null, userFields.getBirthday() );
assertEquals( null, userFields.getTimeZone() );
}
@Test
public void update_given_non_textual_fields_with_value_null_then_fields_must_set_to_null()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.GENDER, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.HTML_EMAIL, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.TIME_ZONE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setBirthday( new DateMidnight( 2012, 12, 12 ).toDate() );
userFields.setGender( Gender.FEMALE );
userFields.setHtmlEmail( true );
userFields.setInitials( "INI" );
userFields.setLocale( Locale.FRENCH );
userFields.setTimezone( TimeZone.getTimeZone( "UTC" ) );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( userFields.getBirthday() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( new DateMidnight( 2012, 12, 12 ).toDate(), userFields.getBirthday() );
assertEquals( Gender.FEMALE, userFields.getGender() );
assertEquals( Boolean.TRUE, userFields.getHtmlEmail() );
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( TimeZone.getTimeZone( "UTC" ), userFields.getTimeZone() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "initials", "Initials changed" );
formItems.putString( "locale", null );
formItems.putString( "gender", null );
formItems.putString( "html-email", null );
formItems.putString( "birthday", null );
formItems.putString( "time-zone", null );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "Initials changed", userFields.getInitials() );
assertEquals( null, userFields.getLocale() );
assertEquals( null, userFields.getGender() );
assertEquals( null, userFields.getHtmlEmail() );
assertEquals( null, userFields.getBirthday() );
assertEquals( null, userFields.getTimeZone() );
}
@Test
public void update_given_textual_user_field_with_empty_value_then_value_is_set_to_empty()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.ORGANIZATION, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setOrganization( "Org" );
userFields.setLocale( Locale.GERMAN );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "First name", userFields.getFirstName() );
assertEquals( "Last name", userFields.getLastName() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( "Org", userFields.getOrganization() );
assertEquals( Locale.GERMAN, userFields.getLocale() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "locale", Locale.FRENCH.toString() );
formItems.putString( "first-name", "" );
formItems.putString( "last-name", "" );
formItems.putString( "initials", "" );
formItems.putString( "organization", "" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( "", userFields.getFirstName() );
assertEquals( "", userFields.getLastName() );
assertEquals( "", userFields.getInitials() );
assertEquals( "", userFields.getOrganization() );
}
@Test
public void update_given_textual_user_field_with_value_null_then_value_is_set_to_null()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.ORGANIZATION, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setOrganization( "Org" );
userFields.setLocale( Locale.GERMAN );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "First name", userFields.getFirstName() );
assertEquals( "Last name", userFields.getLastName() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( "Org", userFields.getOrganization() );
assertEquals( Locale.GERMAN, userFields.getLocale() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "locale", Locale.FRENCH.toString() );
formItems.putString( "first-name", null );
formItems.putString( "last-name", null );
formItems.putString( "initials", null );
formItems.putString( "organization", null );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( null, userFields.getFirstName() );
assertEquals( null, userFields.getLastName() );
assertEquals( null, userFields.getInitials() );
assertEquals( null, userFields.getOrganization() );
}
@Test
public void update_given_textual_user_field_not_sent_then_value_is_set_to_null()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.ORGANIZATION, "" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LOCALE, "" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setOrganization( "Org" );
userFields.setLocale( Locale.GERMAN );
createNormalUser( "testuser", "myLocalStore", userFields );
// setup: verify user
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( "First name", userFields.getFirstName() );
assertEquals( "Last name", userFields.getLastName() );
assertEquals( "INI", userFields.getInitials() );
assertEquals( "Org", userFields.getOrganization() );
assertEquals( Locale.GERMAN, userFields.getLocale() );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "email", "testuser@example.com" );
formItems.putString( "locale", Locale.FRENCH.toString() );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
userFields = fixture.findUserByName( "testuser" ).getUserFields();
assertEquals( Locale.FRENCH, userFields.getLocale() );
assertEquals( null, userFields.getFirstName() );
assertEquals( null, userFields.getLastName() );
assertEquals( null, userFields.getInitials() );
assertEquals( null, userFields.getOrganization() );
}
@Test
public void update_without_required_fields_on_local_user_store_throws_exception()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
createNormalUser( "testuser", "myLocalStore", userFields );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "username", "testcreate" );
formItems.putString( "password", "password" );
formItems.putString( "email", "test@test.com" );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
loginPortalUser( "testuser" );
try
{
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
fail( "Expected exception" );
}
catch ( Exception e )
{
assertTrue( e instanceof HttpServicesException );
assertEquals( "Error in http services, error code: 400", e.getMessage() );
}
}
@Test
public void update_with_blank_required_fields_on_local_user_store_throws_exception()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
createNormalUser( "testuser", "myLocalStore", userFields );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "username", "testcreate" );
formItems.putString( "password", "password" );
formItems.putString( "email", "test@test.com" );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", " " ); // field set but blank
loginPortalUser( "testuser" );
try
{
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
fail( "Expected exception" );
}
catch ( Exception e )
{
assertTrue( e instanceof HttpServicesException );
assertEquals( "Error in http services, error code: 400", e.getMessage() );
}
}
@Test
public void update_with_empty_required_fields_on_local_user_store_throws_exception()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
createNormalUser( "testuser", "myLocalStore", userFields );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = createExtendedMap();
formItems.putString( "username", "testcreate" );
formItems.putString( "password", "password" );
formItems.putString( "email", "test@test.com" );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", "" ); // field set but empty
loginPortalUser( "testuser" );
try
{
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
fail( "Expected exception" );
}
catch ( Exception e )
{
assertTrue( e instanceof HttpServicesException );
assertEquals( "Error in http services, error code: 400", e.getMessage() );
}
}
@Test
// When update user with (unrequired) birthdate not sent (in formItems), the birthdate will be updated to empty
public void update_with_unrequired_birthday_not_sent_becomes_empty()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setBirthday( DateUtil.parseDate( "12.12.2012" ) );
createNormalUser( "testuser", "myLocalStore", userFields );
// verify
UserFields resultUserFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNotNull( resultUserFields.getBirthday() );
assertEquals( "12.12.2012", DateUtil.formatDate( resultUserFields.getBirthday() ) );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = new ExtendedMap( true );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", "Initials changed" );
formItems.putString( "email", "test@test.com" );
loginPortalUser( "testuser" );
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
// verify
resultUserFields = fixture.findUserByName( "testuser" ).getUserFields();
assertNull( resultUserFields.getBirthday() );
}
@Test
// When update user with birthdate not sent and birthdate required, there will be an exception
public void update_with_required_birthday_not_sent_birthday_required_trows_exception()
throws Exception
{
UserStoreConfig userStoreConfig = new UserStoreConfig();
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.FIRST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.LAST_NAME, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.INITIALS, "required" ) );
userStoreConfig.addUserFieldConfig( createUserStoreUserFieldConfig( UserFieldType.BIRTHDAY, "required" ) );
createLocalUserStore( "myLocalStore", true, userStoreConfig );
fixture.flushAndClearHibernateSession();
UserFields userFields = new UserFields();
userFields.setFirstName( "First name" );
userFields.setLastName( "Last name" );
userFields.setInitials( "INI" );
userFields.setBirthday( DateUtil.parseDate( "12.12.2012" ) );
createNormalUser( "testuser", "myLocalStore", userFields );
// verify
Date birthday = fixture.findUserByName( "testuser" ).getUserFields().getBirthday();
assertNotNull( birthday );
assertEquals( "12.12.2012", DateUtil.formatDate( birthday ) );
// exercise
request.setAttribute( Attribute.ORIGINAL_SITEPATH, new SitePath( new SiteKey( 0 ), "/_services/user/create" ) );
ExtendedMap formItems = new ExtendedMap( true );
formItems.putString( "first_name", "First name changed" );
formItems.putString( "last_name", "Last name changed" );
formItems.putString( "initials", "Initials changed" );
formItems.putString( "email", "test@test.com" );
loginPortalUser( "testuser" );
try
{
userHandlerController.handlerUpdate( request, response, session, formItems, null, null );
fail( "Expected exception" );
}
catch ( Exception e )
{
assertTrue( e instanceof HttpServicesException );
assertEquals( "Error in http services, error code: 400", e.getMessage() );
}
}
private UserStoreConfigField createUserStoreUserFieldConfig( UserFieldType type, String properties )
{
UserStoreConfigField fieldConfig = new UserStoreConfigField( type );
fieldConfig.setRemote( properties.contains( "remote" ) );
fieldConfig.setReadOnly( properties.contains( "read-only" ) );
fieldConfig.setRequired( properties.contains( "required" ) );
fieldConfig.setIso( properties.contains( "iso" ) );
return fieldConfig;
}
private void loginPortalUser( String userName )
{
PortalSecurityHolder.setImpersonatedUser( fixture.findUserByName( userName ).getKey() );
PortalSecurityHolder.setLoggedInUser( fixture.findUserByName( userName ).getKey() );
}
private UserStoreKey createLocalUserStore( String name, boolean defaultStore, UserStoreConfig config )
{
StoreNewUserStoreCommand command = new StoreNewUserStoreCommand();
command.setStorer( fixture.findUserByName( "admin" ).getKey() );
command.setName( name );
command.setDefaultStore( defaultStore );
command.setConfig( config );
return userStoreService.storeNewUserStore( command );
}
private UserKey createNormalUser( String userName, String userStoreName, UserFields userFields )
{
StoreNewUserCommand command = new StoreNewUserCommand();
command.setStorer( fixture.findUserByName( "admin" ).getKey() );
command.setUsername( userName );
command.setUserStoreKey( fixture.findUserStoreByName( userStoreName ).getKey() );
command.setAllowAnyUserAccess( true );
command.setEmail( userName + "@example.com" );
command.setPassword( "password" );
command.setType( UserType.NORMAL );
command.setDisplayName( userName );
command.setUserFields( userFields );
return userStoreService.storeNewUser( command );
}
private ExtendedMap createExtendedMap()
{
return new ExtendedMap( true );
}
}