def test_dump_msg_entities(self): """Show that entities are correctly parsed and stored""" message = types.Message(id=1, to_id=types.PeerUser(321), date=datetime.now(), message='No entities') dumper = Dumper(self.dumper_config) fmt = BaseFormatter(dumper.conn) # Test with no entities dumper.dump_message(message, 123, None, None) dumper.commit() assert not next(fmt.get_messages_from_context(123, order='DESC')).formatting # Test with many entities text, entities = markdown.parse( 'Testing message with __italic__, **bold**, inline ' '[links](https://example.com) and [mentions](@hi), ' 'as well as `code` and ``pre`` blocks.') entities[3] = types.MessageEntityMentionName(entities[3].offset, entities[3].length, 123) message.id = 2 message.date -= timedelta(days=1) message.message = text message.entities = entities dumper.dump_message(message, 123, None, None) dumper.commit() msg = next(fmt.get_messages_from_context(123, order='ASC')) assert utils.decode_msg_entities(msg.formatting) == message.entities
def test_formatter_get_messages(self): """ Ensures that the BaseFormatter is able to correctly yield messages. """ dumper = Dumper(self.dumper_config) msg = types.Message( id=1, to_id=123, date=datetime(year=2010, month=1, day=1), message='hi' ) for _ in range(365): dumper.dump_message(msg, 123, forward_id=None, media_id=None) msg.id += 1 msg.date += timedelta(days=1) msg.to_id = 300 - msg.to_id # Flip between two IDs dumper.commit() fmt = BaseFormatter(dumper.conn) # Assert all messages are returned assert len(list(fmt.get_messages_from_context(123))) == 365 # Assert only messages after a date are returned min_date = datetime(year=2010, month=4, day=1) assert all(m.date >= min_date for m in fmt.get_messages_from_context( 123, start_date=min_date )) # Assert only messages before a date are returned max_date = datetime(year=2010, month=4, day=1) assert all(m.date <= max_date for m in fmt.get_messages_from_context( 123, end_date=max_date )) # Assert messages are returned in a range assert all(min_date <= m.date <= max_date for m in fmt.get_messages_from_context( 123, start_date=min_date, end_date=max_date )) # Assert messages are returned in the correct order desc = list(fmt.get_messages_from_context(123, order='DESC')) assert all(desc[i - 1] > desc[i] for i in range(1, len(desc))) asc = list(fmt.get_messages_from_context(123, order='ASC')) assert all(asc[i - 1] < asc[i] for i in range(1, len(asc)))
def test_dump_methods(self): """Test dumper.dump_* works""" dumper = Dumper(self.dumper_config) message = types.Message(id=777, to_id=types.PeerUser(123), date=datetime.now(), message='Hello', out=True, via_bot_id=1000, fwd_from=types.MessageFwdHeader( date=datetime.now() - timedelta(days=1), from_id=321)) fwd_id = dumper.dump_forward(message.fwd_from) dumper.dump_message(message, 123, forward_id=fwd_id, media_id=None) message = types.Message(id=778, to_id=types.PeerUser(321), date=datetime.now(), message='Hello', out=False, via_bot_id=1000, media=types.MessageMediaPhoto( caption='Hi', ttl_seconds=40, photo=types.Photo( id=2357, access_hash=-123456789, date=datetime.now(), sizes=[ types.PhotoSize( type='X', w=100, h=100, size=100 * 100, location=types.FileLocation( dc_id=2, volume_id=5, local_id=7532, secret=987654321)) ]))) loc = dumper.dump_media(message.media) dumper.dump_message(message, 123, forward_id=None, media_id=loc) dumper.dump_message_service( context_id=123, media_id=loc, message=types.MessageService( id=779, to_id=123, date=datetime.now(), action=types.MessageActionScreenshotTaken())) me = types.User(id=123, is_self=True, access_hash=13515, first_name='Me', username='******', phone='1234567') dumper.dump_user(photo_id=None, user_full=types.UserFull( user=me, link=types.contacts.Link( my_link=types.ContactLinkContact(), foreign_link=types.ContactLinkContact(), user=me), notify_settings=types.PeerNotifySettings( 0, 'beep'), common_chats_count=3)) dumper.dump_chat(photo_id=None, chat=types.Chat(id=7264, title='Chat', photo=types.ChatPhotoEmpty(), participants_count=5, date=datetime.now() - timedelta(days=10), version=1)) channel = types.Channel(id=8247, title='Channel', photo=types.ChatPhotoEmpty(), username='******', participants_count=17, date=datetime.now() - timedelta(days=5), version=7) channel_full = types.ChannelFull( id=8247, about='Just a Channel', read_inbox_max_id=1051, read_outbox_max_id=8744, unread_count=1568, chat_photo=types.PhotoEmpty(id=176489), notify_settings=types.PeerNotifySettingsEmpty(), exported_invite=types.ChatInviteEmpty(), bot_info=[]) dumper.dump_supergroup(channel_full, channel, photo_id=None) dumper.dump_channel(channel_full, channel, photo_id=None)