/* * Copyright (C) 2003-2010 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.social.core.storage; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.social.core.identity.model.Identity; import org.exoplatform.social.core.identity.model.Profile; import org.exoplatform.social.core.identity.provider.OrganizationIdentityProvider; import org.exoplatform.social.core.model.AvatarAttachment; import org.exoplatform.social.core.profile.ProfileFilter; import org.exoplatform.social.core.relationship.model.Relationship; import org.exoplatform.social.core.relationship.model.Relationship.Type; import org.exoplatform.social.core.storage.api.IdentityStorage; import org.exoplatform.social.core.storage.api.RelationshipStorage; import org.exoplatform.social.core.test.AbstractCoreTest; /** * Unit Tests for {@link RelationshipStorage} * * @author <a href="http://hoatle.net">hoatle (hoatlevan at gmail dot com)</a> * @since Oct 17, 2010 * @copyright eXo SAS */ public class RelationshipStorageTest extends AbstractCoreTest { private final Log LOG = ExoLogger.getLogger(RelationshipStorageTest.class); private RelationshipStorage relationshipStorage; private IdentityStorage identityStorage; private List<Identity> tearDownIdentityList; private Identity rootIdentity, johnIdentity, maryIdentity, demoIdentity; private List<Relationship> tearDownRelationshipList; @Override public void setUp() throws Exception { super.setUp(); tearDownRelationshipList = new ArrayList<Relationship>(); relationshipStorage = (RelationshipStorage) getContainer().getComponentInstanceOfType(RelationshipStorage.class); assertNotNull("relationshipStorage must not be null", relationshipStorage); identityStorage = (IdentityStorage) getContainer().getComponentInstanceOfType(IdentityStorage.class); assertNotNull("identityManger must not be null", identityStorage); rootIdentity = new Identity(OrganizationIdentityProvider.NAME, "root"); johnIdentity = new Identity(OrganizationIdentityProvider.NAME, "john"); maryIdentity = new Identity(OrganizationIdentityProvider.NAME, "mary"); demoIdentity = new Identity(OrganizationIdentityProvider.NAME, "demo"); identityStorage.saveIdentity(rootIdentity); identityStorage.saveIdentity(johnIdentity); identityStorage.saveIdentity(maryIdentity); identityStorage.saveIdentity(demoIdentity); tearDownIdentityList = new ArrayList<Identity>(); } @Override public void tearDown() throws Exception { for (Relationship relationship : tearDownRelationshipList) { relationshipStorage.removeRelationship(relationship); } identityStorage.deleteIdentity(rootIdentity); identityStorage.deleteIdentity(johnIdentity); identityStorage.deleteIdentity(maryIdentity); identityStorage.deleteIdentity(demoIdentity); for (Identity identity : tearDownIdentityList) { identityStorage.deleteIdentity(identity); } super.tearDown(); } /** * Test for {@link org.exoplatform.social.core.storage.api.RelationshipStorage#saveRelationship(Relationship)} * * @throws RelationshipStorageException */ public void testSaveRelationship() throws RelationshipStorageException { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull(rootToJohnRelationship.getId()); tearDownRelationshipList.add(rootToJohnRelationship); } /** * Test for {@link org.exoplatform.social.core.storage.api.RelationshipStorage#removeRelationship(Relationship)} */ public void testRemoveRelationship() { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); try { relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); relationshipStorage.removeRelationship(rootToJohnRelationship); assertNull("relationshipStorage.getRelationship(rootToJohnRelationship.getId() must be null", relationshipStorage.getRelationship(rootToJohnRelationship.getId())); } catch (RelationshipStorageException e) { LOG.error(e); } } /** * Test for {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getRelationship(String)} * @throws RelationshipStorageException */ public void testGetRelationship() throws RelationshipStorageException { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); rootToJohnRelationship = relationshipStorage.getRelationship(rootToJohnRelationship.getId()); assertNotNull(rootToJohnRelationship.getId()); assertEquals(rootIdentity.getRemoteId(), rootToJohnRelationship.getSender().getRemoteId()); assertEquals(rootIdentity.getProviderId(), rootToJohnRelationship.getSender().getProviderId()); assertEquals(johnIdentity.getRemoteId(), rootToJohnRelationship.getReceiver().getRemoteId()); assertEquals(johnIdentity.getProviderId(), rootToJohnRelationship.getReceiver().getProviderId()); assertEquals(Relationship.Type.PENDING, rootToJohnRelationship.getStatus()); rootToJohnRelationship.setStatus(Relationship.Type.CONFIRMED); relationshipStorage.saveRelationship(rootToJohnRelationship); rootToJohnRelationship = relationshipStorage.getRelationship(rootToJohnRelationship.getId()); assertNotNull(rootToJohnRelationship.getId()); assertEquals(rootIdentity.getRemoteId(), rootToJohnRelationship.getSender().getRemoteId()); assertEquals(rootIdentity.getProviderId(), rootToJohnRelationship.getSender().getProviderId()); assertEquals(johnIdentity.getRemoteId(), rootToJohnRelationship.getReceiver().getRemoteId()); assertEquals(johnIdentity.getProviderId(), rootToJohnRelationship.getReceiver().getProviderId()); assertEquals(Relationship.Type.CONFIRMED, rootToJohnRelationship.getStatus()); tearDownRelationshipList.add(rootToJohnRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getConnections(Identity, long, long)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetConnections() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.CONFIRMED); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship maryToRootRelationship = new Relationship(maryIdentity, rootIdentity, Type.CONFIRMED); maryToRootRelationship = relationshipStorage.saveRelationship(maryToRootRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", maryToRootRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.PENDING); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); //Test change avatar InputStream inputStream = getClass().getResourceAsStream("/eXo-Social.png"); AvatarAttachment avatarAttachment = new AvatarAttachment(null, "avatar", "png", inputStream, null, System.currentTimeMillis()); assertNotNull(avatarAttachment); Profile profile = johnIdentity.getProfile(); profile.setProperty(Profile.AVATAR, avatarAttachment); identityStorage.updateProfile(profile); List<Identity> listIdentities = relationshipStorage.getConnections(rootIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); // Check john has avatar assertNotNull(listIdentities.get(0).getProfile()); assertNotNull(listIdentities.get(0).getProfile().getProperty(Profile.AVATAR_URL)); // Check mary hasn't avatar but empty profile assertNotNull(listIdentities.get(1).getProfile()); assertNull(listIdentities.get(1).getProfile().getProperty(Profile.AVATAR_URL)); for (Identity identity : listIdentities) { assertNotNull("identity.getProfile() must not be null", identity.getProfile()); Identity identityLoadProfile = identityStorage.findIdentity(OrganizationIdentityProvider.NAME, identity.getRemoteId()); assertEquals("identity.getProfile().getFullName() must return: " + identityLoadProfile.getProfile().getFullName(), identityLoadProfile.getProfile().getFullName(), identity.getProfile().getFullName()); } tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(maryToRootRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getConnectionsCount(Identity)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetConnectionsCount() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.CONFIRMED); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship maryToRootRelationship = new Relationship(maryIdentity, rootIdentity, Type.CONFIRMED); maryToRootRelationship = relationshipStorage.saveRelationship(maryToRootRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", maryToRootRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.PENDING); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); List<Identity> listIdentities = relationshipStorage.getConnections(rootIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); int count = relationshipStorage.getConnectionsCount(rootIdentity); assertEquals("count must be: 2", 2, count); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(maryToRootRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getRelationships(Identity, Type, List)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetRelationshipsWithListCheck() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.CONFIRMED); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship maryToRootRelationship = new Relationship(maryIdentity, rootIdentity, Type.PENDING); maryToRootRelationship = relationshipStorage.saveRelationship(maryToRootRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", maryToRootRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.IGNORED); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); List<Identity> listCheckIdentity = new ArrayList<Identity>(); listCheckIdentity.add(rootIdentity); listCheckIdentity.add(demoIdentity); listCheckIdentity.add(maryIdentity); listCheckIdentity.add(johnIdentity); List<Relationship> rootConfirmedRelationships = relationshipStorage.getRelationships(rootIdentity, Relationship.Type.CONFIRMED, listCheckIdentity); assertNotNull("rootConfirmedRelationships must not be null", rootConfirmedRelationships); assertEquals("rootConfirmedRelationships.size() must return: 1", 1, rootConfirmedRelationships.size()); List<Relationship> johnConfirmedRelationships = relationshipStorage.getRelationships(johnIdentity, Relationship.Type.CONFIRMED, listCheckIdentity); assertNotNull("johnConfirmedRelationships must not be null", johnConfirmedRelationships); assertEquals("johnConfirmedRelationships.size() must return: 1", 1, johnConfirmedRelationships.size()); List<Relationship> johnPendingRelationships = relationshipStorage.getRelationships(johnIdentity, Relationship.Type.PENDING, listCheckIdentity); assertNotNull("johnPendingRelationships must not be null", johnPendingRelationships); assertEquals("johnPendingRelationships.size() must return: 0", 0, johnPendingRelationships.size()); List<Relationship> maryPendingRelationships = relationshipStorage.getRelationships(maryIdentity, Relationship.Type.PENDING, listCheckIdentity); assertNotNull("maryPendingRelationships must not be null", maryPendingRelationships); assertEquals("maryPendingRelationships.size() must return: 1", 1, maryPendingRelationships.size()); List<Relationship> demoIgnoredRelationships = relationshipStorage.getRelationships(demoIdentity, Relationship.Type.IGNORED, listCheckIdentity); assertNotNull("demoIgnoredRelationships must not be null", demoIgnoredRelationships); assertEquals("demoIgnoredRelationships.size() must return: 1", 1, demoIgnoredRelationships.size()); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(maryToRootRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getSenderRelationships(Identity, Type, List)} * * @throws RelationshipStorageException */ public void testGetSenderRelationshipsByIdentityAndType() throws RelationshipStorageException { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.PENDING); relationshipStorage.saveRelationship(rootToJohnRelationship); relationshipStorage.saveRelationship(rootToDemoRelationship); List<Relationship> relationships = relationshipStorage.getSenderRelationships(rootIdentity, Type.PENDING, null); assertNotNull(relationships); assertEquals(2, relationships.size()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.CONFIRMED); relationshipStorage.saveRelationship(rootToMaryRelationship); relationships = relationshipStorage.getSenderRelationships(rootIdentity, Type.CONFIRMED, null); assertNotNull(relationships); assertEquals(1, relationships.size()); relationships = relationshipStorage.getSenderRelationships(rootIdentity, null, null); assertNotNull(relationships); assertEquals(3, relationships.size()); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getSenderRelationships(String, Type, List)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetSenderRelationships() throws Exception { String rootId = rootIdentity.getId(); Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.PENDING); relationshipStorage.saveRelationship(rootToJohnRelationship); relationshipStorage.saveRelationship(rootToDemoRelationship); List<Relationship> relationships = relationshipStorage.getSenderRelationships(rootId, Type.PENDING, null); assertNotNull(relationships); assertEquals(2, relationships.size()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.CONFIRMED); relationshipStorage.saveRelationship(rootToMaryRelationship); relationships = relationshipStorage.getSenderRelationships(rootId, Type.CONFIRMED, null); assertNotNull(relationships); assertEquals(1, relationships.size()); relationships = relationshipStorage.getSenderRelationships(rootId, null, null); assertNotNull(relationships); assertEquals(3, relationships.size()); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getRelationships(Identity, long, long)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetRelationships() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.CONFIRMED); rootToMaryRelationship = relationshipStorage.saveRelationship(rootToMaryRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", rootToMaryRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.IGNORED); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); List<Identity> listIdentities = relationshipStorage.getRelationships(rootIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 3", 3, listIdentities.size()); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getRelationshipsCount(Identity)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetRelationshipsCount() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.CONFIRMED); rootToMaryRelationship = relationshipStorage.saveRelationship(rootToMaryRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", rootToMaryRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.IGNORED); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); int count = relationshipStorage.getRelationshipsCount(rootIdentity); assertEquals("count must be: 3", 3, count); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getIncomingRelationships(Identity, long, long)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetIncomingRelationships() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship maryToJohnRelationship = new Relationship(maryIdentity, johnIdentity, Type.PENDING); maryToJohnRelationship = relationshipStorage.saveRelationship(maryToJohnRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", maryToJohnRelationship.getId()); Relationship demoToJohnRelationship = new Relationship(demoIdentity, johnIdentity, Type.CONFIRMED); demoToJohnRelationship = relationshipStorage.saveRelationship(demoToJohnRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", demoToJohnRelationship.getId()); //Test change avatar InputStream inputStream = getClass().getResourceAsStream("/eXo-Social.png"); AvatarAttachment avatarAttachment = new AvatarAttachment(null, "avatar", "png", inputStream, null, System.currentTimeMillis()); assertNotNull(avatarAttachment); Profile profile = maryIdentity.getProfile(); profile.setProperty(Profile.AVATAR, avatarAttachment); identityStorage.updateProfile(profile); List<Identity> listIdentities = relationshipStorage.getIncomingRelationships(johnIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); // Check root hasn't avatar but empty profile assertNotNull(listIdentities.get(0).getProfile()); assertNull(listIdentities.get(0).getProfile().getProperty(Profile.AVATAR_URL)); // Check mary has avatar assertNotNull(listIdentities.get(1).getProfile()); assertNotNull(listIdentities.get(1).getProfile().getProperty(Profile.AVATAR_URL)); for (Identity identity : listIdentities) { assertNotNull("identity.getProfile() must not be null", identity.getProfile()); Identity identityLoadProfile = identityStorage.findIdentity(OrganizationIdentityProvider.NAME, identity.getRemoteId()); assertEquals("identity.getProfile().getFullName() must return: " + identityLoadProfile.getProfile().getFullName(), identityLoadProfile.getProfile().getFullName(), identity.getProfile().getFullName()); } tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(maryToJohnRelationship); tearDownRelationshipList.add(demoToJohnRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getIncomingRelationshipsCount(Identity)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetIncomingRelationshipsCount() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship maryToJohnRelationship = new Relationship(maryIdentity, johnIdentity, Type.PENDING); maryToJohnRelationship = relationshipStorage.saveRelationship(maryToJohnRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", maryToJohnRelationship.getId()); Relationship demoToJohnRelationship = new Relationship(demoIdentity, johnIdentity, Type.CONFIRMED); demoToJohnRelationship = relationshipStorage.saveRelationship(demoToJohnRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", demoToJohnRelationship.getId()); List<Identity> listIdentities = relationshipStorage.getIncomingRelationships(johnIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); int count = relationshipStorage.getIncomingRelationshipsCount(johnIdentity); assertEquals("count must be: 2", 2, count); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(maryToJohnRelationship); tearDownRelationshipList.add(demoToJohnRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getOutgoingRelationships(Identity, long, long)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetOutgoingRelationships() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.PENDING); rootToMaryRelationship = relationshipStorage.saveRelationship(rootToMaryRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", rootToMaryRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.IGNORED); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); //Test change avatar InputStream inputStream = getClass().getResourceAsStream("/eXo-Social.png"); AvatarAttachment avatarAttachment = new AvatarAttachment(null, "avatar", "png", inputStream, null, System.currentTimeMillis()); assertNotNull(avatarAttachment); Profile profile = johnIdentity.getProfile(); profile.setProperty(Profile.AVATAR, avatarAttachment); identityStorage.updateProfile(profile); List<Identity> listIdentities = relationshipStorage.getOutgoingRelationships(rootIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); listIdentities = relationshipStorage.getOutgoingRelationships(rootIdentity, 0, 10); demoIdentity = identityStorage.findIdentity(OrganizationIdentityProvider.NAME, demoIdentity.getRemoteId()); // Check john has avatar assertNotNull(listIdentities.get(0).getProfile()); assertNotNull(listIdentities.get(0).getProfile().getProperty(Profile.AVATAR_URL)); // Check mary hasn't avatar but empty profile assertNotNull(listIdentities.get(1).getProfile()); assertNull(listIdentities.get(1).getProfile().getProperty(Profile.AVATAR_URL)); for (Identity identity : listIdentities) { Identity identityLoadProfile = identityStorage.findIdentity(OrganizationIdentityProvider.NAME, identity.getRemoteId()); assertNotNull("identity.getProfile() must not be nul", identity.getProfile()); assertNotNull("temp must not be null", identityLoadProfile); assertEquals("identity.getProfile().getFullName() must return: " + identityLoadProfile.getProfile().getFullName(), identityLoadProfile.getProfile().getFullName(), identity.getProfile().getFullName()); } tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getOutgoingRelationshipsCount(Identity)} * * @throws Exception * @since 1.2.0-Beta3 */ public void testGetOutgoingRelationshipsCount() throws Exception { Relationship rootToJohnRelationship = new Relationship(rootIdentity, johnIdentity, Type.PENDING); rootToJohnRelationship = relationshipStorage.saveRelationship(rootToJohnRelationship); assertNotNull("rootToJohnRelationship.getId() must not be null", rootToJohnRelationship.getId()); Relationship rootToMaryRelationship = new Relationship(rootIdentity, maryIdentity, Type.PENDING); rootToMaryRelationship = relationshipStorage.saveRelationship(rootToMaryRelationship); assertNotNull("rootToMaryRelationship.getId() must not be null", rootToMaryRelationship.getId()); Relationship rootToDemoRelationship = new Relationship(rootIdentity, demoIdentity, Type.IGNORED); rootToDemoRelationship = relationshipStorage.saveRelationship(rootToDemoRelationship); assertNotNull("rootToDemoRelationship.getId() must not be null", rootToDemoRelationship.getId()); List<Identity> listIdentities = relationshipStorage.getOutgoingRelationships(rootIdentity, 0, 10); assertNotNull("listIdentities must not be null", listIdentities); assertEquals("listIdentities.size() must return: 2", 2, listIdentities.size()); int count = relationshipStorage.getOutgoingRelationshipsCount(rootIdentity); assertEquals("count must be: 2", 2, count); tearDownRelationshipList.add(rootToJohnRelationship); tearDownRelationshipList.add(rootToMaryRelationship); tearDownRelationshipList.add(rootToDemoRelationship); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getConnectionsByFilter(providerId, Identity, ProfileFilter)} * in case Identity had no connection yet * @throws Exception */ public void testGetConnectionsByFilterEmpty() throws Exception { populateData(); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); List<Identity> identities = relationshipStorage.getConnectionsByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be " + identities.size(), 0, identities.size()); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getConnectionsByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.3 */ public void testGetConnectionsByFilter() throws Exception { populateData(); populateRelationshipData(Type.CONFIRMED); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); List<Identity> identities = relationshipStorage.getConnectionsByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be " + identities.size(), 8, identities.size()); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName9"); identities = relationshipStorage.getConnectionsByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be " + identities.size(), 1, identities.size()); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getIncomingByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.3 */ public void testGetIncomingByFilter() throws Exception { populateData(); populateRelationshipIncommingData(); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); List<Identity> identities = relationshipStorage.getIncomingByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be " + identities.size(), 8, identities.size()); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName6"); identities = relationshipStorage.getIncomingByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be " + identities.size(), 1, identities.size()); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getOutgoingByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.3 */ public void testGetOutgoingByFilter() throws Exception { populateData(); populateRelationshipData(Type.PENDING); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); List<Identity> identities = relationshipStorage.getOutgoingByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be 8", 8, identities.size()); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName8"); identities = relationshipStorage.getOutgoingByFilter(tearDownIdentityList.get(0), pf, 0, 20); assertEquals("Number of identities must be 1", 1, identities.size()); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getIncomingCountByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.3 */ public void testGetIncomingCountByFilter() throws Exception { populateData(); populateRelationshipIncommingData(); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); int countIdentities = relationshipStorage.getIncomingCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 8", 8, countIdentities); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName6"); countIdentities = relationshipStorage.getIncomingCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 1", 1, countIdentities); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getConnectionsCountByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.2 */ public void testGetConnectionsCountByFilter() throws Exception { populateData(); populateRelationshipData(Type.CONFIRMED); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); int countIdentities = relationshipStorage.getConnectionsCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 8", 8, countIdentities); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName6"); countIdentities = relationshipStorage.getConnectionsCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 1", 1, countIdentities); } /** * Test {@link org.exoplatform.social.core.storage.api.RelationshipStorage#getOutgoingCountByFilter(providerId, Identity, ProfileFilter)} * * @throws Exception * @since 1.2.3 */ public void testGetOutgoingCountByFilter() throws Exception { populateData(); populateRelationshipData(Type.PENDING); ProfileFilter pf = new ProfileFilter(); pf = buildProfileFilterWithExcludeIdentities(pf); int countIdentities = relationshipStorage.getOutgoingCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 8", 8, countIdentities); pf.setPosition("developer"); pf.setGender("male"); pf.setName("FirstName8"); countIdentities = relationshipStorage.getOutgoingCountByFilter(tearDownIdentityList.get(0), pf); assertEquals("Number of identities must be 1", 1, countIdentities); } /** * Builds the ProfileFilter and exclude the Identity. * @param filter * @return */ private ProfileFilter buildProfileFilterWithExcludeIdentities(ProfileFilter filter) { ProfileFilter result = filter; if (result == null) { result = new ProfileFilter(); } List<Identity> excludeIdentities = new ArrayList<Identity>(); if (tearDownIdentityList.size() > 1) { Identity identity0 = tearDownIdentityList.get(0); excludeIdentities.add(identity0); result.setExcludedIdentityList(excludeIdentities); } return result; } /** * Creates the relationship to connect from 0 to [2, 9]. * @param type */ private void populateRelationshipData(Relationship.Type type) { if (tearDownIdentityList.size() > 1) { Identity identity0 = tearDownIdentityList.get(0); Relationship firstToSecondRelationship = null; for (int i = 2; i< tearDownIdentityList.size(); i++) { firstToSecondRelationship = new Relationship(identity0, tearDownIdentityList.get(i), type); tearDownRelationshipList.add(firstToSecondRelationship); relationshipStorage.saveRelationship(firstToSecondRelationship); } } } /** * Creates the relationship to connect from 0 to [2, 9]. */ private void populateRelationshipIncommingData() { if (tearDownIdentityList.size() > 1) { Identity identity0 = tearDownIdentityList.get(0); Relationship firstToSecondRelationship = null; for (int i = 2; i< tearDownIdentityList.size(); i++) { firstToSecondRelationship = new Relationship(tearDownIdentityList.get(i), identity0, Relationship.Type.PENDING); tearDownRelationshipList.add(firstToSecondRelationship); relationshipStorage.saveRelationship(firstToSecondRelationship); } } } /** * Creates the identity data index in range [0,9] */ private void populateData() { String providerId = "organization"; int total = 10; for (int i = 0; i < total; i++) { String remoteId = "username" + i; Identity identity = new Identity(providerId, remoteId); identityStorage.saveIdentity(identity); Profile profile = new Profile(identity); profile.setProperty(Profile.FIRST_NAME, "FirstName" + i); profile.setProperty(Profile.LAST_NAME, "LastName" + i); profile.setProperty(Profile.FULL_NAME, "FirstName" + i + " " + "LastName" + i); profile.setProperty("position", "developer"); profile.setProperty("gender", "male"); identity.setProfile(profile); tearDownIdentityList.add(identity); identityStorage.saveProfile(profile); } } }