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 org.apache.commons.collections.CollectionUtils; import org.buddycloud.channelserver.channel.node.configuration.field.Ephemeral; 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.impl.NodeMembershipImpl; import org.buddycloud.channelserver.pubsub.subscription.Subscriptions; import org.junit.Test; import org.xmpp.resultsetmanagement.ResultSet; public class JDBCNodeStoreUserMembershipsTest extends JDBCNodeStoreAbstract { public JDBCNodeStoreUserMembershipsTest() throws SQLException, IOException, ClassNotFoundException { dbTester = new DatabaseTester(); IQTestHandler.readConf(); } @Test public void getUserMemberships() throws Exception { dbTester.loadData("node_1"); dbTester.loadData("node_2"); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID); HashSet<NodeMembership> expected = new HashSet<NodeMembership>() { { add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date())); add(new NodeMembershipImpl(TEST_SERVER1_NODE2_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.publisher, null, new Date())); } }; assertEquals("Incorrect number of user memberships returned", expected.size(), result.size()); assertTrue("Incorrect user memberships returned", CollectionUtils.isEqualCollection(expected, result)); } @Test public void getUserMembershipsUsesBareJID() throws Exception { dbTester.loadData("node_1"); dbTester.loadData("node_2"); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID_WITH_RESOURCE); HashSet<NodeMembership> expected = new HashSet<NodeMembership>() { { add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date())); add(new NodeMembershipImpl(TEST_SERVER1_NODE2_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.publisher, null, new Date())); } }; assertEquals("Incorrect number of user memberships returned", expected.size(), result.size()); assertTrue("Incorrect user memberships returned", CollectionUtils.isEqualCollection(expected, result)); } @Test public void canGetUserMembershipWhereTheresOnlySubscription() throws Exception { dbTester.loadData("node_1"); store.deleteUserAffiliations(TEST_SERVER1_USER1_JID); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID); NodeMembership expected = new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.none, null); assertEquals("An unexpected user membership was returned", expected, result.get(0)); } @Test public void querySelectsTheMostRecentUpdatedDate() throws Exception { dbTester.loadData("node_1"); Date originalDate = store.getUserMemberships(TEST_SERVER1_USER1_JID).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 settingEphmeralToTrueOnlyReturnsMembershipsToEphemeralNodes() throws Exception { // Make a couple of these nodes ephemeral - include both no 'true' and a 'false' dbTester.loadData("node_1"); dbTester.loadData("node_2"); dbTester.loadData("node_3"); store.setNodeConfValue(TEST_SERVER1_NODE1_ID, Ephemeral.FIELD_NAME, "true"); store.setNodeConfValue(TEST_SERVER1_NODE2_ID, Ephemeral.FIELD_NAME, "false"); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID, true); HashSet<NodeMembership> expected = new HashSet<NodeMembership>() { { add(new NodeMembershipImpl(TEST_SERVER1_NODE1_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date())); } }; assertEquals("Incorrect number of user memberships returned", expected.size(), result.size()); assertTrue("Incorrect user memberships returned", CollectionUtils.isEqualCollection(expected, result)); } @Test public void settingEphemeralToFalseOnlyReturnsMembershipsForNonEphemeralNodes() throws Exception { // Make a couple of these nodes ephemeral - include both no 'true' and a 'false' dbTester.loadData("node_1"); dbTester.loadData("node_2"); dbTester.loadData("node_3"); store.setNodeConfValue(TEST_SERVER1_NODE1_ID, Ephemeral.FIELD_NAME, "true"); store.setNodeConfValue(TEST_SERVER1_NODE2_ID, Ephemeral.FIELD_NAME, "false"); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID, false); HashSet<NodeMembership> expected = new HashSet<NodeMembership>() { { add(new NodeMembershipImpl(TEST_SERVER1_NODE2_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.publisher, null, new Date())); add(new NodeMembershipImpl(TEST_SERVER1_NODE3_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date())); } }; assertEquals("Incorrect number of user memberships returned", expected.size(), result.size()); assertTrue("Incorrect user memberships returned", CollectionUtils.isEqualCollection(expected, result)); } @Test public void callingGetUserMembershipsWithoutFlagDefaultsToEphemeralFalse() throws Exception { // Make a couple of these nodes ephemeral - include both no 'true' and a 'false' dbTester.loadData("node_1"); dbTester.loadData("node_2"); dbTester.loadData("node_3"); store.setNodeConfValue(TEST_SERVER1_NODE1_ID, Ephemeral.FIELD_NAME, "true"); store.setNodeConfValue(TEST_SERVER1_NODE2_ID, Ephemeral.FIELD_NAME, "false"); ResultSet<NodeMembership> result = store.getUserMemberships(TEST_SERVER1_USER1_JID, false); HashSet<NodeMembership> expected = new HashSet<NodeMembership>() { { add(new NodeMembershipImpl(TEST_SERVER1_NODE2_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.publisher, null, new Date())); add(new NodeMembershipImpl(TEST_SERVER1_NODE3_ID, TEST_SERVER1_USER1_JID, Subscriptions.subscribed, Affiliations.owner, null, new Date())); } }; assertEquals("Incorrect number of user memberships returned", expected.size(), result.size()); assertTrue("Incorrect user memberships returned", CollectionUtils.isEqualCollection(expected, result)); } }