Skip to content

Commit 203e646

Browse files
committed
Merge pull request #132 from surevine/issue-131
If no 'notify' attribute on <item/> send notifications
2 parents 40ed7c7 + 7872ac5 commit 203e646

File tree

3 files changed

+50
-9
lines changed

3 files changed

+50
-9
lines changed

src/main/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/set/ItemDelete.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private void sendNotifications() throws NodeStoreException {
8888
String notify = request.getElement().element("pubsub")
8989
.element("retract").attributeValue("notify");
9090

91-
if (notify == null || (!notify.equals("true") && !notify.equals("1"))) {
91+
if ((notify != null) && (notify.equals("false") || notify.equals("0"))) {
9292
return;
9393
}
9494
ResultSet<NodeSubscription> subscriptions = channelManager

src/main/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/set/Publish.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ private void sendNotifications() throws NodeStoreException,
276276
msg.getElement().addAttribute("remote-server-discover", "false");
277277
msg.setType(Message.Type.headline);
278278
msg.setFrom(request.getTo());
279-
msg.getElement().addAttribute("remote-server-discover", "false");
280279
Element event = msg.addChildElement("event",
281280
JabberPubsub.NS_PUBSUB_EVENT);
282281
Element items = event.addElement("items");

src/test/java/org/buddycloud/channelserver/packetprocessor/iq/namespace/pubsub/set/ItemDeleteTest.java

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,8 @@ public void testProvidingInvalidStanzaReturnsError() throws Exception {
128128
Mockito.when(channelManagerMock.nodeExists(node)).thenReturn(true);
129129
itemDelete.setChannelManager(channelManagerMock);
130130

131-
request = toIq(readStanzaAsString(
132-
"/iq/pubsub/item/delete/request.stanza").replaceFirst(
133-
"<item id='item-id' notify='true' />", ""));
131+
IQ request = toIq(readStanzaAsString("/iq/pubsub/item/delete/request.stanza"));
132+
request.getChildElement().element("retract").element("item").detach();
134133
itemDelete.process(element, jid, request, null);
135134

136135
Packet response = queue.poll(100, TimeUnit.MILLISECONDS);
@@ -148,9 +147,9 @@ public void testNotProvidingItemIdReturnsError() throws Exception {
148147
Mockito.when(channelManagerMock.nodeExists(node)).thenReturn(true);
149148
itemDelete.setChannelManager(channelManagerMock);
150149

151-
request = toIq(readStanzaAsString(
152-
"/iq/pubsub/item/delete/request.stanza").replaceFirst(
153-
"id='item-id'", ""));
150+
IQ request = toIq(readStanzaAsString("/iq/pubsub/item/delete/request.stanza"));
151+
request.getChildElement().element("retract").element("item")
152+
.attribute("id").detach();
154153
itemDelete.process(element, jid, request, null);
155154

156155
Packet response = queue.poll(100, TimeUnit.MILLISECONDS);
@@ -348,7 +347,7 @@ public void testRequestingNotificationsSendsRetractionNotifications()
348347
itemDelete.process(element, jid, request, null);
349348

350349
Mockito.verify(channelManagerMock).deleteNodeItemById(node, "item-id");
351-
IQ response = (IQ) queue.poll(100, TimeUnit.MILLISECONDS);
350+
IQ response = (IQ) queue.poll();
352351

353352
Assert.assertEquals(IQ.Type.result.toString(), response.getElement()
354353
.attribute("type").getValue());
@@ -361,4 +360,47 @@ public void testRequestingNotificationsSendsRetractionNotifications()
361360
notification.getElement().element("event").element("items")
362361
.element("retract").attributeValue("id"));
363362
}
363+
364+
@Test
365+
public void testNoNotifyAttributeStillSendsNotifications() throws Exception {
366+
NodeAffiliation affiliation = new NodeAffiliationImpl(node, jid,
367+
Affiliations.member, new Date());
368+
369+
NodeItem nodeItem = new NodeItemImpl(node, "item-id", new Date(),
370+
payload.replaceAll("romeo@shakespeare.lit",
371+
"juliet@shakespeare.lit"));
372+
373+
IQ request = toIq(readStanzaAsString("/iq/pubsub/item/delete/request.stanza"));
374+
request.getChildElement().element("retract").element("item")
375+
.attribute("notify").detach();
376+
377+
ArrayList<NodeSubscription> subscriptions = new ArrayList<NodeSubscription>();
378+
NodeSubscriptionImpl subscription1 = new NodeSubscriptionImpl(node,
379+
new JID("romeo@shakespeare.lit"), Subscriptions.pending);
380+
NodeSubscriptionImpl subscription2 = new NodeSubscriptionImpl(node,
381+
new JID("juliet@shakespeare.lit"), Subscriptions.subscribed);
382+
subscriptions.add(subscription1);
383+
subscriptions.add(subscription2);
384+
385+
Mockito.when(channelManagerMock.isLocalNode(node)).thenReturn(true);
386+
Mockito.when(channelManagerMock.nodeExists(node)).thenReturn(true);
387+
Mockito.when(channelManagerMock.getNodeItem(node, "item-id"))
388+
.thenReturn(nodeItem);
389+
Mockito.when(
390+
channelManagerMock.getUserAffiliation(Mockito.anyString(),
391+
Mockito.any(JID.class))).thenReturn(affiliation);
392+
393+
Mockito.doReturn(new ResultSetImpl<NodeSubscription>(subscriptions))
394+
.when(channelManagerMock).getNodeSubscriptionListeners(node);
395+
396+
itemDelete.setChannelManager(channelManagerMock);
397+
398+
itemDelete.process(element, jid, request, null);
399+
400+
Mockito.verify(channelManagerMock).deleteNodeItemById(node, "item-id");
401+
402+
// Check that one notification is sent (on subscriber + 2 admins)
403+
Assert.assertEquals(4, queue.size());
404+
405+
}
364406
}

0 commit comments

Comments
 (0)