def test_remove_item(self): event_queue = Queue() settings = XMPPSettings() settings["event_queue"] = event_queue client = RosterClient(settings) processor = Processor([client]) item1 = RosterItem(JID("*****@*****.**")) item2 = RosterItem(JID("*****@*****.**")) client.roster = Roster([item1, item2]) # simple remove client.remove_item(JID("*****@*****.**")) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertIsNone(item.name) self.assertEqual(item.subscription, "remove") self.assertFalse(item.approved) self.assertFalse(item.groups) response = stanza.make_result_response() processor.uplink_receive(response) self.assertEqual(len(client.roster), 2) # not added yet, push needed # missing processor.stanzas_sent = [] with self.assertRaises(KeyError): client.remove_item(JID("*****@*****.**")) self.assertEqual(len(processor.stanzas_sent), 0) def callback(item): callback_calls.append(item) def error_callback(stanza): error_callback_calls.append(stanza) # callback processor.stanzas_sent = [] callback_calls = [] error_callback_calls = [] client.remove_item(JID("*****@*****.**"), callback = callback, error_callback = error_callback) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) response = stanza.make_result_response() processor.uplink_receive(response) self.assertEqual(len(callback_calls), 1) self.assertEqual(callback_calls[0].jid, JID("*****@*****.**")) self.assertEqual(len(error_callback_calls), 0) # error callback processor.stanzas_sent = [] callback_calls = [] error_callback_calls = [] client.remove_item(JID("*****@*****.**"), callback = callback, error_callback = error_callback) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) response = stanza.make_error_response("not-acceptable") processor.uplink_receive(response) self.assertEqual(len(callback_calls), 0) self.assertEqual(len(error_callback_calls), 1) stanza = error_callback_calls[0] self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_id, response.stanza_id)
def test_update_item(self): event_queue = Queue() settings = XMPPSettings() settings["event_queue"] = event_queue client = RosterClient(settings) processor = Processor([client]) item1 = RosterItem(JID("*****@*****.**"), "ITEM1") item2 = RosterItem(JID("*****@*****.**"), groups = [ "GROUP1", "GROUP2"]) client.roster = Roster([item1, item2]) # update name client.update_item(JID("*****@*****.**"), "NEW_NAME") self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertEqual(item.name, "NEW_NAME") self.assertEqual(item.groups, set(["GROUP1", "GROUP2"])) self.assertIsNone(item.subscription) self.assertFalse(item.approved) response = stanza.make_result_response() processor.uplink_receive(response) # update groups processor.stanzas_sent = [] client.update_item(JID("*****@*****.**"), groups = ["GROUP3"]) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertIsNone(item.name) self.assertEqual(item.groups, set(["GROUP3"])) self.assertIsNone(item.subscription) self.assertFalse(item.approved) response = stanza.make_result_response() processor.uplink_receive(response) # clear name processor.stanzas_sent = [] client.update_item(JID("*****@*****.**"), name = None) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertIsNone(item.name) self.assertEqual(item.groups, set([])) self.assertIsNone(item.subscription) self.assertFalse(item.approved) response = stanza.make_result_response() processor.uplink_receive(response) # clear groups processor.stanzas_sent = [] client.update_item(JID("*****@*****.**"), groups = None) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertIsNone(item.name) self.assertEqual(item.groups, set([])) self.assertIsNone(item.subscription) self.assertFalse(item.approved) response = stanza.make_result_response() processor.uplink_receive(response) # missing item processor.stanzas_sent = [] with self.assertRaises(KeyError): client.update_item(JID("*****@*****.**"), name = "NEW_NAME") self.assertEqual(len(processor.stanzas_sent), 0) def callback(item): callback_calls.append(item) def error_callback(stanza): error_callback_calls.append(stanza) # callback processor.stanzas_sent = [] callback_calls = [] error_callback_calls = [] client.update_item(JID("*****@*****.**"), name = "NEW_NAME", callback = callback, error_callback = error_callback) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) self.assertEqual(item.name, "NEW_NAME") response = stanza.make_result_response() processor.uplink_receive(response) self.assertEqual(len(callback_calls), 1) self.assertEqual(callback_calls[0].jid, JID("*****@*****.**")) self.assertEqual(len(error_callback_calls), 0) # error callback processor.stanzas_sent = [] callback_calls = [] error_callback_calls = [] client.update_item(JID("*****@*****.**"), name = "NEW_NAME", callback = callback, error_callback = error_callback) self.assertEqual(len(processor.stanzas_sent), 1) stanza = processor.stanzas_sent[0] payload = stanza.get_payload(RosterPayload) self.assertIsNotNone(payload) self.assertEqual(len(payload), 1) item = payload[0] self.assertEqual(item.jid, JID("*****@*****.**")) response = stanza.make_error_response("not-acceptable") processor.uplink_receive(response) self.assertEqual(len(callback_calls), 0) self.assertEqual(len(error_callback_calls), 1) stanza = error_callback_calls[0] self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_id, response.stanza_id)