package org.buddycloud.channelserver.packetprocessor.iq.namespace.pubsub.result; import junit.framework.Assert; import org.buddycloud.channelserver.channel.ChannelManager; import org.buddycloud.channelserver.packetHandler.iq.IQTestHandler; import org.buddycloud.channelserver.pubsub.affiliation.Affiliations; import org.dom4j.Element; import org.dom4j.tree.BaseElement; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.xmpp.packet.IQ; import org.xmpp.packet.JID; public class AffiliationsResultTest extends IQTestHandler { private IQ resultWithNode; private IQ resultNoNode; private AffiliationsResult affiliationsResult; private Element element; private String node = "/user/pamela@denmark.lit/posts"; private JID jid = new JID("juliet@shakespeare.lit"); private ChannelManager channelManager; @Before public void setUp() throws Exception { channelManager = Mockito.mock(ChannelManager.class); affiliationsResult = new AffiliationsResult(channelManager); resultWithNode = readStanzaAsIq("/iq/pubsub/affiliations/reply-with-node.stanza"); resultNoNode = readStanzaAsIq("/iq/pubsub/affiliations/reply-no-node.stanza"); element = new BaseElement("affiliations"); element.addAttribute("node", node); affiliationsResult.setChannelManager(channelManager); affiliationsResult.setNode(node); } @Test public void testPassingAffiliationsAsElementNameReturnsTrue() { Assert.assertTrue(affiliationsResult.accept(element)); } @Test public void testPassingNotAffiliationsAsElementNameReturnsFalse() { Element element = new BaseElement("not-affiliations"); Assert.assertFalse(affiliationsResult.accept(element)); } @Test(expected = NullPointerException.class) public void testInvalidStanzaThrowsException() throws Exception { IQ result = toIq("<iq type=\"result\" id=\"affiliations1\" " + "from=\"channels.shakespeare.lit\" " + "to=\"channels.denmark.lit\">" + "<pubsub xmlns=\"http://jabber.org/protocol/pubsub#owner\" />" + "</iq>"); affiliationsResult.process(element, jid, result, null); } @Test public void testNoAffiliationsCausesNoDatastoreInsert() throws Exception { IQ result = toIq("<iq type=\"result\" id=\"affiliations1\" " + "from=\"channels.shakespeare.lit\" " + "to=\"channels.denmark.lit\">" + "<pubsub xmlns=\"http://jabber.org/protocol/pubsub#owner\">" + "<affiliations />" + "</pubsub>" + "</iq>"); affiliationsResult.process(element, jid, result, null); Mockito.verify(channelManager, Mockito.times(0)).setUserAffiliation(Mockito.anyString(), Mockito.any(JID.class), Mockito.any(Affiliations.class)); } @Test public void testOwnerAffiliationsResultStanzaHandledCorrectly() throws Exception { element = new BaseElement("affiliations"); affiliationsResult.setNode(null); affiliationsResult.process(element, jid, resultNoNode, null); Mockito.verify(channelManager, Mockito.times(1)).setUserAffiliation(Mockito.eq("/user/pamela@denmark.lit/posts"), Mockito.any(JID.class), Mockito.any(Affiliations.class)); Mockito.verify(channelManager, Mockito.times(1)).setUserAffiliation(Mockito.eq("/user/francisco@denmark.lit/posts"), Mockito.any(JID.class), Mockito.any(Affiliations.class)); } @Test public void testNodeAffiliationsResultStanzaHandledCorrectly() throws Exception { affiliationsResult.process(element, jid, resultWithNode, null); Mockito.verify(channelManager, Mockito.times(2)).setUserAffiliation(Mockito.eq(node), Mockito.any(JID.class), Mockito.any(Affiliations.class)); } }