diff --git a/sleekxmpp/plugins/xep_0060/pubsub.py b/sleekxmpp/plugins/xep_0060/pubsub.py index a891573..cb6cbac 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 55dd59d..570c9c4 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 15ed06c..e128eff 100644 --- a/tests/test_stream_xep_0060.py +++ b/tests/test_stream_xep_0060.py @@ -292,14 +292,36 @@ class TestStreamPubsub(SleekTest): self.recv(""" + 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(""" + + + + + + """, use_values=False) + + self.recv(""" + + """) + + 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() @@ -307,17 +329,95 @@ class TestStreamPubsub(SleekTest): self.send(""" - + """, use_values=False) self.recv(""" + 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(""" + + + + + + http://jabber.org/protocol/pubsub#node_config + + + This is awesome! + + + + + + """) + + self.recv(""" + + """) + + 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)