package org.buddycloud.channelserver.db.jdbc;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Date;
import java.util.HashSet;
import junit.framework.Assert;
import org.apache.commons.collections.CollectionUtils;
import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler;
import org.buddycloud.channelserver.pubsub.affiliation.Affiliations;
import org.buddycloud.channelserver.pubsub.model.NodeMembership;
import org.buddycloud.channelserver.pubsub.model.NodeSubscription;
import org.buddycloud.channelserver.pubsub.model.impl.NodeMembershipImpl;
import org.buddycloud.channelserver.pubsub.model.impl.NodeSubscriptionImpl;
import org.buddycloud.channelserver.pubsub.subscription.Subscriptions;
import org.junit.Test;
import org.xmpp.resultsetmanagement.ResultSet;
public class JDBCNodeStoreNodeMembersTest extends JDBCNodeStoreAbstract {
public JDBCNodeStoreNodeMembersTest() throws SQLException, IOException, ClassNotFoundException {
dbTester = new DatabaseTester();
IQTestHandler.readConf();
}
@Test
public void getNodeMemberships() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
ResultSet<NodeMembership> result = store.getNodeMemberships(TEST_SERVER1_NODE1_ID);
HashSet<NodeMembership> expected = new HashSet<NodeMembership>() {
{
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER2_USER3_JID, TEST_SERVER2_CHANNELS_JID, Subscriptions.subscribed,
Affiliations.member, null));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_OUTCAST_JID, Subscriptions.subscribed, Affiliations.outcast, null,
new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER2_USER1_JID, TEST_SERVER2_CHANNELS_JID, Subscriptions.subscribed,
Affiliations.publisher, null, new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER2_JID, Subscriptions.subscribed, Affiliations.publisher, null,
new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date()));
}
};
assertEquals("Incorrect number of node memberships returned", expected.size(), result.size());
assertTrue("Incorrect node memberships returned", CollectionUtils.isEqualCollection(expected, result));
}
@Test
public void getNodeMembershipsUsesBareJID() throws Exception {
dbTester.loadData("node_1");
dbTester.loadData("node_2");
ResultSet<NodeMembership> result = store.getNodeMemberships(TEST_SERVER1_NODE1_ID);
HashSet<NodeMembership> expected = new HashSet<NodeMembership>() {
{
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER2_USER3_JID, TEST_SERVER2_CHANNELS_JID, Subscriptions.subscribed,
Affiliations.member, null));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_OUTCAST_JID, Subscriptions.subscribed, Affiliations.outcast, null,
new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER2_USER1_JID, TEST_SERVER2_CHANNELS_JID, Subscriptions.subscribed,
Affiliations.publisher, null, new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER2_JID, Subscriptions.subscribed, Affiliations.publisher, null,
new Date()));
add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date()));
}
};
assertEquals("Incorrect number of node memberships returned", expected.size(), result.size());
assertTrue("Incorrect node memberships returned", CollectionUtils.isEqualCollection(expected, result));
}
@Test
public void canGetNodeMembershipWhereTheresOnlySubscription() throws Exception {
dbTester.loadData("node_1");
store.deleteUserAffiliations(TEST_SERVER1_USER1_JID);
ResultSet<NodeMembership> result = store.getNodeMemberships(TEST_SERVER1_NODE1_ID);
NodeMembership expected =
new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER2_USER3_JID, TEST_SERVER2_CHANNELS_JID, Subscriptions.subscribed,
Affiliations.member, null);
assertEquals("An unexpected node membership was returned", expected, result.get(0));
}
@Test
public void querySelectsTheMostRecentUpdatedDate() throws Exception {
dbTester.loadData("node_1");
Date originalDate = store.getNodeMemberships(TEST_SERVER1_NODE1_ID).get(0).getLastUpdated();
store.setUserAffiliation(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Affiliations.owner);
Date newDate = store.getNodeMembership(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID).getLastUpdated();
assertTrue(newDate.after(originalDate));
}
@Test
public void getNodeMembershipReturnsInvitedByDetails() throws Exception {
store.addRemoteNode(TEST_SERVER1_NODE1_ID);
NodeSubscription newSubscription =
new NodeSubscriptionImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.invited, TEST_SERVER2_USER2_JID);
store.addUserSubscription(newSubscription);
NodeMembership membership = store.getNodeMembership(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID);
Assert.assertEquals(newSubscription.getInvitedBy(), membership.getInvitedBy());
}
@Test
public void getNodeMembershipsReturnsInvitedByDetails() throws Exception {
store.addRemoteNode(TEST_SERVER1_NODE1_ID);
NodeSubscription newSubscription =
new NodeSubscriptionImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.invited, TEST_SERVER2_USER2_JID);
store.addUserSubscription(newSubscription);
NodeMembership membership = store.getNodeMemberships(TEST_SERVER1_NODE1_ID).get(0);
Assert.assertEquals(newSubscription.getInvitedBy(), membership.getInvitedBy());
}
@Test
public void getUserMembershipsReturnsInvitedByDetails() throws Exception {
store.addRemoteNode(TEST_SERVER1_NODE1_ID);
NodeSubscription newSubscription =
new NodeSubscriptionImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.invited, TEST_SERVER2_USER2_JID);
store.addUserSubscription(newSubscription);
NodeMembership membership = store.getUserMemberships(TEST_SERVER1_USER1_JID).get(0);
Assert.assertEquals(newSubscription.getInvitedBy(), membership.getInvitedBy());
}
}