package org.buddycloud.channelserver.packetprocessor.message.event; import java.util.ArrayList; import java.util.Properties; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import junit.framework.Assert; import org.buddycloud.channelserver.Configuration; import org.buddycloud.channelserver.channel.ChannelManager; import org.buddycloud.channelserver.db.exception.NodeStoreException; import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler; import org.buddycloud.channelserver.packetprocessor.iq.namespace.pubsub.JabberPubsub; import org.buddycloud.channelserver.pubsub.affiliation.Affiliations; import org.buddycloud.channelserver.pubsub.model.NodeItem; import org.buddycloud.channelserver.pubsub.model.NodeMembership; import org.buddycloud.channelserver.pubsub.model.impl.NodeMembershipImpl; import org.buddycloud.channelserver.pubsub.subscription.Subscriptions; import org.dom4j.Element; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.xmpp.packet.JID; import org.xmpp.packet.Message; import org.xmpp.packet.Packet; import org.xmpp.resultsetmanagement.ResultSetImpl; public class ItemsProcessorTest extends IQTestHandler { private Message message; private ItemsProcessor itemsProcessor; private BlockingQueue<Packet> queue = new LinkedBlockingQueue<Packet>(); private ChannelManager channelManager; private Element entry; @Before public void setUp() throws Exception { JID jid = new JID("juliet@shakespeare.lit"); Properties configuration = new Properties(); configuration.setProperty("server.domain.channels", "channels.shakespeare.lit"); channelManager = Mockito.mock(ChannelManager.class); ArrayList<NodeMembership> members = new ArrayList<NodeMembership>(); members.add(new NodeMembershipImpl( "/users/romeo@shakespeare.lit/posts", jid, Subscriptions.subscribed, Affiliations.member, null)); Mockito.doReturn(new ResultSetImpl<NodeMembership>(members)) .when(channelManager).getNodeMemberships(Mockito.anyString()); Configuration.getInstance().remove( Configuration.CONFIGURATION_LOCAL_DOMAIN_CHECKER); Configuration.getInstance().putProperty( Configuration.CONFIGURATION_SERVER_DOMAIN, "shakespeare.lit"); itemsProcessor = new ItemsProcessor(queue, configuration, channelManager); message = new Message(); message.setType(Message.Type.headline); Element event = message.addChildElement("event", JabberPubsub.NS_PUBSUB_EVENT); Element items = event.addElement("items"); Element item = items.addElement("item"); entry = item.addElement("entry"); entry.addNamespace("thr", "http://purl.org/syndication/thread/1.0"); Element updated = entry.addElement("updated"); updated.setText("2012-10-10T08:37:02.000Z"); items.addAttribute("node", "/user/romeo@denmark.lit/posts"); item.addAttribute("id", "publish:1"); entry.addElement("thr:in-reply-to", "http://purl.org/syndication/thread/1.0").addAttribute("ref", "123455"); } @Test public void testLocalNodeEventDoesNotSendNotiifcations() throws Exception { Configuration.getInstance().putProperty( Configuration.CONFIGURATION_SERVER_DOMAIN, "denmark.lit"); itemsProcessor.process(message); Assert.assertEquals(0, queue.size()); } @Test(expected = NodeStoreException.class) public void testNodeStoreExceptionIsThrown() throws Exception { Mockito.doThrow(new NodeStoreException()).when(channelManager) .getNodeMemberships(Mockito.anyString()); itemsProcessor.process(message); } @Test(expected = NullPointerException.class) public void testConfigurationValueNotSetThrowsException() throws Exception { itemsProcessor.setConfiguration(new Properties()); itemsProcessor.process(message); } @Test public void testNotificationsAreForwarded() throws Exception { itemsProcessor.process(message); Assert.assertEquals(1, queue.size()); } @Test public void testRemoteNodeIsAddedIfNotInDatastore() throws Exception { Mockito.when(channelManager.nodeExists(Mockito.anyString())) .thenReturn(false); itemsProcessor.process(message); Mockito.verify(channelManager, Mockito.times(1)).addRemoteNode( Mockito.anyString()); } @Test public void testItemIsDeletedBeforeAttemptToInsertIntoDatabase() throws Exception { Mockito.when(channelManager.nodeExists(Mockito.anyString())) .thenReturn(false); itemsProcessor.process(message); Mockito.verify(channelManager, Mockito.times(1)).deleteNodeItemById( Mockito.anyString(), Mockito.anyString()); } @Test public void testItemsAreCachedToDatastore() throws Exception { Mockito.when(channelManager.nodeExists(Mockito.anyString())) .thenReturn(true); itemsProcessor.process(message); Mockito.verify(channelManager, Mockito.times(1)).addNodeItem( Mockito.any(NodeItem.class)); } }