Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)