summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2011-09-01 12:08:35 -0700
committerLance Stout <lancestout@gmail.com>2011-09-01 12:09:24 -0700
commit462b375c8f9ff22cdd4fe282dd90b0a5154a938c (patch)
treef170742bb85d419f9793cd17c13d4883ea700d17
parentafbd506cfc5aea6e70edc5cb6584e9d36f539965 (diff)
downloadslixmpp-462b375c8f9ff22cdd4fe282dd90b0a5154a938c.tar.gz
slixmpp-462b375c8f9ff22cdd4fe282dd90b0a5154a938c.tar.bz2
slixmpp-462b375c8f9ff22cdd4fe282dd90b0a5154a938c.tar.xz
slixmpp-462b375c8f9ff22cdd4fe282dd90b0a5154a938c.zip
Owners can modify subscriptions/affiliations. With tests.
94% coverage for the main pubsub plugin! (91% including stanzas)
-rw-r--r--sleekxmpp/plugins/xep_0060/pubsub.py8
-rw-r--r--sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py10
-rw-r--r--tests/test_stream_xep_0060.py52
3 files changed, 62 insertions, 8 deletions
diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py
index a5db137e..5a9fe70c 100644
--- a/sleekxmpp/plugins/xep_0060/pubsub.py
+++ b/sleekxmpp/plugins/xep_0060/pubsub.py
@@ -400,8 +400,8 @@ class xep_0060(base_plugin):
affiliations = []
for jid, affiliation in affiliations:
- aff = stanza.pubsub.Affiliation()
- aff['jid'] = user_jid
+ aff = self.stanza.OwnerAffiliation()
+ aff['jid'] = jid
aff['affiliation'] = affiliation
iq['pubsub_owner']['affiliations'].append(aff)
@@ -416,8 +416,8 @@ class xep_0060(base_plugin):
subscriptions = []
for jid, subscription in subscriptions:
- sub = self.stanza.Subscription()
- sub['jid'] = user_jid
+ sub = self.stanza.OwnerSubscription()
+ sub['jid'] = jid
sub['subscription'] = subscription
iq['pubsub_owner']['subscriptions'].append(sub)
diff --git a/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py b/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py
index fd8ec1f2..1fdfb738 100644
--- a/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py
+++ b/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py
@@ -41,7 +41,7 @@ registerStanzaPlugin(DefaultConfig, xep_0004.Form)
class OwnerAffiliations(Affiliations):
namespace = 'http://jabber.org/protocol/pubsub#owner'
- interfaces = set(('node'))
+ interfaces = set(('node',))
plugin_attrib_map = {}
plugin_tag_map = {}
@@ -49,7 +49,6 @@ class OwnerAffiliations(Affiliations):
if not isinstance(affiliation, OwnerAffiliation):
raise TypeError
self.xml.append(affiliation.xml)
- return self.affiliations.append(affiliation)
registerStanzaPlugin(PubsubOwner, OwnerAffiliations)
@@ -59,6 +58,8 @@ class OwnerAffiliation(Affiliation):
plugin_attrib_map = {}
plugin_tag_map = {}
+registerStanzaPlugin(OwnerAffiliations, OwnerAffiliation, iterable=True)
+
class OwnerConfigure(Configure):
name = 'configure'
plugin_attrib = 'configure'
@@ -126,7 +127,6 @@ class OwnerSubscriptions(Subscriptions):
if not isinstance(subscription, OwnerSubscription):
raise TypeError
self.xml.append(subscription.xml)
- return self.subscriptions.append(subscription)
registerStanzaPlugin(PubsubOwner, OwnerSubscriptions)
@@ -142,4 +142,6 @@ class OwnerSubscription(ElementBase):
self._setAttr('jid', str(value))
def getJid(self):
- return JID(self._getAttr('from'))
+ return JID(self._getAttr('jid'))
+
+registerStanzaPlugin(OwnerSubscriptions, OwnerSubscription, iterable=True)
diff --git a/tests/test_stream_xep_0060.py b/tests/test_stream_xep_0060.py
index b90359f9..7839d991 100644
--- a/tests/test_stream_xep_0060.py
+++ b/tests/test_stream_xep_0060.py
@@ -693,5 +693,57 @@ class TestStreamPubsub(SleekTest):
</iq>
""")
+ def testGetNodeAffiliations(self):
+ """Test getting the affiliations for a node."""
+ self.xmpp['xep_0060'].get_node_affiliations(
+ '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">
+ <affiliations node="somenode" />
+ </pubsub>
+ </iq>
+ """)
+
+ def testModifySubscriptions(self):
+ """Test owner modifying node subscriptions."""
+ self.xmpp['xep_0060'].modify_subscriptions(
+ 'pubsub.example.com',
+ 'somenode',
+ subscriptions=[('user@example.com', 'subscribed'),
+ ('foo@example.net', 'none')],
+ block=False)
+ self.send("""
+ <iq type="set" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <subscriptions node="somenode">
+ <subscription jid="user@example.com" subscription="subscribed" />
+ <subscription jid="foo@example.net" subscription="none" />
+ </subscriptions>
+ </pubsub>
+ </iq>
+ """)
+
+ def testModifyAffiliations(self):
+ """Test owner modifying node affiliations."""
+ self.xmpp['xep_0060'].modify_affiliations(
+ 'pubsub.example.com',
+ 'somenode',
+ affiliations=[('user@example.com', 'publisher'),
+ ('foo@example.net', 'none')],
+ block=False)
+ self.send("""
+ <iq type="set" id="1" to="pubsub.example.com">
+ <pubsub xmlns="http://jabber.org/protocol/pubsub#owner">
+ <affiliations node="somenode">
+ <affiliation jid="user@example.com" affiliation="publisher" />
+ <affiliation jid="foo@example.net" affiliation="none" />
+ </affiliations>
+ </pubsub>
+ </iq>
+ """)
+
suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamPubsub)