/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.security.user; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import java.util.TimeZone; import org.jdom.Document; import org.jdom.Element; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import com.enonic.cms.framework.util.JDOMUtil; import com.enonic.cms.api.client.model.user.Address; import com.enonic.cms.api.client.model.user.Gender; import com.enonic.cms.api.plugin.ext.userstore.UserFields; import static org.junit.Assert.*; public class UserFieldsXmlCreatorTest { private UserFieldsXmlCreator creator; private User userWithBasicFieldValue; @Before public void setup() { setupUserWithBasicFieldValue(); this.creator = new UserFieldsXmlCreator(); } private void setupUserWithBasicFieldValue() { final UserFields userFields = new UserFields(); userFields.setPrefix( "user_prefix_value" ); final UserEntity user = new UserEntity(); user.setUserFields( userFields ); this.userWithBasicFieldValue = user; } @Test public void testCreateFromUserWithBasicFieldValue_WithoutGivenRoot() { final Element returnedRootEl = creator.createUserInfoElement( userWithBasicFieldValue ); assertEquals( "block", returnedRootEl.getName() ); assertEquals( 1, returnedRootEl.getChildren().size() ); assertEquals( "prefix", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getName() ); assertEquals( "user_prefix_value", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getValue() ); } @Test public void testCreateFromUserWithBasicFieldValue_WithGivenRoot_WithoutReplaceExisting() { final Element givenRootEl = new Element( "given_root" ); final Element existingPrefixEl = new Element( "prefix" ); existingPrefixEl.setText( "existing_prefix_value" ); givenRootEl.addContent( existingPrefixEl ); final Element returnedRootEl = creator.addUserInfoToElement( givenRootEl, userWithBasicFieldValue.getUserFields(), false ); assertEquals( "given_root", returnedRootEl.getName() ); assertEquals( 1, returnedRootEl.getChildren().size() ); assertEquals( "prefix", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getName() ); assertEquals( "existing_prefix_value", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getValue() ); } @Test public void testCreateFromUserWithBasicFieldValue_WithGivenRoot_WithReplaceExisting() { final Element givenRootEl = new Element( "given_root" ); final Element existingPrefixEl = new Element( "prefix" ); existingPrefixEl.setText( "existing_prefix_value" ); givenRootEl.addContent( existingPrefixEl ); final Element returnedRootEl = creator.addUserInfoToElement( givenRootEl, userWithBasicFieldValue.getUserFields(), true ); assertEquals( "given_root", returnedRootEl.getName() ); assertEquals( 1, returnedRootEl.getChildren().size() ); assertEquals( "prefix", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getName() ); assertEquals( "user_prefix_value", ( (Element) returnedRootEl.getChildren().get( 0 ) ).getValue() ); } @Test public void testCreateFromUserWithAllValues_NoAddresses() { final UserFields userFields = new UserFields(); final Date birthday = new Date(); userFields.setBirthday( birthday ); userFields.setCountry( "country_value" ); userFields.setDescription( "description_value" ); userFields.setFax( "fax_value" ); userFields.setFirstName( "firstname_value" ); userFields.setGender( Gender.MALE ); userFields.setGlobalPosition( "globalposition_value" ); userFields.setHomePage( "homepage_value" ); userFields.setHtmlEmail( true ); userFields.setInitials( "initials_value" ); userFields.setLastName( "lastname_value" ); userFields.setLocale( Locale.ENGLISH ); userFields.setMemberId( "memberid_value" ); userFields.setMiddleName( "middlename_value" ); userFields.setMobile( "mobile_value" ); userFields.setNickName( "nickname_value" ); userFields.setOrganization( "organization_value" ); userFields.setPersonalId( "personalid_value" ); userFields.setPhone( "phone_value" ); userFields.setPhoto( new byte[]{0x23, 0x24, 0x25} ); userFields.setPrefix( "prefix_value" ); userFields.setSuffix( "suffix_value" ); userFields.setTimezone( TimeZone.getTimeZone( "GMT" ) ); userFields.setTitle( "title_value" ); final UserEntity user = new UserEntity(); user.setUserFields( userFields ); final Document doc = creator.createUserInfoDocument( user ); System.out.println( JDOMUtil.prettyPrintDocument( doc ) ); assertEquals( "block", doc.getRootElement().getName() ); assertSingleXPathValueEquals( "block/birthday", doc, new SimpleDateFormat( "yyyy-MM-dd" ).format( birthday ) ); assertSingleXPathValueEquals( "block/country", doc, "country_value" ); assertSingleXPathValueEquals( "block/description", doc, "description_value" ); assertSingleXPathValueEquals( "block/fax", doc, "fax_value" ); assertSingleXPathValueEquals( "block/first-name", doc, "firstname_value" ); assertSingleXPathValueEquals( "block/gender", doc, "male" ); assertSingleXPathValueEquals( "block/global-position", doc, "globalposition_value" ); assertSingleXPathValueEquals( "block/home-page", doc, "homepage_value" ); assertSingleXPathValueEquals( "block/html-email", doc, "true" ); assertSingleXPathValueEquals( "block/initials", doc, "initials_value" ); assertSingleXPathValueEquals( "block/locale", doc, "en" ); assertSingleXPathValueEquals( "block/member-id", doc, "memberid_value" ); assertSingleXPathValueEquals( "block/middle-name", doc, "middlename_value" ); assertSingleXPathValueEquals( "block/mobile", doc, "mobile_value" ); assertSingleXPathValueEquals( "block/nick-name", doc, "nickname_value" ); assertSingleXPathValueEquals( "block/organization", doc, "organization_value" ); assertSingleXPathValueEquals( "block/personal-id", doc, "personalid_value" ); assertSingleXPathValueEquals( "block/photo/@exists", doc, "true" ); assertSingleXPathValueEquals( "block/prefix", doc, "prefix_value" ); assertSingleXPathValueEquals( "block/suffix", doc, "suffix_value" ); assertSingleXPathValueEquals( "block/time-zone", doc, "GMT" ); } @Test public void testCreateFromUserWithAddressValues() { final UserFields userFields = new UserFields(); Address adr1 = new Address(); adr1.setCountry( "NO" ); adr1.setStreet( "Kirkegata 1-3" ); adr1.setLabel( "Work" ); adr1.setPostalCode( "0153" ); adr1.setPostalAddress( "Oslo" ); adr1.setRegion( "Oslo Fylke" ); adr1.setIsoCountry( "ISO-NO" ); adr1.setIsoRegion( "ISO-Oslo" ); Address adr2 = new Address(); adr2.setCountry( "NO" ); adr2.setStreet( "Ole Vigsgt 9" ); adr2.setLabel( "Priv" ); adr2.setPostalCode( "0357" ); adr2.setPostalAddress( "Oslo" ); adr2.setRegion( "Oslo Fylke" ); adr2.setIsoCountry( "ISO-NO" ); adr2.setIsoRegion( "ISO-Oslo" ); userFields.setAddresses( adr1, adr2 ); final UserEntity user = new UserEntity(); user.setUserFields( userFields ); Document doc = creator.createUserInfoDocument( user ); assertEquals( "block", doc.getRootElement().getName() ); assertSingleXPathValueEquals( "block/addresses/address[1]/country", doc, "NO" ); assertSingleXPathValueEquals( "block/addresses/address[1]/street", doc, "Kirkegata 1-3" ); assertSingleXPathValueEquals( "block/addresses/address[1]/label", doc, "Work" ); assertSingleXPathValueEquals( "block/addresses/address[1]/postal-code", doc, "0153" ); assertSingleXPathValueEquals( "block/addresses/address[1]/postal-address", doc, "Oslo" ); assertSingleXPathValueEquals( "block/addresses/address[1]/region", doc, "Oslo Fylke" ); assertSingleXPathValueEquals( "block/addresses/address[1]/iso-country", doc, "ISO-NO" ); assertSingleXPathValueEquals( "block/addresses/address[1]/iso-region", doc, "ISO-Oslo" ); assertSingleXPathValueEquals( "block/addresses/address[2]/country", doc, "NO" ); assertSingleXPathValueEquals( "block/addresses/address[2]/street", doc, "Ole Vigsgt 9" ); assertSingleXPathValueEquals( "block/addresses/address[2]/label", doc, "Priv" ); assertSingleXPathValueEquals( "block/addresses/address[2]/postal-code", doc, "0357" ); assertSingleXPathValueEquals( "block/addresses/address[2]/postal-address", doc, "Oslo" ); assertSingleXPathValueEquals( "block/addresses/address[2]/region", doc, "Oslo Fylke" ); assertSingleXPathValueEquals( "block/addresses/address[2]/iso-country", doc, "ISO-NO" ); assertSingleXPathValueEquals( "block/addresses/address[2]/iso-region", doc, "ISO-Oslo" ); } private void assertSingleXPathValueEquals( final String xpathString, final Document doc, final String expectedValue ) { final String actualValue = JDOMUtil.evaluateSingleXPathValueAsString( xpathString, doc ); Assert.assertEquals( xpathString, expectedValue, actualValue ); } }