/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.itest.client;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.junit.Assert;
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.framework.util.JDOMUtil;
import com.enonic.cms.api.client.model.GetUsersParams;
import com.enonic.cms.api.client.model.user.Gender;
import com.enonic.cms.api.client.model.user.UserInfo;
import com.enonic.cms.core.client.InternalClient;
import com.enonic.cms.core.security.PortalSecurityHolder;
import com.enonic.cms.core.security.user.User;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.itest.AbstractSpringTest;
import com.enonic.cms.itest.util.DomainFixture;
import static org.junit.Assert.*;
public class InternalClientImpl_getUsersTest
extends AbstractSpringTest
{
@Autowired
@Qualifier("localClient")
private InternalClient internalClient;
@Autowired
private DomainFixture fixture;
@Before
public void before()
throws IOException, JDOMException
{
fixture.initSystemData();
// custom user fields creation
final UserInfo userInfo = new UserInfo();
final Date birthday = new Date();
userInfo.setBirthday( birthday );
userInfo.setCountry( "country_value" );
userInfo.setDescription( "description_value" );
userInfo.setFax( "fax_value" );
userInfo.setFirstName( "firstname_value" );
userInfo.setGender( Gender.MALE );
userInfo.setGlobalPosition( "globalposition_value" );
userInfo.setHomePage( "homepage_value" );
userInfo.setHtmlEmail( true );
userInfo.setInitials( "initials_value" );
userInfo.setLastName( "lastname_value" );
userInfo.setLocale( Locale.ENGLISH );
userInfo.setMemberId( "memberid_value" );
userInfo.setMiddleName( "middlename_value" );
userInfo.setMobile( "mobile_value" );
userInfo.setNickName( "nickname_value" );
userInfo.setOrganization( "organization_value" );
userInfo.setPersonalId( "personalid_value" );
userInfo.setPhone( "phone_value" );
userInfo.setPhoto( new byte[]{0x23, 0x24, 0x25} );
userInfo.setPrefix( "prefix_value" );
userInfo.setSuffix( "suffix_value" );
userInfo.setTimezone( TimeZone.getTimeZone( "GMT" ) );
userInfo.setTitle( "title_value" );
//
fixture.createAndStoreNormalUserWithAllValuesAndWithUserGroup( "testuser", "Test user", "testuserstore", userInfo );
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRemoteAddr( "127.0.0.1" );
ServletRequestAccessor.setRequest( request );
PortalSecurityHolder.setAnonUser( fixture.findUserByName( User.ANONYMOUS_UID ).getKey() );
PortalSecurityHolder.setLoggedInUser( fixture.findUserByName( "testuser" ).getKey() );
PortalSecurityHolder.setImpersonatedUser( fixture.findUserByName( "testuser" ).getKey() );
}
@Test
public void get_users_with_custom_fields()
throws Exception
{
// exercise:
GetUsersParams params = new GetUsersParams();
params.userStore = "testuserstore";
params.includeCustomUserFields = true;
final Date birthday = new Date();
Document users = internalClient.getUsers( params );
assertNotNull( users );
assertSingleXPathValueEquals( "users/user[1]/birthday", users, new SimpleDateFormat( "yyyy-MM-dd" ).format( birthday ) );
assertSingleXPathValueEquals( "users/user[1]/country", users, "country_value" );
assertSingleXPathValueEquals( "users/user[1]/description", users, "description_value" );
assertSingleXPathValueEquals( "users/user[1]/fax", users, "fax_value" );
assertSingleXPathValueEquals( "users/user[1]/first-name", users, "firstname_value" );
assertSingleXPathValueEquals( "users/user[1]/gender", users, "male" );
assertSingleXPathValueEquals( "users/user[1]/global-position", users, "globalposition_value" );
assertSingleXPathValueEquals( "users/user[1]/home-page", users, "homepage_value" );
assertSingleXPathValueEquals( "users/user[1]/html-email", users, "true" );
assertSingleXPathValueEquals( "users/user[1]/initials", users, "initials_value" );
assertSingleXPathValueEquals( "users/user[1]/locale", users, "en" );
assertSingleXPathValueEquals( "users/user[1]/member-id", users, "memberid_value" );
assertSingleXPathValueEquals( "users/user[1]/middle-name", users, "middlename_value" );
assertSingleXPathValueEquals( "users/user[1]/mobile", users, "mobile_value" );
assertSingleXPathValueEquals( "users/user[1]/nick-name", users, "nickname_value" );
assertSingleXPathValueEquals( "users/user[1]/organization", users, "organization_value" );
assertSingleXPathValueEquals( "users/user[1]/personal-id", users, "personalid_value" );
assertSingleXPathValueEquals( "users/user[1]/photo/@exists", users, "true" );
assertSingleXPathValueEquals( "users/user[1]/prefix", users, "prefix_value" );
assertSingleXPathValueEquals( "users/user[1]/suffix", users, "suffix_value" );
assertSingleXPathValueEquals( "users/user[1]/time-zone", users, "GMT" );
}
@Test
public void get_users_without_custom_fields()
throws Exception
{
// exercise:
GetUsersParams params = new GetUsersParams();
params.userStore = "testuserstore";
params.includeCustomUserFields = false;
Document users = internalClient.getUsers( params );
assertNotNull( users );
assertSingleXPathValueEquals( "users/user[1]/birthday", users, null );
assertSingleXPathValueEquals( "users/user[1]/country", users, null );
assertSingleXPathValueEquals( "users/user[1]/description", users, null );
assertSingleXPathValueEquals( "users/user[1]/fax", users, null );
assertSingleXPathValueEquals( "users/user[1]/first-name", users, null );
assertSingleXPathValueEquals( "users/user[1]/gender", users, null );
assertSingleXPathValueEquals( "users/user[1]/global-position", users, null );
assertSingleXPathValueEquals( "users/user[1]/home-page", users, null );
assertSingleXPathValueEquals( "users/user[1]/html-email", users, null );
assertSingleXPathValueEquals( "users/user[1]/initials", users, null );
assertSingleXPathValueEquals( "users/user[1]/locale", users, null );
assertSingleXPathValueEquals( "users/user[1]/member-id", users, null );
assertSingleXPathValueEquals( "users/user[1]/middle-name", users, null );
assertSingleXPathValueEquals( "users/user[1]/mobile", users, null );
assertSingleXPathValueEquals( "users/user[1]/nick-name", users, null );
assertSingleXPathValueEquals( "users/user[1]/organization", users, null );
assertSingleXPathValueEquals( "users/user[1]/personal-id", users, null );
assertSingleXPathValueEquals( "users/user[1]/photo/@exists", users, null );
assertSingleXPathValueEquals( "users/user[1]/prefix", users, null );
assertSingleXPathValueEquals( "users/user[1]/suffix", users, null );
assertSingleXPathValueEquals( "users/user[1]/time-zone", users, null );
}
private void assertSingleXPathValueEquals( final String xpathString, final Document doc, final String expectedValue )
{
final String actualValue = JDOMUtil.evaluateSingleXPathValueAsString( xpathString, doc );
Assert.assertEquals( xpathString, expectedValue, actualValue );
}
}