Пример #1
0
    def test_get_photo_mime_type(self):
        vcard = vcard_xso.VCard()
        vcard.elements.append(
            lxml.etree.fromstring("""
<ns0:PHOTO xmlns:ns0="vcard-temp"><ns0:TYPE>image/png</ns0:TYPE></ns0:PHOTO>
            """))
        self.assertEqual(vcard.get_photo_mime_type(), 'image/png')

        vcard = vcard_xso.VCard()
        vcard.elements.append(
            lxml.etree.fromstring("""
<ns0:PHOTO xmlns:ns0="vcard-temp"></ns0:PHOTO>
            """))
        self.assertEqual(vcard.get_photo_mime_type(), None)
Пример #2
0
    def test_get_photo_data(self):
        vcard = vcard_xso.VCard()
        vcard.elements.append(
            lxml.etree.fromstring("""
<ns0:PHOTO xmlns:ns0="vcard-temp"><ns0:BINVAL>Zm9vCg==</ns0:BINVAL></ns0:PHOTO>
            """))
        self.assertEqual(vcard.get_photo_data(), b'foo\n')
Пример #3
0
    def test_set_photo_data(self):
        vcard = vcard_xso.VCard()
        vcard.elements.append(
            lxml.etree.fromstring("""
<ns0:PHOTO xmlns:ns0="vcard-temp"><ns0:BINVAL>Zm9vCg==</ns0:BINVAL></ns0:PHOTO>
            """))
        vcard.set_photo_data("image/png", b'bar')
        self.assertEqual(vcard.get_photo_data(), b'bar')

        vcard.clear_photo_data()
        vcard.set_photo_data("image/png", b'quux')
        self.assertEqual(vcard.get_photo_data(), b'quux')
Пример #4
0
    def test_set_vcard(self):
        with unittest.mock.patch.object(self.cc, "send",
                                        new=CoroutineMock()) as mock_send:
            vcard = vcard_xso.VCard()
            run_coroutine(self.s.set_vcard(vcard))

        self.assertEqual(len(mock_send.mock_calls), 1)
        try:
            (_, (arg, ), kwargs), = mock_send.mock_calls
        except ValueError:
            self.fail("send called with wrong signature")
        self.assertEqual(len(kwargs), 0)
        self.assertIsInstance(arg, aioxmpp.IQ)
        self.assertEqual(arg.type_, aioxmpp.IQType.SET)
        self.assertEqual(arg.to, None)
        self.assertIs(arg.payload, vcard)
Пример #5
0
    def test_trigger_rehash(self):
        mock_handler = unittest.mock.Mock()
        self.s.on_metadata_changed.connect(mock_handler)

        stanza = aioxmpp.Presence()
        stanza.xep0153_x = avatar_xso.VCardTempUpdate("1234")
        self.s._handle_on_available(TEST_FROM_OTHER, stanza)

        first_rehash_task = self.s._vcard_rehash_task
        self.assertIsNot(first_rehash_task, None)

        # presence with the same hash does not affect the rehash task
        self.s._vcard_id = "1234"
        stanza = aioxmpp.Presence()
        stanza.xep0153_x = avatar_xso.VCardTempUpdate("1234")
        self.s._handle_on_available(TEST_FROM_OTHER, stanza)
        self.assertIs(self.s._vcard_rehash_task, first_rehash_task)

        # presence with another hash cancels the task
        stanza = aioxmpp.Presence()
        stanza.xep0153_x = avatar_xso.VCardTempUpdate("4321")
        self.s._handle_on_available(TEST_FROM_OTHER, stanza)

        with unittest.mock.patch.object(self.vcard, "get_vcard",
                                        new=CoroutineMock()):
            vcard = vcard_xso.VCard()
            self.vcard.get_vcard.return_value = vcard
            vcard.set_photo_data("image/png", TEST_IMAGE)

            loop = asyncio.get_event_loop()
            with self.assertRaises(asyncio.CancelledError):
                loop.run_until_complete(first_rehash_task)
            self.assertTrue(first_rehash_task.cancelled())

            loop.run_until_complete(
                self.s._vcard_rehash_task
            )

        self.assertEqual(self.s._vcard_id, TEST_IMAGE_SHA1)

        with contextlib.ExitStack() as stack:
            stack.enter_context(
                unittest.mock.patch.object(self.vcard, "get_vcard",
                                           new=CoroutineMock())
            )

            resend_presence = stack.enter_context(
                unittest.mock.patch.object(
                    self.presence_server,
                    "resend_presence",
                )
            )

            vcard = vcard_xso.VCard()
            self.vcard.get_vcard.return_value = vcard

            stanza = aioxmpp.Presence()
            stanza.xep0153_x = avatar_xso.VCardTempUpdate("9132752")
            self.s._handle_on_available(TEST_FROM_OTHER, stanza)

            loop.run_until_complete(
                self.s._vcard_rehash_task
            )

        resend_presence.assert_called_once_with()

        self.assertEqual(self.s._vcard_id, "")

        # XXX: should we test minutely that we get the right metadata
        mock_handler.assert_called_with(TEST_FROM_OTHER.bare(),
                                        unittest.mock.ANY)