diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index 5d7bbec..d75ec91 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -331,10 +331,6 @@ class JCLComponent(Component, object): self.stream.send(info_query) return 1 - def disco_get_commands_list(): - """Return Ad-Hoc commands list""" - return None - def disco_get_info(self, node, info_query): """Discovery get info handler """ @@ -370,7 +366,8 @@ class JCLComponent(Component, object): self.account_manager.account_type_disco_get_items(from_jid, account_type), lambda name, from_jid, account_type, lang_class: \ - self.account_manager.root_disco_get_items(from_jid, + self.account_manager.root_disco_get_items(node, + from_jid, lang_class)) if result is None: lang_class = self.lang.get_lang_class_from_node(info_query.get_node()) @@ -644,6 +641,7 @@ class AccountManager(object): if not node: disco_info = DiscoInfo() disco_info.add_feature("jabber:iq:version") + disco_info.add_feature("http://jabber.org/protocol/commands") if not self.has_multiple_account_type: disco_info.add_feature("jabber:iq:register") DiscoIdentity(disco_info, name, @@ -667,27 +665,24 @@ class AccountManager(object): + " class not in account_classes") return None - def root_disco_get_items(self, from_jid, lang_class): + def root_disco_get_items(self, node, from_jid, lang_class): """Discovery get_items on root node""" + if node is not None: + return None disco_items = None if self.has_multiple_account_type: # list accounts with only one type declared - def _list_account_types(disco_items, account_class, bare_from_jid, account_type): + disco_items = DiscoItems() + for account_type in self.account_types: type_label_attr = "type_" + account_type.lower() + "_name" if hasattr(lang_class, type_label_attr): type_label = getattr(lang_class, type_label_attr) else: type_label = account_type - return DiscoItem(disco_items, - JID(unicode(self.component.jid) + "/" + - account_type), - account_type, - type_label) - disco_items = DiscoItems() - for account_type in self.account_types: - _list_account_types(disco_items, - self._get_account_class(account_type - + "Account"), - from_jid.bare(), account_type) + DiscoItem(disco_items, + JID(unicode(self.component.jid) + "/" + + account_type), + account_type, + type_label) else: disco_items = self._list_accounts(self.account_classes[0], from_jid.bare()) diff --git a/src/jcl/jabber/tests/component.py b/src/jcl/jabber/tests/component.py index 326d2a3..603c92c 100644 --- a/src/jcl/jabber/tests/component.py +++ b/src/jcl/jabber/tests/component.py @@ -568,7 +568,7 @@ class JCLComponent_TestCase(unittest.TestCase): info_query = Iq(stanza_type = "get", \ from_jid = "user1@test.com", \ to_jid = "jcl.test.com") - disco_items = self.comp.disco_get_items("unknown", info_query) + disco_items = self.comp.disco_get_items(None, info_query) self.assertEquals(len(disco_items.get_items()), 1) disco_item = disco_items.get_items()[0] self.assertEquals(disco_item.get_jid(), account1.jid) @@ -576,10 +576,33 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEquals(disco_item.get_name(), account1.long_name) def test_disco_get_items_unknown_node(self): + self.comp.account_manager.account_classes = (ExampleAccount, ) + account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL) + account11 = ExampleAccount(user_jid="user1@test.com", + name="account11", + jid="account11@jcl.test.com") + del account.hub.threadConnection info_query = Iq(stanza_type="get", from_jid="user1@test.com", to_jid="jcl.test.com") - disco_items = self.comp.disco_get_items(None, info_query) + disco_items = self.comp.disco_get_items("unknown", info_query) + self.assertEquals(disco_items, None) + + def test_disco_get_items_unknown_node_multiple_account_types(self): + self.comp.account_manager.account_classes = (ExampleAccount, Example2Account) + account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL) + account11 = ExampleAccount(user_jid="user1@test.com", + name="account11", + jid="account11@jcl.test.com") + account21 = Example2Account(user_jid="user1@test.com", + name="account21", + jid="account21@jcl.test.com") + del account.hub.threadConnection + info_query = Iq(stanza_type="get", + from_jid="user1@test.com", + to_jid="jcl.test.com") + self.comp.account_manager.has_multiple_account_type = True + disco_items = self.comp.disco_get_items("unknown", info_query) self.assertEquals(disco_items, None) def test_disco_get_items_1type_with_node(self): @@ -600,24 +623,27 @@ class JCLComponent_TestCase(unittest.TestCase): self.comp.lang = LangExample() self.comp.account_manager.account_classes = (ExampleAccount, Example2Account) account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL) - account11 = ExampleAccount(user_jid = "user1@test.com", \ - name = "account11", \ - jid = "account11@jcl.test.com") - account21 = Example2Account(user_jid = "user1@test.com", \ - name = "account21", \ - jid = "account21@jcl.test.com") + account11 = ExampleAccount(user_jid="user1@test.com", + name="account11", + jid="account11@jcl.test.com") + account21 = Example2Account(user_jid="user1@test.com", + name="account21", + jid="account21@jcl.test.com") del account.hub.threadConnection - info_query = Iq(stanza_type = "get", \ - from_jid = "user1@test.com", \ - to_jid = "jcl.test.com") + info_query = Iq(stanza_type="get", + from_jid="user1@test.com", + to_jid="jcl.test.com") disco_items = self.comp.disco_get_items(None, info_query) self.assertEquals(len(disco_items.get_items()), 2) disco_item = disco_items.get_items()[0] - self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example") + self.assertEquals(unicode(disco_item.get_jid()), + unicode(self.comp.jid) + "/Example") self.assertEquals(disco_item.get_node(), "Example") - self.assertEquals(disco_item.get_name(), LangExample.en.type_example_name) + self.assertEquals(disco_item.get_name(), + LangExample.en.type_example_name) disco_item = disco_items.get_items()[1] - self.assertEquals(unicode(disco_item.get_jid()), unicode(self.comp.jid) + "/Example2") + self.assertEquals(unicode(disco_item.get_jid()), + unicode(self.comp.jid) + "/Example2") self.assertEquals(disco_item.get_node(), "Example2") # no name in language class for type Example2, so fallback on type name self.assertEquals(disco_item.get_name(), "Example2") diff --git a/src/jcl/lang.py b/src/jcl/lang.py index c804a6d..2f57eb8 100644 --- a/src/jcl/lang.py +++ b/src/jcl/lang.py @@ -153,7 +153,7 @@ class Lang: get_gateway_desc = u"Entrer l'adresse email de votre contact" get_gateway_prompt = u"Adresse email" - command_list = u"List les comptes" + command_list = u"Liste les comptes" class nl: # TODO: when finish, delete this line and uncomment in tests/lang.py the makeSuite(Language_nl_TestCase, 'test') line