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)
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')
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')
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)
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)