@Test public void testPassingValidSubscriptionSendsOutExpectedNotifications() throws Exception { IQ request = toIq( readStanzaAsString("/iq/pubsub/subscribe/authorizationPendingGrantReply.stanza") .replaceFirst("subscription='subscribed'", "subscription='subscribed'")); NodeAffiliation subscriptionMockActor = Mockito.mock(NodeAffiliation.class); Mockito.when(subscriptionMockActor.getAffiliation()).thenReturn(Affiliations.owner); NodeSubscription subscriptionMockSubscriber = Mockito.mock(NodeSubscription.class); Mockito.when(subscriptionMockSubscriber.getSubscription()).thenReturn(Subscriptions.subscribed); Mockito.when(dataStore.nodeExists(node)).thenReturn(true); Mockito.when(dataStore.getUserAffiliation(node, jid)).thenReturn(subscriptionMockActor); Mockito.when(dataStore.getUserSubscription(node, new JID(subscriber))) .thenReturn(subscriptionMockSubscriber); event.setChannelManager(dataStore); ArrayList<NodeSubscription> subscribers = new ArrayList<NodeSubscription>(); subscribers.add(new NodeSubscriptionMock(new JID("*****@*****.**"))); subscribers.add(new NodeSubscriptionMock(new JID("*****@*****.**"))); Mockito.doReturn(new ResultSetImpl<NodeSubscription>(subscribers)) .when(dataStore) .getNodeSubscriptionListeners(Mockito.anyString()); event.setChannelManager(dataStore); event.process(element, jid, request, null); Assert.assertEquals(2, queue.size()); Packet notification = queue.poll(100, TimeUnit.MILLISECONDS); Assert.assertEquals("*****@*****.**", notification.getTo().toString()); notification = queue.poll(100, TimeUnit.MILLISECONDS); Assert.assertEquals("*****@*****.**", notification.getTo().toString()); Assert.assertEquals( node, notification.getElement().element("event").element("subscription").attributeValue("node")); Assert.assertTrue(notification.toXML().contains(JabberPubsub.NS_PUBSUB_EVENT)); Assert.assertEquals( "subscribed", notification .getElement() .element("event") .element("subscription") .attributeValue("subscription")); Assert.assertEquals( subscriber, notification.getElement().element("event").element("subscription").attributeValue("jid")); }
private void addDeleteNodeNotifications(String node, List<Packet> notifications) throws Exception { ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node); Message notification = createNodeDeletedNotificationMessage(node); if (subscriptions != null) { for (NodeSubscription subscription : subscriptions) { notification.setTo(subscription.getListener().toString()); notifications.add(notification.createCopy()); } } Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers(); for (JID admin : adminUsers) { notification.setTo(admin); notifications.add(notification.createCopy()); } }
private void addDeleteItemNotifications(String node, String itemId, List<Packet> notifications) throws NodeStoreException { ResultSet<NodeSubscription> subscriptions = channelManager.getNodeSubscriptionListeners(node); Message notification = createItemDeleteNotificationMessage(node, itemId); if (subscriptions != null) { for (NodeSubscription subscription : subscriptions) { if (subscription.getSubscription().equals(Subscriptions.subscribed)) { notification.setTo(subscription.getListener().toString()); notifications.add(notification); } } } Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers(); for (JID admin : adminUsers) { notification.setTo(admin); notifications.add(notification); } }
private void notifySubscribers(HashMap<String, String> configuration) throws NodeStoreException, InterruptedException { ResultSet<NodeSubscription> subscribers = channelManager.getNodeSubscriptionListeners(node); Document document = getDocumentHelper(); Element message = document.addElement("message"); message.addAttribute("remote-server-discover", "false"); Element event = message.addElement("event"); Element configurationElement = event.addElement("configuration"); configurationElement.addAttribute("node", node); event.addNamespace("", Event.NAMESPACE); message.addAttribute("from", request.getTo().toString()); message.addAttribute("type", "headline"); Message rootElement = new Message(message); Element dataForm = configurationElement.addElement("x"); dataForm.addAttribute("type", "result"); dataForm.addNamespace("", DataForm.NAMESPACE); DataForm df = new DataForm(dataForm); FormField field; for (Map.Entry<String, String> entry : configuration.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); field = df.addField(key, null, null); field.addValue(value); // ... } for (NodeSubscription subscriber : subscribers) { Message notification = rootElement.createCopy(); notification.setTo(subscriber.getListener()); outQueue.put(notification); } Collection<JID> admins = getAdminUsers(); for (JID admin : admins) { Message notification = rootElement.createCopy(); notification.setTo(admin); outQueue.put(notification); } }
private void addUnsubscribeFromNodeNotifications( JID userJid, String node, List<Packet> notifications) throws NodeStoreException { ResultSet<NodeSubscription> subscribers = channelManager.getNodeSubscriptionListeners(node); Message messagePacket = createUnsubscribeNotification(userJid, node); if (subscribers != null) { for (NodeSubscription subscriber : subscribers) { Message notification = messagePacket.createCopy(); notification.setTo(subscriber.getListener()); notifications.add(notification); } } Collection<JID> adminUsers = Configuration.getInstance().getAdminUsers(); for (JID admin : adminUsers) { Message notification = messagePacket.createCopy(); notification.setTo(admin); notifications.add(notification); } }
@Test @Ignore("Need to work out how to check set subscription values") public void testPassingInvalidSubscriptionTypeSetsSubscriptionToNone() throws Exception { IQ request = toIq( readStanzaAsString("/iq/pubsub/subscribe/authorizationPendingGrantReply.stanza") .replaceFirst( "subscription='subscribed'", "subscription='i-can-haz-all-the-items'")); NodeAffiliation subscriptionMockActor = Mockito.mock(NodeAffiliation.class); Mockito.when(subscriptionMockActor.getAffiliation()).thenReturn(Affiliations.owner); NodeSubscription subscriptionMockSubscriber = Mockito.mock(NodeSubscription.class); Mockito.when(subscriptionMockSubscriber.getSubscription()).thenReturn(Subscriptions.subscribed); Mockito.when(dataStore.nodeExists(node)).thenReturn(true); Mockito.when(dataStore.getUserAffiliation(node, jid)).thenReturn(subscriptionMockActor); Mockito.doCallRealMethod() .when(dataStore) .addUserSubscription(Mockito.any(NodeSubscription.class)); Mockito.when(dataStore.getUserSubscription(node, new JID(subscriber))) .thenReturn(subscriptionMockSubscriber); event.setChannelManager(dataStore); event.process(element, jid, request, null); NodeSubscription subscriptionMock = new NodeSubscriptionImpl( node, new JID("*****@*****.**"), new JID("*****@*****.**"), Subscriptions.none); /* * subscriptionMock Mockito.anyString(), Mockito.any(JID.class), * Mockito.any(JID.class), Mockito.eq(Subscriptions.none)); */ Mockito.verify(dataStore).addUserSubscription(subscriptionMock); }