/*
* 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.util.ArrayList;
import java.util.List;
import org.exoplatform.social.core.identity.model.Identity;
import org.exoplatform.social.core.identity.model.Profile;
import org.exoplatform.social.core.relationship.model.Relationship;
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 RelationshipStorageNewTestCase extends AbstractCoreTest {
private RelationshipStorageImpl storage;
private IdentityStorageImpl identityStorage;
private List<String> tearDownIdentityList;
@Override
protected void setUp() throws Exception {
storage = (RelationshipStorageImpl) getContainer().getComponentInstanceOfType(RelationshipStorageImpl.class);
assertNotNull(storage);
identityStorage = (IdentityStorageImpl) getContainer().getComponentInstanceOfType(IdentityStorageImpl.class);
assertNotNull("identityManger must not be null", identityStorage);
tearDownIdentityList = new ArrayList<String>();
super.setUp();
}
@Override
public void tearDown() throws Exception {
for (String id : tearDownIdentityList) {
identityStorage.deleteIdentity(new Identity(id));
}
super.tearDown();
}
public void testCreateRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testCreateRelationshipExists() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
//
try {
storage._createRelationship(newRelationship);
fail();
}
catch (Exception e) {
// test ok
}
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetRelationshipDoesntExists() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
try {
storage._getRelationship(tmp1, tmp2);
fail();
}
catch (Exception e) {
// test ok
}
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testSaveRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
//
newRelationship.setStatus(Relationship.Type.CONFIRMED);
storage._saveRelationship(newRelationship);
//
Relationship got = storage._getRelationship(tmp1, tmp2);
assertNotNull(got);
assertEquals(Relationship.Type.CONFIRMED, got.getStatus());
assertEquals(tmp1.getId(), got.getSender().getId());
assertEquals(tmp2.getId(), got.getReceiver().getId());
//
Relationship gotInvert = storage._getRelationship(tmp2, tmp1);
assertNotNull(gotInvert);
assertEquals(Relationship.Type.CONFIRMED, gotInvert.getStatus());
assertEquals(tmp1.getId(), gotInvert.getReceiver().getId());
assertEquals(tmp2.getId(), gotInvert.getSender().getId());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testFindRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
Relationship got = storage._getRelationship(newRelationship.getId());
assertNotNull(got);
assertEquals(tmp1.getId(), got.getSender().getId());
assertEquals(tmp2.getId(), got.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, got.getStatus());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testDeleteRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
storage.removeRelationship(newRelationship);
//
try {
storage._getRelationship(newRelationship.getId());
fail();
} catch (NodeNotFoundException e) {
// test ok
}
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testRemoveAcceptedRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
newRelationship.setStatus(Relationship.Type.CONFIRMED);
storage._saveRelationship(newRelationship);
Relationship gotRelationship = storage.getRelationship(tmp1, tmp2);
assertNotNull(gotRelationship.getId());
assertEquals(tmp1.getId(), gotRelationship.getSender().getId());
assertEquals(tmp2.getId(), gotRelationship.getReceiver().getId());
assertEquals(Relationship.Type.CONFIRMED, gotRelationship.getStatus());
storage.removeRelationship(newRelationship);
//
try {
storage._getRelationship(newRelationship.getId());
fail();
} catch (NodeNotFoundException e) {
// test ok
}
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetSenderRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
List<Relationship> relationshipList = storage._getSenderRelationships(tmp1, Relationship.Type.PENDING, null);
assertNotNull(relationshipList);
assertEquals(1, relationshipList.size());
assertNotNull(relationshipList.get(0));
assertNotNull(relationshipList.get(0).getSender());
assertNotNull(relationshipList.get(0).getReceiver());
assertEquals(tmp1.getId(), relationshipList.get(0).getSender().getId());
assertEquals(tmp2.getId(), relationshipList.get(0).getReceiver().getId());
assertEquals(Relationship.Type.PENDING, relationshipList.get(0).getStatus());
assertNull(relationshipList.get(0).getSender().getProfile().getId());
assertNull(relationshipList.get(0).getReceiver().getProfile().getId());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetSenderRelationshipWithProfile() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
Profile profile1 = new Profile(tmp1);
profile1.setProperty(Profile.FIRST_NAME, "p1 first");
profile1.setProperty(Profile.LAST_NAME, "p1 last");
profile1.setProperty(Profile.URL, "p1 url");
tmp1.setProfile(profile1);
identityStorage._createProfile(profile1);
Profile profile2 = new Profile(tmp2);
profile2.setProperty(Profile.FIRST_NAME, "p2 first");
profile2.setProperty(Profile.LAST_NAME, "p2 last");
profile2.setProperty(Profile.URL, "p2 url");
tmp2.setProfile(profile2);
identityStorage._createProfile(profile2);
//
List<Relationship> relationshipList = storage._getSenderRelationships(tmp1, Relationship.Type.PENDING, null);
assertNotNull(relationshipList);
assertEquals(1, relationshipList.size());
assertNotNull(relationshipList.get(0));
assertNotNull(relationshipList.get(0).getSender());
assertNotNull(relationshipList.get(0).getReceiver());
assertEquals(tmp1.getId(), relationshipList.get(0).getSender().getId());
assertEquals(tmp2.getId(), relationshipList.get(0).getReceiver().getId());
assertEquals(Relationship.Type.PENDING, relationshipList.get(0).getStatus());
assertNotNull(relationshipList.get(0).getSender().getProfile().getId());
assertEquals("p1 first", relationshipList.get(0).getSender().getProfile().getProperty(Profile.FIRST_NAME));
assertEquals("p1 last", relationshipList.get(0).getSender().getProfile().getProperty(Profile.LAST_NAME));
assertNotNull(relationshipList.get(0).getReceiver().getProfile().getId());
assertEquals("p2 first", relationshipList.get(0).getReceiver().getProfile().getProperty(Profile.FIRST_NAME));
assertEquals("p2 last", relationshipList.get(0).getReceiver().getProfile().getProperty(Profile.LAST_NAME));
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetReceiverRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
List<Relationship> relationshipList = storage._getReceiverRelationships(tmp2, Relationship.Type.PENDING, null);
assertNotNull(relationshipList);
assertEquals(1, relationshipList.size());
assertNotNull(relationshipList.get(0));
assertNotNull(relationshipList.get(0).getSender());
assertNotNull(relationshipList.get(0).getReceiver());
assertEquals(tmp1.getId(), relationshipList.get(0).getSender().getId());
assertEquals(tmp2.getId(), relationshipList.get(0).getReceiver().getId());
assertEquals(Relationship.Type.PENDING, relationshipList.get(0).getStatus());
assertNull(relationshipList.get(0).getSender().getProfile().getId());
assertNull(relationshipList.get(0).getReceiver().getProfile().getId());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetReceiverRelationshipWithProfile() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
Profile profile1 = new Profile(tmp1);
profile1.setProperty(Profile.FIRST_NAME, "p1 first");
profile1.setProperty(Profile.LAST_NAME, "p1 last");
profile1.setProperty(Profile.URL, "p1 url");
tmp1.setProfile(profile1);
identityStorage._createProfile(profile1);
Profile profile2 = new Profile(tmp2);
profile2.setProperty(Profile.FIRST_NAME, "p2 first");
profile2.setProperty(Profile.LAST_NAME, "p2 last");
profile2.setProperty(Profile.URL, "p2 url");
tmp2.setProfile(profile2);
identityStorage._createProfile(profile2);
//
List<Relationship> relationshipList = storage._getReceiverRelationships(tmp2, Relationship.Type.PENDING, null);
assertNotNull(relationshipList);
assertEquals(1, relationshipList.size());
assertNotNull(relationshipList.get(0));
assertNotNull(relationshipList.get(0).getSender());
assertNotNull(relationshipList.get(0).getReceiver());
assertEquals(tmp1.getId(), relationshipList.get(0).getSender().getId());
assertEquals(tmp2.getId(), relationshipList.get(0).getReceiver().getId());
assertEquals(Relationship.Type.PENDING, relationshipList.get(0).getStatus());
assertNotNull(relationshipList.get(0).getSender().getProfile().getId());
assertEquals("p1 first", relationshipList.get(0).getSender().getProfile().getProperty(Profile.FIRST_NAME));
assertEquals("p1 last", relationshipList.get(0).getSender().getProfile().getProperty(Profile.LAST_NAME));
assertNotNull(relationshipList.get(0).getReceiver().getProfile().getId());
assertEquals("p2 first", relationshipList.get(0).getReceiver().getProfile().getProperty(Profile.FIRST_NAME));
assertEquals("p2 last", relationshipList.get(0).getReceiver().getProfile().getProperty(Profile.LAST_NAME));
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetRelationship() throws Exception {
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
Relationship newRelationship = new Relationship(tmp1, tmp2, Relationship.Type.PENDING);
//
storage._createRelationship(newRelationship);
assertNotNull(newRelationship.getId());
assertEquals(tmp1.getId(), newRelationship.getSender().getId());
assertEquals(tmp2.getId(), newRelationship.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, newRelationship.getStatus());
//
Relationship rel = storage.getRelationship(tmp1, tmp2);
assertEquals(tmp1.getId(), rel.getSender().getId());
assertEquals(tmp2.getId(), rel.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, rel.getStatus());
//
Relationship rel2 = storage.getRelationship(tmp2, tmp1);
assertEquals(tmp1.getId(), rel2.getSender().getId());
assertEquals(tmp2.getId(), rel2.getReceiver().getId());
assertEquals(Relationship.Type.PENDING, rel2.getStatus());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
}
public void testGetConnectionsCount() throws Exception {
//
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
Identity tmp3 = new Identity("organization", "tmp3");
Identity tmp4 = new Identity("organization", "tmp4");
Identity tmp5 = new Identity("organization", "tmp5");
//
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
identityStorage.saveIdentity(tmp3);
identityStorage.saveIdentity(tmp4);
identityStorage.saveIdentity(tmp5);
//
Relationship r12 = new Relationship(tmp1, tmp2);
Relationship r13 = new Relationship(tmp1, tmp3);
Relationship r14 = new Relationship(tmp1, tmp4);
Relationship r32 = new Relationship(tmp3, tmp2);
Relationship r42 = new Relationship(tmp4, tmp2);
//
r12.setStatus(Relationship.Type.CONFIRMED);
r13.setStatus(Relationship.Type.CONFIRMED);
r14.setStatus(Relationship.Type.CONFIRMED);
r32.setStatus(Relationship.Type.CONFIRMED);
r42.setStatus(Relationship.Type.CONFIRMED);
//
storage.saveRelationship(r12);
storage.saveRelationship(r13);
storage.saveRelationship(r14);
storage.saveRelationship(r32);
storage.saveRelationship(r42);
//
assertEquals(3, storage.getConnectionsCount(tmp1));
assertEquals(3, storage.getConnectionsCount(tmp2));
assertEquals(2, storage.getConnectionsCount(tmp3));
assertEquals(2, storage.getConnectionsCount(tmp4));
assertEquals(0, storage.getConnectionsCount(tmp5));
//
assertEquals(3, storage.getConnections(tmp1, 0, 100).size());
assertEquals(3, storage.getConnections(tmp2, 0, 100).size());
assertEquals(2, storage.getConnections(tmp3, 0, 100).size());
assertEquals(2, storage.getConnections(tmp4, 0, 100).size());
assertEquals(0, storage.getConnections(tmp5, 0, 100).size());
assertEquals(3, storage.getConnections(tmp1, 0, 3).size());
assertEquals(2, storage.getConnections(tmp1, 0, 2).size());
assertEquals(3, storage.getConnections(tmp1, 0, 0).size());
assertEquals(3, storage.getConnections(tmp1, 0, -1).size());
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
tearDownIdentityList.add(tmp3.getId());
tearDownIdentityList.add(tmp4.getId());
tearDownIdentityList.add(tmp5.getId());
}
public void testGetConnections() throws Exception {
//
Identity tmp1 = new Identity("organization", "tmp1");
Identity tmp2 = new Identity("organization", "tmp2");
Identity tmp3 = new Identity("organization", "tmp3");
Identity tmp4 = new Identity("organization", "tmp4");
Identity tmp5 = new Identity("organization", "tmp5");
//
identityStorage.saveIdentity(tmp1);
identityStorage.saveIdentity(tmp2);
identityStorage.saveIdentity(tmp3);
identityStorage.saveIdentity(tmp4);
identityStorage.saveIdentity(tmp5);
Profile profile = new Profile(tmp1);
profile = identityStorage.loadProfile(profile);
profile.setProperty(Profile.POSITION, "my position");
profile.setProperty(Profile.AVATAR_URL, "my avatar url");
identityStorage.saveProfile(profile);
//
Relationship r12 = new Relationship(tmp1, tmp2);
Relationship r13 = new Relationship(tmp1, tmp3);
Relationship r14 = new Relationship(tmp1, tmp4);
Relationship r32 = new Relationship(tmp3, tmp2);
Relationship r42 = new Relationship(tmp4, tmp2);
//
r12.setStatus(Relationship.Type.CONFIRMED);
r13.setStatus(Relationship.Type.CONFIRMED);
r14.setStatus(Relationship.Type.CONFIRMED);
r32.setStatus(Relationship.Type.CONFIRMED);
r42.setStatus(Relationship.Type.CONFIRMED);
//
storage.saveRelationship(r12);
storage.saveRelationship(r13);
storage.saveRelationship(r14);
storage.saveRelationship(r32);
storage.saveRelationship(r42);
//
assertTrue(storage.getConnections(tmp1, 0, 10).contains(tmp2));
assertTrue(storage.getConnections(tmp1, 0, 10).contains(tmp3));
assertTrue(storage.getConnections(tmp1, 0, 10).contains(tmp4));
assertTrue(!storage.getConnections(tmp1, 0, 10).contains(tmp5));
assertTrue(storage.getConnections(tmp2, 0, 10).contains(tmp1));
assertTrue(storage.getConnections(tmp2, 0, 10).contains(tmp3));
assertTrue(storage.getConnections(tmp2, 0, 10).contains(tmp4));
assertTrue(!storage.getConnections(tmp2, 0, 10).contains(tmp5));
assertTrue(storage.getConnections(tmp3, 0, 10).contains(tmp1));
assertTrue(storage.getConnections(tmp3, 0, 10).contains(tmp2));
assertTrue(!storage.getConnections(tmp3, 0, 10).contains(tmp4));
assertTrue(!storage.getConnections(tmp3, 0, 10).contains(tmp5));
assertTrue(storage.getConnections(tmp4, 0, 10).contains(tmp1));
assertTrue(storage.getConnections(tmp4, 0, 10).contains(tmp2));
assertTrue(!storage.getConnections(tmp4, 0, 10).contains(tmp3));
assertTrue(!storage.getConnections(tmp4, 0, 10).contains(tmp5));
assertTrue(!storage.getConnections(tmp5, 0, 10).contains(tmp1));
assertTrue(!storage.getConnections(tmp5, 0, 10).contains(tmp2));
assertTrue(!storage.getConnections(tmp5, 0, 10).contains(tmp3));
assertTrue(!storage.getConnections(tmp5, 0, 10).contains(tmp4));
//
for (Identity currentIdentity : storage.getConnections(tmp1, 0, 10)) {
if (currentIdentity.getId().equals(tmp1)) {
assertEquals(currentIdentity.getProfile().getProperty(Profile.POSITION), "my position");
assertEquals(currentIdentity.getProfile().getProperty(Profile.AVATAR_URL), "my avatar url");
}
}
//
tearDownIdentityList.add(tmp1.getId());
tearDownIdentityList.add(tmp2.getId());
tearDownIdentityList.add(tmp3.getId());
tearDownIdentityList.add(tmp4.getId());
tearDownIdentityList.add(tmp5.getId());
}
}