From a15d5d2e67bab1c2900da922c733154471c7d6c0 Mon Sep 17 00:00:00 2001 From: David Rousselie Date: Sat, 16 Jun 2007 22:37:04 +0200 Subject: [PATCH] Return correct presence type when handling presence "available" darcs-hash:20070616203704-86b55-a350a840d998323a9e793223a68a414adfd79888.gz --- src/jcl/jabber/component.py | 17 ++++--- src/jcl/jabber/tests/component.py | 73 +++++++++++++++++++++---------- 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/src/jcl/jabber/component.py b/src/jcl/jabber/component.py index d0f8216..7de2c86 100644 --- a/src/jcl/jabber/component.py +++ b/src/jcl/jabber/component.py @@ -270,8 +270,10 @@ class JCLComponent(Component, object): lang = self.lang.get_lang_class_from_node(stanza.get_node()) for handler in handlers: try: + self.__logger.debug("Applying filter " + repr(handler)) accounts = handler.filter(stanza, lang) if accounts is not None: + self.__logger.debug("Applying handler " + repr(handler)) result += handler.handle(stanza, lang, accounts) if not apply_all: break @@ -906,6 +908,7 @@ class AccountManager(object): ###### presence_available handlers ###### def account_handle_presence_available(self, name, from_jid, lang_class, show): """Handle presence \"available\" sent to an account JID""" + self.__logger.debug("Account handle presence available") return self.account_handle_presence(\ name, from_jid, lambda _account: \ @@ -915,6 +918,7 @@ class AccountManager(object): def root_handle_presence_available(self, from_jid, lang_class, show): """Handle presence \"available\" sent to component JID""" + self.__logger.debug("Root handle presence available") return self.root_handle_presence(\ from_jid, lambda _account: \ @@ -922,13 +926,14 @@ class AccountManager(object): show, lang_class), lambda nb_accounts: \ - self._send_root_presence(from_jid, show, + self._send_root_presence(from_jid, "available", show, str(nb_accounts) + lang_class.message_status)) ###### presence_unavailable handlers ###### def account_handle_presence_unavailable(self, name, from_jid): """Handle presence \"unavailable\" sent to an account JID""" + self.__logger.debug("Account handle presence available") return self.account_handle_presence(\ name, from_jid, lambda _account: \ @@ -936,12 +941,13 @@ class AccountManager(object): def root_handle_presence_unavailable(self, from_jid): """Handle presence \"unavailable\" sent to component JID""" + self.__logger.debug("Root handle presence available") return self.root_handle_presence(\ from_jid, lambda _account: \ self._send_presence_unavailable(_account), lambda nb_accounts: \ - self._send_root_presence(from_jid)) + self._send_root_presence(from_jid, "unavailable")) ###### presence_subscribe handlers ###### def account_handle_presence_subscribe(self, name, from_jid, stanza): @@ -1124,12 +1130,13 @@ class AccountManager(object): to_jid=_account.user_jid, stanza_type="unavailable")] - def _send_root_presence(self, to_jid, show=None, status=None): + def _send_root_presence(self, to_jid, presence_type, + show=None, status=None): result = self._send_presence(self.component.jid, to_jid, - "unavailable", show=show, + presence_type, show=show, status=status) result.extend(self._send_root_presence_legacy(to_jid, - "unavailable", + presence_type, show=show, status=status)) return result diff --git a/src/jcl/jabber/tests/component.py b/src/jcl/jabber/tests/component.py index bc5fa97..6059a49 100644 --- a/src/jcl/jabber/tests/component.py +++ b/src/jcl/jabber/tests/component.py @@ -1455,25 +1455,29 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(len(presence_sent), 3) self.assertEqual(len([presence \ for presence in presence_sent \ - if presence.get_to_jid() == "user1@test.com"]), \ + if presence.get_to_jid() == "user1@test.com" \ + and presence.get_type() is None]), \ 3) self.assertEqual(len([presence \ for presence in presence_sent \ if presence.get_from_jid() == \ "jcl.test.com" \ - and isinstance(presence, Presence)]), \ + and isinstance(presence, Presence) \ + and presence.get_type() is None]), \ 1) self.assertEqual(len([presence \ for presence in presence_sent \ if presence.get_from_jid() == \ "account11@jcl.test.com" \ - and isinstance(presence, Presence)]), \ + and isinstance(presence, Presence) \ + and presence.get_type() is None]), \ 1) self.assertEqual(len([presence \ for presence in presence_sent \ if presence.get_from_jid() == \ "account12@jcl.test.com" \ - and isinstance(presence, Presence)]), \ + and isinstance(presence, Presence) \ + and presence.get_type() is None]), \ 1) def test_handle_presence_available_to_component_legacy_users(self): @@ -1513,49 +1517,57 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(len(presence_sent), 7) self.assertEqual(len([presence for presence in presence_sent - if presence.get_to_jid() == "user1@test.com"]), + if presence.get_to_jid() == "user1@test.com" \ + and presence.get_type() is None]), 7) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "account11@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "account12@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u111%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u112%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u121%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u122%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() is None]), 1) def test_handle_presence_available_to_component_unknown_user(self): @@ -1602,6 +1614,7 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(presence_sent[0].get_to(), "user1@test.com") self.assertEqual(presence_sent[0].get_from(), "account11@jcl.test.com") self.assertTrue(isinstance(presence_sent[0], Presence)) + self.assertEqual(presence_sent[0].get_type(), None) def test_handle_presence_available_to_registered_handlers(self): self.comp.stream = MockStream() @@ -1627,6 +1640,7 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(presence_sent[0].get_to(), "user1@test.com") self.assertEqual(presence_sent[0].get_from(), "user1%test.com@jcl.test.com") self.assertTrue(isinstance(presence_sent[0], Presence)) + self.assertEqual(presence_sent[0].get_type(), None) def test_handle_presence_available_to_account_unknown_user(self): self.comp.stream = MockStream() @@ -1696,6 +1710,7 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertTrue(isinstance(presence, Presence)) self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com") self.assertEqual(presence.get_to_jid(), "user1@test.com") + self.assertEqual(presence.get_type(), None) def test_handle_presence_available_to_account_live_password_complex(self): account.hub.threadConnection = connectionForURI('sqlite://' + DB_URL) @@ -1730,6 +1745,7 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertTrue(isinstance(presence, Presence)) self.assertEqual(presence.get_from_jid(), "account11@jcl.test.com") self.assertEqual(presence.get_to_jid(), "user1@test.com") + self.assertEqual(presence.get_type(), None) self.assertEqual(unicode(password_message.get_from_jid()), \ "account11@jcl.test.com") @@ -1762,7 +1778,8 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(len(presence_sent), 3) self.assertEqual(len([presence \ for presence in presence_sent \ - if presence.get_to_jid() == "user1@test.com"]), \ + if presence.get_to_jid() == "user1@test.com" \ + and presence.get_type() == "unavailable"]), \ 3) self.assertEqual(\ len([presence \ @@ -1826,49 +1843,57 @@ class JCLComponent_TestCase(unittest.TestCase): self.assertEqual(len(presence_sent), 7) self.assertEqual(len([presence for presence in presence_sent - if presence.get_to_jid() == "user1@test.com"]), + if presence.get_to_jid() == "user1@test.com" \ + and presence.get_type() == "unavailable"]), 7) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "account11@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "account12@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u111%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u112%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u121%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) self.assertEqual(len([presence for presence in presence_sent if presence.get_from_jid() == \ "u122%test.com@jcl.test.com" - and isinstance(presence, Presence)]), + and isinstance(presence, Presence) \ + and presence.get_type() == "unavailable"]), 1) def test_handle_presence_unavailable_to_component_unknown_user(self): @@ -2432,9 +2457,9 @@ class DefaultSubscribeHandler_TestCase(unittest.TestCase): self.handler = DefaultSubscribeHandler() def test_handle(self): - presence = Presence(from_jid = "user1@test.com", \ - to_jid = "user1%test.com@jcl.test.com", \ - stanza_type = "subscribe") + presence = Presence(from_jid="user1@test.com", + to_jid="user1%test.com@jcl.test.com", + stanza_type="subscribe") result = self.handler.handle(presence, None, []) self.assertEquals(len(result), 2) self.assertEquals(result[0].get_to(), "user1@test.com")