summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sleekxmpp/plugins/xep_0060/pubsub.py2
-rw-r--r--tests/test_stream_xep_0060.py98
2 files changed, 99 insertions, 1 deletions
diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py
index c0038cee..788d3397 100644
--- a/sleekxmpp/plugins/xep_0060/pubsub.py
+++ b/sleekxmpp/plugins/xep_0060/pubsub.py
@@ -120,6 +120,8 @@ class xep_0060(base_plugin):
subscribee = self.xmpp.boundjid
iq['pubsub']['subscribe']['jid'] = subscribee
+ if options is not None:
+ iq['pubsub']['options'].append(options)
return iq.send(block=block, callback=callback, timeout=timeout)
def unsubscribe(self, jid, node, subid=None, bare=True, subscribee=None,
diff --git a/tests/test_stream_xep_0060.py b/tests/test_stream_xep_0060.py
index 0ac7d9fc..9ba01468 100644
--- a/tests/test_stream_xep_0060.py
+++ b/tests/test_stream_xep_0060.py
@@ -201,7 +201,40 @@ class TestStreamPubsub(SleekTest):
""")
def testSubscribeWithOptions(self):
- pass
+ """Test subscribing to a node, with options."""
+ opts = self.xmpp['xep_0004'].make_form()
+ opts.add_field(
+ var='FORM_TYPE',
+ value='http://jabber.org/protocol/pubsub#subscribe_options',
+ ftype='hidden')
+ opts.add_field(
+ var='pubsub#digest',
+ value=False,
+ ftype='boolean')
+ opts['type'] = 'submit'
+
+ self.xmpp['xep_0060'].subscribe(
+ 'pubsub.example.com',
+ 'somenode',
+ options=opts,
+ block=False)
+ self.send("""
+ <iq type="set" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <subscribe node="somenode" jid="tester@localhost" />
+ <options>
+ <x xmlns="jabber:x:data" type="submit">
+ <field var="FORM_TYPE">
+ <value>http://jabber.org/protocol/pubsub#subscribe_options</value>
+ </field>
+ <field var="pubsub#digest">
+ <value>0</value>
+ </field>
+ </x>
+ </options>
+ </pubsub>
+ </iq>
+ """)
def testUnsubscribeCase1(self):
"""
@@ -541,6 +574,69 @@ class TestStreamPubsub(SleekTest):
</iq>
""")
+ def testGetSubscriptionOptions(self):
+ """Test getting the subscription options for a node/JID."""
+ self.xmpp['xep_0060'].get_subscription_options(
+ 'pubsub.example.com',
+ 'somenode',
+ 'tester@localhost',
+ block=False)
+ self.send("""
+ <iq type="get" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <options node="somenode" jid="tester@localhost" />
+ </pubsub>
+ </iq>
+ """, use_values=False)
+
+ def testSetSubscriptionOptions(self):
+ """Test setting the subscription options for a node/JID."""
+ opts = self.xmpp['xep_0004'].make_form()
+ opts.add_field(
+ var='FORM_TYPE',
+ value='http://jabber.org/protocol/pubsub#subscribe_options',
+ ftype='hidden')
+ opts.add_field(
+ var='pubsub#digest',
+ value=False,
+ ftype='boolean')
+ opts['type'] = 'submit'
+
+ self.xmpp['xep_0060'].set_subscription_options(
+ 'pubsub.example.com',
+ 'somenode',
+ 'tester@localhost',
+ opts,
+ block=False)
+ self.send("""
+ <iq type="get" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub">
+ <options node="somenode" jid="tester@localhost">
+ <x xmlns="jabber:x:data" type="submit">
+ <field var="FORM_TYPE">
+ <value>http://jabber.org/protocol/pubsub#subscribe_options</value>
+ </field>
+ <field var="pubsub#digest">
+ <value>0</value>
+ </field>
+ </x>
+ </options>
+ </pubsub>
+ </iq>
+ """)
+ def testGetNodeSubscriptions(self):
+ """Test retrieving the subscriptions for a node."""
+ self.xmpp['xep_0060'].get_node_subscriptions(
+ 'pubsub.example.com',
+ 'somenode',
+ block=False)
+ self.send("""
+ <iq type="get" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <subscriptions node="somenode" />
+ </pubsub>
+ </iq>
+ """)
suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamPubsub)