diff options
-rw-r--r-- | sleekxmpp/plugins/xep_0060/pubsub.py | 7 | ||||
-rw-r--r-- | sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py | 10 | ||||
-rw-r--r-- | tests/test_stream_xep_0060.py | 108 |
3 files changed, 111 insertions, 14 deletions
diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py index a891573e..cb6cbacd 100644 --- a/sleekxmpp/plugins/xep_0060/pubsub.py +++ b/sleekxmpp/plugins/xep_0060/pubsub.py @@ -206,7 +206,10 @@ class xep_0060(base_plugin): be executed when a reply stanza is received. """ iq = self.xmpp.Iq(sto=jid, sfrom=ifrom, stype='get') - iq['pubsub_owner']['default']['node'] = node + if node is None: + iq['pubsub_owner']['default'] + else: + iq['pubsub_owner']['configure']['node'] = node return iq.send(block=block, callback=callback, timeout=timeout) def get_node_subscriptions(self, jid, node, ifrom=None, block=True, @@ -276,7 +279,7 @@ class xep_0060(base_plugin): callback=None, timeout=None): iq = self.xmpp.Iq(sto=jid, sfrom=ifrom, stype='set') iq['pubsub_owner']['configure']['node'] = node - iq['pubsub_owner']['configure']['config'] = config + iq['pubsub_owner']['configure']['form'].values = config.values return iq.send(block=block, callback=callback, timeout=timeout) def publish(self, jid, node, item_id=None, payload=None, items=None, diff --git a/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py b/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py index 55dd59d1..570c9c4a 100644 --- a/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py +++ b/sleekxmpp/plugins/xep_0060/stanza/pubsub_owner.py @@ -63,18 +63,12 @@ class OwnerConfigure(Configure): name = 'configure' plugin_attrib = 'configure' namespace = 'http://jabber.org/protocol/pubsub#owner' - interfaces = set(('node', 'config')) + interfaces = set(('node',)) plugin_attrib_map = {} plugin_tag_map = {} - def getConfig(self): - return self['form'] - - def setConfig(self, value): - self['form'].setStanzaValues(value.getStanzaValues()) - return self - registerStanzaPlugin(PubsubOwner, OwnerConfigure) +registerStanzaPlugin(OwnerConfigure, xep_0004.Form) class OwnerDefault(OwnerConfigure): namespace = 'http://jabber.org/protocol/pubsub#owner' diff --git a/tests/test_stream_xep_0060.py b/tests/test_stream_xep_0060.py index 15ed06ce..e128eff5 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -292,32 +292,132 @@ class TestStreamPubsub(SleekTest): self.recv(""" <iq type="result" id="1" - to="foo@comp.example.com/bar" from="pubsub.example.com" /> + to="tester@localhost" from="pubsub.example.com" /> """) t.join() def testGetDefaultNodeConfig(self): - """Tes t retrieving the default config for a given node.""" + """Test retrieving the default node config for a pubsub service.""" t = threading.Thread(name='default_config', target=self.xmpp['xep_0060'].get_node_config, + args=('pubsub.example.com', None)) + t.start() + + self.send(""" + <iq type="get" id="1" to="pubsub.example.com"> + <pubsub xmlns="http://jabber.org/protocol/pubsub#owner"> + <default /> + </pubsub> + </iq> + """, use_values=False) + + self.recv(""" + <iq type="result" id="1" + to="tester@localhost" from="pubsub.example.com" /> + """) + + t.join() + + def testGetNodeConfig(self): + """Test getting the config for a given node.""" + t = threading.Thread(name='node_config', + target=self.xmpp['xep_0060'].get_node_config, args=('pubsub.example.com', 'somenode')) t.start() self.send(""" <iq type="get" id="1" to="pubsub.example.com"> <pubsub xmlns="http://jabber.org/protocol/pubsub#owner"> - <default node="somenode" /> + <configure node="somenode" /> </pubsub> </iq> """, use_values=False) self.recv(""" <iq type="result" id="1" - to="foo@comp.example.com/bar" from="pubsub.example.com" /> + to="tester@localhost" from="pubsub.example.com" /> + """) + + t.join() + + def testSetNodeConfig(self): + """Test setting the configuration for a node.""" + form = self.xmpp['xep_0004'].make_form() + form.add_field(var='FORM_TYPE', ftype='hidden', + value='http://jabber.org/protocol/pubsub#node_config') + form.add_field(var='pubsub#title', ftype='text-single', + value='This is awesome!') + form['type'] = 'submit' + + t = threading.Thread(name='set_config', + target=self.xmpp['xep_0060'].set_node_config, + args=('pubsub.example.com', 'somenode', form)) + t.start() + + self.send(""" + <iq type="set" id="1" to="pubsub.example.com"> + <pubsub xmlns="http://jabber.org/protocol/pubsub#owner"> + <configure node="somenode"> + <x xmlns="jabber:x:data" type="submit"> + <field var="FORM_TYPE"> + <value>http://jabber.org/protocol/pubsub#node_config</value> + </field> + <field var="pubsub#title"> + <value>This is awesome!</value> + </field> + </x> + </configure> + </pubsub> + </iq> + """) + + self.recv(""" + <iq type="result" id="1" + to="tester@localhost" from="pubsub.example.com" /> """) t.join() + def testPublishSingle(self): + """Test publishing a single item.""" + pass + + def testPublishSingleOptions(self): + """Test publishing a single item, with options.""" + + + def testPublishMulti(self): + """Test publishing multiple items.""" + pass + + def testPublishMultiOptions(self): + """Test publishing multiple items, with options.""" + pass + + def testRetract(self): + """Test deleting an item.""" + pass + + def testPurge(self): + """Test removing all items from a node.""" + pass + + def testGetItem(self): + """Test retrieving a single item.""" + pass + + def testGetLatestItems(self): + """Test retrieving the most recent N items.""" + pass + + def testGetAllItems(self): + """Test retrieving all items.""" + pass + + def testGetSpecificItems(self): + """Test retrieving a specific set of items.""" + pass + suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamPubsub) |