diff --git a/sleekxmpp/roster/item.py b/sleekxmpp/roster/item.py index c27f7a78..4f4663d3 100644 --- a/sleekxmpp/roster/item.py +++ b/sleekxmpp/roster/item.py @@ -345,9 +345,10 @@ class RosterItem(object): self.xmpp.event('got_online', presence) if resource not in self.resources: self.resources[resource] = {} + old_status = self.resources[resource].get('status', '') old_show = self.resources[resource].get('show', None) self.resources[resource].update(data) - if old_show != presence['show']: + if old_show != presence['show'] or old_status != presence['status']: self.xmpp.event('changed_status', presence) def handle_unavailable(self, presence): diff --git a/tests/test_stream_presence.py b/tests/test_stream_presence.py index b7e6229c..63ccb043 100644 --- a/tests/test_stream_presence.py +++ b/tests/test_stream_presence.py @@ -337,13 +337,44 @@ class TestStreamPresence(SleekTest): """) + self.recv(""" + + """) + + # Changed status text, so fire new event + self.recv(""" + + Testing! + + """) + + # No change in show/status values, no event + self.recv(""" + + Testing! + + """) + + self.recv(""" + + dnd + Testing! + + """) + + self.recv(""" + + dnd + Testing! + + """) time.sleep(0.3) self.assertEqual(events, ['available', 'away', 'dnd', 'chat', - 'xa', 'unavailable', 'available'], + 'xa', 'unavailable', 'available', + 'available', 'dnd'], "Changed status events incorrect: %s" % events) - suite = unittest.TestLoader().loadTestsFromTestCase(TestStreamPresence)