package org.buddycloud.channelserver.db.jdbc; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import java.io.IOException; import java.sql.SQLException; import java.util.Date; import org.buddycloud.channelserver.db.CloseableIterator; import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler; import org.buddycloud.channelserver.pubsub.model.NodeItem; import org.buddycloud.channelserver.pubsub.model.impl.GlobalItemIDImpl; import org.buddycloud.channelserver.pubsub.model.impl.NodeItemImpl; import org.junit.Test; public class JDBCNodeStoreUserFeedTest extends JDBCNodeStoreAbstract { public JDBCNodeStoreUserFeedTest() throws SQLException, IOException, ClassNotFoundException { dbTester = new DatabaseTester(); IQTestHandler.readConf(); } @Test public void getUserFeed() throws Exception { dbTester.loadData("node_1"); CloseableIterator<NodeItem> items = store.getUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), -1, null, false); // 2 -> 1 on purpose results are most recent first! assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a5", new Date(), "payload2"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4", new Date(), "payload"), false); assertEquals(true, items.hasNext()); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a3", new Date(), "payload"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a2", new Date(), "payload"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a1", new Date(), "payload"), false); assertEquals(false, items.hasNext()); } @Test public void specifyingNowAsSinceDateRetunsNoItems() throws Exception { dbTester.loadData("node_1"); CloseableIterator<NodeItem> items = store.getUserFeedItems(TEST_SERVER1_USER1_JID, new Date(), -1, null, false); assertEquals(false, items.hasNext()); } @Test public void testGetUserFeedCanBePaged() throws Exception { dbTester.loadData("node_1"); CloseableIterator<NodeItem> items = store.getUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), 2, null, false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a5", new Date(), "payload2"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4", new Date(), "payload"), false); assertFalse(items.hasNext()); items = store.getUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), 2, new GlobalItemIDImpl(TEST_SERVER1_CHANNELS_JID, TEST_SERVER1_NODE1_ID, "a3"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a2", new Date(), "payload2"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a1", new Date(), "payload"), false); assertFalse(items.hasNext()); } @Test public void settingParentOnlyOnlyReturnsThreadParentsForGetUserFeed() throws Exception { dbTester.loadData("node_1"); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a5-1", new Date(), "payload-a5-1", "a5")); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4-1", new Date(), "payload-a4-1", "a4")); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4-2", new Date(), "payload-a4-2", "a4")); CloseableIterator<NodeItem> items = store.getUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), -1, null, true); // 2 -> 1 on purpose results are most recent first! assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a5", new Date(), "payload2"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4", new Date(), "payload"), false); assertEquals(true, items.hasNext()); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a3", new Date(), "payload"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a2", new Date(), "payload"), false); assertSameNodeItem(items.next(), new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a1", new Date(), "payload"), false); assertEquals(false, items.hasNext()); } @Test public void getUserFeedItemCount() throws Exception { dbTester.loadData("node_1"); int itemCount = store.getCountUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), true); assertEquals(5, itemCount); } @Test public void getZeroUserFeedCountIfSinceDateIsSetToNow() throws Exception { dbTester.loadData("node_1"); int itemCount = store.getCountUserFeedItems(TEST_SERVER1_USER1_JID, new Date(), true); assertEquals(0, itemCount); } @Test public void settingParentOnlyReturnsThreadParentsForGetUserFeedCount() throws Exception { dbTester.loadData("node_1"); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a5-1", new Date(), "payload-a5-1", "a5")); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4-1", new Date(), "payload-a4-1", "a4")); store.addNodeItem(new NodeItemImpl(TEST_SERVER1_NODE1_ID, "a4-2", new Date(), "payload-a4-2", "a4")); assertEquals(5, store.getCountUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), true)); assertEquals(8, store.getCountUserFeedItems(TEST_SERVER1_USER1_JID, new Date(0), false)); } }