/* * Copyright (C) 2003-2011 eXo Platform SAS. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.exoplatform.social.core.storage.impl; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.exoplatform.social.core.chromattic.entity.IdentityEntity; import org.exoplatform.social.core.identity.model.Identity; import org.exoplatform.social.core.identity.model.Profile; import org.exoplatform.social.core.model.AvatarAttachment; import org.exoplatform.social.core.profile.ProfileFilter; import org.exoplatform.social.core.storage.exception.NodeAlreadyExistsException; import org.exoplatform.social.core.storage.exception.NodeNotFoundException; import org.exoplatform.social.core.test.AbstractCoreTest; /** * @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a> * @version $Revision$ */ public class IdentityStorageImplTestCase extends AbstractCoreTest { private IdentityStorageImpl storage; private List<String> tearDownIdentityList; @Override protected void setUp() throws Exception { super.setUp(); storage = (IdentityStorageImpl) getContainer().getComponentInstanceOfType(IdentityStorageImpl.class); tearDownIdentityList = new ArrayList<String>(); assertNotNull(storage); } @Override public void tearDown() throws Exception { for (String id : tearDownIdentityList) { storage.deleteIdentity(new Identity(id)); } super.tearDown(); } public void testCreateIdentitty() throws Exception { Identity newIdentity = new Identity("organization", "new"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("new", newIdentity.getRemoteId()); tearDownIdentityList.add(newIdentity.getId()); // newIdentity.setRemoteId("new2"); storage._createIdentity(newIdentity); assertNotNull(newIdentity.getId()); assertNotSame(generatedId, newIdentity.getId()); generatedId = newIdentity.getId(); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("new2", newIdentity.getRemoteId()); tearDownIdentityList.add(newIdentity.getId()); } public void testCreateIdentittyExits() throws Exception { Identity newIdentity = new Identity("organization", "newDuplicate"); // storage._createIdentity(newIdentity); tearDownIdentityList.add(newIdentity.getId()); // try { storage._createIdentity(newIdentity); fail(); } catch (NodeAlreadyExistsException e) { // ok } } public void testFindByIdDoesntExists() throws Exception { try { storage._findById(IdentityEntity.class, "doesn't exists"); fail(); } catch (NodeNotFoundException e) { // ok } } public void testFindByIdExists() throws Exception { Identity newIdentity = new Identity("organization", "exists"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("exists", newIdentity.getRemoteId()); // IdentityEntity got = storage._findById(IdentityEntity.class, generatedId); assertEquals("organization", got.getProviderId()); assertEquals(Boolean.FALSE, got.isDeleted()); assertEquals("exists", got.getRemoteId()); tearDownIdentityList.add(newIdentity.getId()); } public void testDeleteIdentityExists() throws Exception { Identity newIdentity = new Identity("organization", "newToDelete"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("newToDelete", newIdentity.getRemoteId()); // storage._deleteIdentity(newIdentity); // try { storage._findIdentity("organization", "newToDelete"); fail(); } catch (NodeNotFoundException e) { // ok } } public void testDeleteIdentityDoesntExists() throws Exception { Identity newIdentity = new Identity("organization", "doesn't exists"); newIdentity.setId("fakeId"); // try { storage._deleteIdentity(newIdentity); fail(); } catch (NodeNotFoundException e) { // ok } } public void testDeleteInvalidIdentity() throws Exception { Identity newIdentity = new Identity("organization", "doesn't exists"); // try { storage._deleteIdentity(newIdentity); fail(); } catch (IllegalArgumentException e) { // ok } // try { storage._deleteIdentity(null); fail(); } catch (IllegalArgumentException e) { // ok } } public void testCreateProfile() throws Exception { Identity newIdentity = new Identity("organization", "identityForProfile"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("identityForProfile", newIdentity.getRemoteId()); // Profile profile = new Profile(newIdentity); storage._createProfile(profile); assertNotNull(profile.getId()); tearDownIdentityList.add(newIdentity.getId()); } public void testLoadProfileExists() throws Exception { Identity newIdentity = new Identity("organization", "identityForLoadProfile"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("identityForLoadProfile", newIdentity.getRemoteId()); // Profile profile = new Profile(newIdentity); storage._createProfile(profile); assertNotNull(profile.getId()); // profile = storage._loadProfile(profile); assertNotNull(profile.getId()); // tearDownIdentityList.add(newIdentity.getId()); } public void testLoadProfileDoesntExists() throws Exception { Identity newIdentity = new Identity("organization", "identityForLoadProfile"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("identityForLoadProfile", newIdentity.getRemoteId()); // Profile profile = new Profile(newIdentity); try { storage._loadProfile(profile); fail(); } catch (NodeNotFoundException e) { // ok } tearDownIdentityList.add(newIdentity.getId()); } public void testGetIdentityNoProvider() throws Exception { Identity newIdentity = new Identity("organization", "checkProviderNotFound"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("checkProviderNotFound", newIdentity.getRemoteId()); // try { storage._findIdentity("providerDoesntExists", "checkProviderNotFound"); fail(); } catch (NodeNotFoundException e) { // ok } // tearDownIdentityList.add(newIdentity.getId()); } public void testGetIdentityNoRemote() throws Exception { Identity newIdentity = new Identity("organization", "checkRemoteNotFound"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("checkRemoteNotFound", newIdentity.getRemoteId()); // try { storage._findIdentity("organization", "not-found"); fail(); } catch (NodeNotFoundException e) { // ok } // tearDownIdentityList.add(newIdentity.getId()); } public void testGetIdentity() throws Exception { Identity newIdentity = new Identity("organization", "remoteid"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("remoteid", newIdentity.getRemoteId()); // Identity got = storage._findIdentity("organization", "remoteid"); assertNotNull(got.getId()); assertEquals("organization", got.getProviderId()); assertEquals(false, got.isDeleted()); assertEquals("remoteid", got.getRemoteId()); // tearDownIdentityList.add(newIdentity.getId()); } public void testProfile() throws Exception { Identity newIdentity = new Identity("organization", "remoteid"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("remoteid", newIdentity.getRemoteId()); assertNotNull(newIdentity.getProfile()); assertNull(newIdentity.getProfile().getId()); // storage._createProfile(newIdentity.getProfile()); assertNotNull(newIdentity.getProfile().getId()); // Profile profile = newIdentity.getProfile(); profile.setProperty(Profile.USERNAME, "user"); profile.setProperty(Profile.FIRST_NAME, "first"); profile.setProperty(Profile.LAST_NAME, "last"); profile.setProperty(Profile.AVATAR_URL, "avatarurl"); storage._saveProfile(profile); // Profile toLoadProfile = new Profile(newIdentity); assertNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); storage._loadProfile(toLoadProfile); assertNotNull(toLoadProfile.getId()); assertNotNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNotNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); tearDownIdentityList.add(newIdentity.getId()); } public void testMoveIdentity() throws Exception { Identity newIdentity = new Identity("organization", "checkMove"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("checkMove", newIdentity.getRemoteId()); // newIdentity.setProviderId("newProviderId"); newIdentity.setRemoteId("newRemoteId"); // assertEquals("newProviderId", newIdentity.getProviderId()); assertEquals("newRemoteId", newIdentity.getRemoteId()); // storage._saveIdentity(newIdentity); Identity got = storage._findIdentity(newIdentity.getProviderId(), newIdentity.getRemoteId()); assertEquals(generatedId, got.getId()); assertEquals("newProviderId", got.getProviderId()); assertEquals(false, got.isDeleted()); assertEquals("newRemoteId", got.getRemoteId()); tearDownIdentityList.add(newIdentity.getId()); } public void testGetType() throws Exception { assertEquals("String", storage.getType("soc:identitydefinition", "soc:providerId")); assertNull(storage.getType("soc:profiledefinition", "doesn't exists")); assertNull(storage.getType("doesn't exists", "doesn't exists")); assertNull(storage.getType("soc:profiledefinition", null)); assertNull(storage.getType(null, null)); } public void testUpdateProfileProperties() throws Exception { Identity newIdentity = new Identity("organization", "checksaveprofile"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("checksaveprofile", newIdentity.getRemoteId()); assertNotNull(newIdentity.getProfile()); assertNull(newIdentity.getProfile().getId()); // storage._createProfile(newIdentity.getProfile()); assertNotNull(newIdentity.getProfile().getId()); // Profile profile = newIdentity.getProfile(); profile.setProperty(Profile.USERNAME, "user"); profile.setProperty(Profile.FIRST_NAME, "first"); profile.setProperty(Profile.LAST_NAME, "last"); profile.setProperty(Profile.AVATAR_URL, "avatarurl"); storage._saveProfile(profile); // Profile toLoadProfile = new Profile(newIdentity); assertNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); // storage._loadProfile(toLoadProfile); assertNotNull(toLoadProfile.getId()); assertNotNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNotNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); // Profile updaterProfile = new Profile(newIdentity); updaterProfile.setId(toLoadProfile.getId()); updaterProfile.setProperty(Profile.USERNAME, "updated user"); updaterProfile.setProperty(Profile.LAST_NAME, "updated last"); updaterProfile.setProperty(Profile.FULL_NAME, "new full"); assertNull(toLoadProfile.getProperty(Profile.FULL_NAME)); storage.addOrModifyProfileProperties(updaterProfile); // Profile toLoadAfterUpdateProfile = new Profile(newIdentity); toLoadAfterUpdateProfile = storage.loadProfile(toLoadAfterUpdateProfile); assertEquals("updated user", toLoadAfterUpdateProfile.getProperty(Profile.USERNAME)); assertEquals("updated last", toLoadAfterUpdateProfile.getProperty(Profile.LAST_NAME)); assertEquals("avatarurl", toLoadAfterUpdateProfile.getProperty(Profile.AVATAR_URL)); assertEquals("first", toLoadAfterUpdateProfile.getProperty(Profile.FIRST_NAME)); assertEquals("new full", toLoadAfterUpdateProfile.getProperty(Profile.FULL_NAME)); tearDownIdentityList.add(newIdentity.getId()); } public void testFindIdentityByFirstCharCount() throws Exception { addIdentity("o", "a1", "male", ""); Identity a2 = addIdentity("o", "a2", "male", ""); addIdentity("o", "a3", "male", ""); addIdentity("o", "a4", "male", ""); addIdentity("o", "b1", "male", ""); addIdentity("o", "b2", "male", ""); addIdentity("o", "b3", "male", ""); addIdentity("o", "z", "male", ""); ProfileFilter filterA = createFilter('a', "", "", "", null); ProfileFilter filterB = createFilter('b', "", "", "", null); ProfileFilter filterC = createFilter('c', "", "", "", null); ProfileFilter filterZ = createFilter('z', "", "", "", null); ProfileFilter filterA2 = createFilter('a', "", "", "", a2); assertEquals(4, storage.getIdentitiesByFirstCharacterOfNameCount("o", filterA)); assertEquals(3, storage.getIdentitiesByFirstCharacterOfNameCount("o", filterB)); assertEquals(0, storage.getIdentitiesByFirstCharacterOfNameCount("o", filterC)); assertEquals(1, storage.getIdentitiesByFirstCharacterOfNameCount("o", filterZ)); assertEquals(3, storage.getIdentitiesByFirstCharacterOfNameCount("o", filterA2)); } public void testFindIdentityByFirstChar() throws Exception { addIdentity("o", "a1", "", ""); addIdentity("o", "a2", "", ""); addIdentity("o", "a3", "", ""); addIdentity("o", "a4", "", ""); addIdentity("o", "b1", "", ""); Identity b2 = addIdentity("o", "b2", "", ""); addIdentity("o", "b3", "", ""); addIdentity("o", "z", "", ""); ProfileFilter filterA = createFilter('a', "", "", "", null); ProfileFilter filterB = createFilter('b', "", "", "", null); ProfileFilter filterC = createFilter('c', "", "", "", null); ProfileFilter filterZ = createFilter('z', "", "", "", null); ProfileFilter filterB2 = createFilter('b', "", "", "", b2); assertEquals(4, storage.getIdentitiesByFirstCharacterOfName("o", filterA, 0, -1, false).size()); assertEquals(4, storage.getIdentitiesByFirstCharacterOfName("o", filterA, 0, 4, false).size()); assertEquals(4, storage.getIdentitiesByFirstCharacterOfName("o", filterA, 0, 4, false).size()); assertEquals(3, storage.getIdentitiesByFirstCharacterOfName("o", filterA, 0, 3, false).size()); assertEquals(4, storage.getIdentitiesByFirstCharacterOfName("o", filterA, 0, 10, false).size()); assertEquals(3, storage.getIdentitiesByFirstCharacterOfName("o", filterB, 0, 10, false).size()); assertEquals(0, storage.getIdentitiesByFirstCharacterOfName("o", filterC, 0, 10, false).size()); assertEquals(1, storage.getIdentitiesByFirstCharacterOfName("o", filterZ, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByFirstCharacterOfName("o", filterB2, 0, 10, false).size()); } public void testFindIdentityWithFilterCount() throws Exception { addIdentity("o", "toto", "male", "cadre"); Identity itotota = addIdentity("o", "totota", "female", "dev"); addIdentity("o", "tata", "male", "cadre"); ProfileFilter t = createFilter('\u0000', "t", "", "", null); ProfileFilter to = createFilter('\u0000', "to", "", "", null); ProfileFilter toto = createFilter('\u0000', "toto", "", "", null); ProfileFilter totota = createFilter('\u0000', "totota", "", "", null); ProfileFilter unknown = createFilter('\u0000', "unknown", "", "", null); ProfileFilter male = createFilter('\u0000', "", "male", "", null); ProfileFilter female = createFilter('\u0000', "", "female", "", null); ProfileFilter cadre = createFilter('\u0000', "", "", "cadre", null); ProfileFilter dev = createFilter('\u0000', "", "", "dev", null); ProfileFilter tmale = createFilter('\u0000', "t", "male", "", null); ProfileFilter tmaledev = createFilter('\u0000', "t", "male", "dev", null); ProfileFilter tmalecadre = createFilter('\u0000', "t", "male", "cadre", null); ProfileFilter t2 = createFilter('\u0000', "t", "", "", itotota); assertEquals(3, storage.getIdentitiesByProfileFilterCount("o", t)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", to)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", toto)); assertEquals(1, storage.getIdentitiesByProfileFilterCount("o", totota)); assertEquals(0, storage.getIdentitiesByProfileFilterCount("o", unknown)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", male)); assertEquals(1, storage.getIdentitiesByProfileFilterCount("o", female)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", cadre)); assertEquals(1, storage.getIdentitiesByProfileFilterCount("o", dev)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", tmale)); assertEquals(0, storage.getIdentitiesByProfileFilterCount("o", tmaledev)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", tmalecadre)); assertEquals(2, storage.getIdentitiesByProfileFilterCount("o", t2)); } public void testFindIdentityWithFilter() throws Exception { addIdentity("o", "toto", "male", "cadre"); Identity itotota = addIdentity("o", "totota", "female", "dev"); addIdentity("o", "tata", "male", "cadre"); ProfileFilter t = createFilter('\u0000', "t", "", "", null); ProfileFilter to = createFilter('\u0000', "to", "", "", null); ProfileFilter toto = createFilter('\u0000', "toto", "", "", null); ProfileFilter totota = createFilter('\u0000', "totota", "", "", null); ProfileFilter unknown = createFilter('\u0000', "unknown", "", "", null); ProfileFilter male = createFilter('\u0000', "", "male", "", null); ProfileFilter female = createFilter('\u0000', "", "female", "", null); ProfileFilter cadre = createFilter('\u0000', "", "", "cadre", null); ProfileFilter dev = createFilter('\u0000', "", "", "dev", null); ProfileFilter tmale = createFilter('\u0000', "t", "male", "", null); ProfileFilter tmaledev = createFilter('\u0000', "t", "male", "dev", null); ProfileFilter tmalecadre = createFilter('\u0000', "t", "male", "cadre", null); ProfileFilter t2 = createFilter('\u0000', "t", "", "", itotota); assertEquals(3, storage.getIdentitiesByProfileFilter("o", t, 0, 10, false).size()); assertEquals(3, storage.getIdentitiesByProfileFilter("o", t, 0, 3, false).size()); assertEquals(1, storage.getIdentitiesByProfileFilter("o", t, 0, 1, false).size()); assertEquals(3, storage.getIdentitiesByProfileFilter("o", t, 0, 0, false).size()); assertEquals(3, storage.getIdentitiesByProfileFilter("o", t, 0, -1, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", to, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", toto, 0, 10, false).size()); assertEquals(1, storage.getIdentitiesByProfileFilter("o", totota, 0, 10, false).size()); assertEquals(0, storage.getIdentitiesByProfileFilter("o", unknown, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", male, 0, 10, false).size()); assertEquals(1, storage.getIdentitiesByProfileFilter("o", female, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", cadre, 0, 10, false).size()); assertEquals(1, storage.getIdentitiesByProfileFilter("o", dev, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", tmale, 0, 10, false).size()); assertEquals(0, storage.getIdentitiesByProfileFilter("o", tmaledev, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", tmalecadre, 0, 10, false).size()); assertEquals(2, storage.getIdentitiesByProfileFilter("o", t2, 0, 10, false).size()); } public void testAvatar() throws Exception { Identity newIdentity = new Identity("organization", "remoteid"); // storage._createIdentity(newIdentity); tearDownIdentityList.add(newIdentity.getId()); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("remoteid", newIdentity.getRemoteId()); assertNotNull(newIdentity.getProfile()); assertNull(newIdentity.getProfile().getId()); // storage._createProfile(newIdentity.getProfile()); assertNotNull(newIdentity.getProfile().getId()); // Profile profile = newIdentity.getProfile(); AvatarAttachment avatar = new AvatarAttachment(); avatar.setMimeType("plain/text"); avatar.setInputStream(new ByteArrayInputStream("Attachment content".getBytes())); profile.setProperty(Profile.AVATAR, avatar); // storage._saveProfile(profile); // Profile loadedProfile = new Profile(newIdentity); storage._loadProfile(loadedProfile); String avatarRandomURL = loadedProfile.getAvatarUrl(); int indexOfRandomVar = avatarRandomURL.indexOf("/?upd="); String avatarURL = null; if(indexOfRandomVar != -1){ avatarURL = avatarRandomURL.substring(0,indexOfRandomVar); } else { avatarURL = avatarRandomURL; } assertEquals( escapeJCRSpecialCharacters("/rest/jcr/repository/portal-test/production/soc:providers/soc:organization/soc:remoteid/soc:profile/soc:avatar"), avatarURL); } private Identity addIdentity(String provider, String name, String gender, String position) throws Exception { Identity newIdentity = new Identity(provider, name); storage._createIdentity(newIdentity); Profile p = new Profile(newIdentity); p.setProperty(Profile.FIRST_NAME, name); p.setProperty(Profile.FULL_NAME, name); p.setProperty(Profile.GENDER, gender); p.setProperty(Profile.POSITION, position); newIdentity.setProfile(p); storage._createProfile(p); tearDownIdentityList.add(newIdentity.getId()); return newIdentity; } private ProfileFilter createFilter(char c, String name, String gender, String position, Identity exclude) throws Exception { ProfileFilter filter = new ProfileFilter(); filter.setFirstCharacterOfName(c); filter.setName(name); filter.setGender(gender); filter.setPosition(position); if (exclude != null) { List<Identity> excludeList = new ArrayList<Identity>(); excludeList.add(exclude); filter.setExcludedIdentityList(excludeList); } return filter; } public void testProfileContact() throws Exception { Identity newIdentity = new Identity("organization", "withcontact"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("withcontact", newIdentity.getRemoteId()); assertNotNull(newIdentity.getProfile()); assertNull(newIdentity.getProfile().getId()); // storage._createProfile(newIdentity.getProfile()); assertNotNull(newIdentity.getProfile().getId()); // Profile profile = newIdentity.getProfile(); profile.setProperty(Profile.USERNAME, "user"); profile.setProperty(Profile.FIRST_NAME, "first"); profile.setProperty(Profile.LAST_NAME, "last"); profile.setProperty(Profile.AVATAR_URL, "avatarurl"); // urls List<Map<String, String>> urls = new ArrayList<Map<String, String>>(); Map<String, String> url1 = new HashMap<String, String>(); url1.put("key", "http://www.toto.com"); url1.put("value", "http://www.toto.com"); Map<String, String> url2 = new HashMap<String, String>(); url2.put("key", "http://www.tata.com"); url2.put("value", "http://www.tata.com"); urls.add(url1); urls.add(url2); profile.setProperty(Profile.CONTACT_URLS, urls); // ims List<Map<String, String>> ims = new ArrayList<Map<String, String>>(); Map<String, String> im1 = new HashMap<String, String>(); im1.put("key", "GTalk"); im1.put("value", "nickname1"); Map<String, String> im2 = new HashMap<String, String>(); im2.put("key", "GTalk"); im2.put("value", "nickname2"); Map<String, String> im3 = new HashMap<String, String>(); im3.put("key", "MSN"); im3.put("value", "nickname3"); ims.add(im1); ims.add(im2); ims.add(im3); profile.setProperty(Profile.CONTACT_IMS, ims); // phones List<Map<String, String>> phones = new ArrayList<Map<String, String>>(); Map<String, String> phone1 = new HashMap<String, String>(); phone1.put("key", "Work"); phone1.put("value", "1234567890"); Map<String, String> phone2 = new HashMap<String, String>(); phone2.put("key", "Work"); phone2.put("value", "2345678901"); Map<String, String> phone3 = new HashMap<String, String>(); phone3.put("key", "Home"); phone3.put("value", "3456789012"); Map<String, String> phone4 = new HashMap<String, String>(); phone4.put("key", "Other"); phone4.put("value", "4567890123"); phones.add(phone1); phones.add(phone2); phones.add(phone3); phones.add(phone4); profile.setProperty(Profile.CONTACT_PHONES, phones); storage._saveProfile(profile); // Profile toLoadProfile = new Profile(newIdentity); assertNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); storage._loadProfile(toLoadProfile); assertNotNull(toLoadProfile.getId()); assertNotNull(toLoadProfile.getProperty(Profile.USERNAME)); assertNotNull(toLoadProfile.getProperty(Profile.FIRST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.LAST_NAME)); assertNotNull(toLoadProfile.getProperty(Profile.AVATAR_URL)); List<Map<String, String>> loadedIms = (List<Map<String, String>>) toLoadProfile.getProperty(Profile.CONTACT_IMS); List<Map<String, String>> loadedUrls = (List<Map<String, String>>) toLoadProfile.getProperty(Profile.CONTACT_URLS); List<Map<String, String>> loadedPhones = (List<Map<String, String>>) toLoadProfile.getProperty(Profile.CONTACT_PHONES); assertEquals(3, loadedIms.size()); assertEquals(2, loadedUrls.size()); assertEquals(4, loadedPhones.size()); // profile.setProperty(Profile.CONTACT_PHONES, new ArrayList<Map<String, String>>()); storage._saveProfile(profile); Profile toLoadProfile2 = new Profile(newIdentity); storage._loadProfile(toLoadProfile2); List<Map<String, String>> loadedPhones2 = (List<Map<String, String>>) toLoadProfile2.getProperty(Profile.CONTACT_PHONES); assertNull(loadedPhones2); tearDownIdentityList.add(newIdentity.getId()); } public void testProfileXp() throws Exception { Identity newIdentity = new Identity("organization", "withxp"); // storage._createIdentity(newIdentity); String generatedId = newIdentity.getId(); assertNotNull(generatedId); assertEquals("organization", newIdentity.getProviderId()); assertEquals(false, newIdentity.isDeleted()); assertEquals("withxp", newIdentity.getRemoteId()); assertNotNull(newIdentity.getProfile()); assertNull(newIdentity.getProfile().getId()); // storage._createProfile(newIdentity.getProfile()); assertNotNull(newIdentity.getProfile().getId()); // Profile profile = newIdentity.getProfile(); profile.setProperty(Profile.USERNAME, "user"); profile.setProperty(Profile.FIRST_NAME, "first"); profile.setProperty(Profile.LAST_NAME, "last"); profile.setProperty(Profile.AVATAR_URL, "avatarurl"); // xps List<Map<String, Object>> xps = new ArrayList<Map<String, Object>>(); Map<String, Object> xp1 = new HashMap<String, Object>(); xp1.put(Profile.EXPERIENCES_SKILLS, "skills 1"); xp1.put(Profile.EXPERIENCES_POSITION, "position 1"); xp1.put(Profile.EXPERIENCES_COMPANY, "company 1"); xp1.put(Profile.EXPERIENCES_DESCRIPTION, "description 1"); xp1.put(Profile.EXPERIENCES_START_DATE, "01/01/2010"); xp1.put(Profile.EXPERIENCES_END_DATE, null); xp1.put(Profile.EXPERIENCES_IS_CURRENT, Boolean.TRUE); Map<String, Object> xp2 = new HashMap<String, Object>(); xp2.put(Profile.EXPERIENCES_SKILLS, "skills 2"); xp2.put(Profile.EXPERIENCES_POSITION, "position 2"); xp2.put(Profile.EXPERIENCES_COMPANY, "company 2"); xp2.put(Profile.EXPERIENCES_DESCRIPTION, "description 2"); xp2.put(Profile.EXPERIENCES_START_DATE, "01/01/2002"); xp2.put(Profile.EXPERIENCES_END_DATE, "01/01/2003"); xp2.put(Profile.EXPERIENCES_IS_CURRENT, Boolean.FALSE); Map<String, Object> xp3 = new HashMap<String, Object>(); xp3.put(Profile.EXPERIENCES_SKILLS, "skills 3"); xp3.put(Profile.EXPERIENCES_POSITION, "position3"); xp3.put(Profile.EXPERIENCES_COMPANY, "company 3"); xp3.put(Profile.EXPERIENCES_DESCRIPTION, "description 3"); xp3.put(Profile.EXPERIENCES_START_DATE, "01/01/2002"); xp3.put(Profile.EXPERIENCES_END_DATE, "01/01/2003"); xp3.put(Profile.EXPERIENCES_IS_CURRENT, Boolean.FALSE); xps.add(xp1); xps.add(xp2); xps.add(xp3); profile.setProperty(Profile.EXPERIENCES, xps); // storage._saveProfile(profile); // Profile toLoadProfile = new Profile(newIdentity); storage._loadProfile(toLoadProfile); List<Map<String, String>> loadedXp = (List<Map<String, String>>) toLoadProfile.getProperty(Profile.EXPERIENCES); assertEquals(3, loadedXp.size()); // remove one xps.remove(xp2); profile.setProperty(Profile.EXPERIENCES, xps); storage._saveProfile(profile); // reload Profile toLoadProfile2 = new Profile(newIdentity); storage._loadProfile(toLoadProfile2); List<Map<String, String>> loadedXp2 = (List<Map<String, String>>) toLoadProfile2.getProperty(Profile.EXPERIENCES); assertEquals(2, loadedXp2.size()); tearDownIdentityList.add(newIdentity.getId()); } private static String escapeJCRSpecialCharacters(String string) { if (string == null) { return null; } return string.replace("[", "%5B").replace("]", "%5D").replace(":", "%3A"); } }