def test_get_image_bytes(self): descriptor = avatar_service.PubsubAvatarDescriptor( TEST_JID1, "image/png", TEST_IMAGE_SHA1.upper(), len(TEST_IMAGE), pubsub=self.pubsub) self.assertTrue(descriptor.has_image_data_in_pubsub) self.assertEqual(TEST_IMAGE_SHA1, descriptor.normalized_id) items = pubsub_xso.Items(namespaces.xep0084_data, ) item = pubsub_xso.Item(id_=TEST_IMAGE_SHA1) item.registered_payload = avatar_xso.Data(TEST_IMAGE) items.items.append(item) pubsub_result = pubsub_xso.Request(items) with unittest.mock.patch.object(self.pubsub, "get_items_by_id", new=CoroutineMock()): self.pubsub.get_items_by_id.return_value = pubsub_result res = run_coroutine(descriptor.get_image_bytes()) self.assertSequenceEqual(self.pubsub.get_items_by_id.mock_calls, [ unittest.mock.call( TEST_JID1, namespaces.xep0084_data, [TEST_IMAGE_SHA1.upper()], ) ]) self.assertEqual(res, TEST_IMAGE)
def test_get_avatar_metadata_with_require_fresh_does_not_crash(self): aset = avatar_service.AvatarSet() aset.add_avatar_image("image/png", image_bytes=TEST_IMAGE) aset.add_avatar_image("image/png", nbytes=0, id_="00000000000000000000", url="http://example.com/avatar") # construct the proper pubsub response items = pubsub_xso.Items(namespaces.xep0084_metadata, ) item = pubsub_xso.Item(id_=aset.png_id) item.registered_payload = aset.metadata items.items.append(item) pubsub_result = pubsub_xso.Request(items) with unittest.mock.patch.object(self.pubsub, "get_items", new=CoroutineMock()): self.pubsub.get_items.return_value = pubsub_result run_coroutine( self.s.get_avatar_metadata(TEST_JID1, require_fresh=True)) self.assertSequenceEqual(self.pubsub.get_items.mock_calls, [ unittest.mock.call( TEST_JID1, namespaces.xep0084_metadata, max_items=1) ])
def test_get_avatar_metadata(self): aset = avatar_service.AvatarSet() aset.add_avatar_image("image/png", image_bytes=TEST_IMAGE) aset.add_avatar_image("image/png", nbytes=0, id_="00000000000000000000", url="http://example.com/avatar") # construct the proper pubsub response items = pubsub_xso.Items( namespaces.xep0084_metadata, ) item = pubsub_xso.Item(id_=aset.png_id) item.registered_payload = aset.metadata items.items.append(item) pubsub_result = pubsub_xso.Request(items) with unittest.mock.patch.object(self.pubsub, "get_items", new=CoroutineMock()): self.pubsub.get_items.return_value = pubsub_result descriptors = run_coroutine(self.s.get_avatar_metadata(TEST_JID1)) self.assertSequenceEqual( self.pubsub.get_items.mock_calls, [ unittest.mock.call( TEST_JID1, namespaces.xep0084_metadata, max_items=1 ) ] ) self.assertEqual(len(descriptors), 2) png_descr = descriptors self.assertTrue(isinstance(png_descr[0], avatar_service.PubsubAvatarDescriptor)) self.assertEqual(png_descr[0].mime_type, "image/png") self.assertEqual(png_descr[0].id_, TEST_IMAGE_SHA1) self.assertEqual(png_descr[0].nbytes, len(TEST_IMAGE)) self.assertEqual(png_descr[0].url, None) self.assertTrue(isinstance(png_descr[0], avatar_service.PubsubAvatarDescriptor)) self.assertEqual(png_descr[1].mime_type, "image/png") self.assertEqual(png_descr[1].id_, "00000000000000000000") self.assertEqual(png_descr[1].nbytes, 0) self.assertEqual(png_descr[1].url, "http://example.com/avatar") with unittest.mock.patch.object(self.pubsub, "get_items", new=CoroutineMock()): cached_descriptors = run_coroutine( self.s.get_avatar_metadata(TEST_JID1) ) self.assertEqual(descriptors, cached_descriptors) # we must get the descriptors from the cache self.pubsub.get_items.assert_not_called() with unittest.mock.patch.object(self.pubsub, "get_items", new=CoroutineMock()): self.pubsub.get_items.return_value = pubsub_result descriptors = run_coroutine( self.s.get_avatar_metadata(TEST_JID1, require_fresh=True) ) self.assertSequenceEqual( self.pubsub.get_items.mock_calls, [ unittest.mock.call( TEST_JID1, namespaces.xep0084_metadata, max_items=1 ) ] )