def test_init__message_with_reply(self, telepot): telepot.glance.return_value = 'text', 'private', 31416 self.message_json['text'] = 'foo' message = Message(self.message_json) self.assertFalse(message.is_reply) self.message_json['reply_to_message'] = None message = Message(self.message_json) self.assertTrue(message.is_reply)
async def test_on_chat_message__command_setup(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot telepot.glance.return_value = 'text', 'private', 31416 message_json = { 'text': 'some_command_text' } message = Mock() message.command = 'foo_command' Message.return_value = message self.stranger_setup_wizard.handle_command.return_value = True await self.stranger_handler.on_chat_message(message_json) self.stranger.send_to_partner.assert_not_called() Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
async def test_on_chat_message__text(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot telepot.glance.return_value = 'text', 'private', 31416 self.stranger_setup_wizard.handle.return_value = False message_json = { 'text': 'message_text' } message = Message.return_value message.command = None await self.stranger_handler.on_chat_message(message_json) self.stranger.send_to_partner.assert_called_once_with(Message.return_value) self.stranger_setup_wizard.handle.assert_called_once_with(message) Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
def test_decode_command_args__ok(self): message = Mock() message.command_args = 'eyJmb28iOiAiYmFyIn0=' self.assertEqual( Message.decode_command_args(message), {"foo": "bar"}, )
async def test_on_chat_message__setup(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot telepot.glance.return_value = 'text', 'private', 31416 # This means, message was handled by StrangerSetupWizard. self.stranger_setup_wizard.handle.return_value = True message_json = { 'text': 'message_text', } message = Message.return_value message.command = None self.stranger_setup_wizard.handle.return_value = True await self.stranger_handler.on_chat_message(message_json) self.stranger_setup_wizard.handle.assert_called_once_with(message) Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
def test_init__sticker(self): self.message_json['sticker'] = self.sticker message = Message(self.message_json) self.assertEqual( message.sending_kwargs, {'sticker': 'BQADAgAD7gAD9HsZAAFCdfFWtd5o1gI'}, )
def test_init__invalid_location(self, telepot): self.message_json['location'] = { 'latitude': 'foo', } telepot.glance.return_value = 'location', 'private', 31416 with self.assertRaises(UnsupportedContentError): Message(self.message_json)
def test_init__text(self): self.message_json['text'] = 'foo' message = Message(self.message_json) self.assertEqual( message.sending_kwargs, {'text': 'foo'}, ) self.assertEqual(message.text, 'foo')
async def test_on_chat_message__not_supported_by_message_cls_content(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot from randtalkbot.stranger_handler import StrangerError telepot.glance.return_value = 'unsupported_content', 'private', 31416 message_json = Mock() message = Message.return_value message.command = None self.stranger.send_to_partner = CoroutineMock() self.stranger_setup_wizard.handle.return_value = False await self.stranger_handler.on_chat_message(message_json) self.stranger.send_to_partner.assert_not_called() self.sender.send_notification.assert_called_once_with( 'Messages of this type aren\'t supported.', ) Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
async def test_on_chat_message__text_no_partner(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot from randtalkbot.errors import MissingPartnerError telepot.glance.return_value = 'text', 'private', 31416 self.stranger_setup_wizard.handle.return_value = False message_json = { 'text': 'message_text', } self.stranger.send_to_partner = CoroutineMock(side_effect=MissingPartnerError()) message = Message.return_value message.command = None await self.stranger_handler.on_chat_message(message_json) self.stranger.send_to_partner.assert_called_once_with(message) self.stranger_setup_wizard.handle.assert_called_once_with(message) Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
async def test_on_chat_message__text_stranger_error(self, handle_command_mock): from randtalkbot.stranger_handler import Message from randtalkbot.stranger_handler import telepot from randtalkbot.stranger_handler import StrangerError telepot.glance.return_value = 'text', 'private', 31416 self.stranger_setup_wizard.handle.return_value = False message_json = { 'text': 'message_text', } Message.return_value.command = None self.stranger.send_to_partner = CoroutineMock(side_effect=StrangerError()) await self.stranger_handler.on_chat_message(message_json) self.stranger.send_to_partner.assert_called_once_with(Message.return_value) self.sender.send_notification.assert_called_once_with( 'Messages of this type aren\'t supported.', ) Message.assert_called_once_with(message_json) handle_command_mock.assert_not_called()
def test_init__document(self): self.message_json['document'] = { 'file_id': 'foo', } message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'document': 'foo', }, )
def test_init__voice(self): self.message_json['voice'] = { 'file_id': 'foo', } message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'voice': 'foo', 'duration': None, }, )
def test_init__location(self): self.message_json['location'] = { 'latitude': 'foo', 'longitude': 'bar', } message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'latitude': 'foo', 'longitude': 'bar', }, )
def test_init__audio(self): self.message_json['audio'] = { 'file_id': 'foo', } message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'audio': 'foo', 'duration': None, 'performer': None, 'title': None, }, )
def test_init__photo_with_caption(self): self.message_json['photo'] = [ {'file_id': 'foo'}, {'file_id': 'bar'}, ] self.message_json['caption'] = 'baz' message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'caption': 'baz', 'photo': 'foo', }, )
def test_init__photo(self): self.message_json['photo'] = [ {'file_id': 'foo'}, {'file_id': 'bar'}, ] message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'caption': None, 'photo': 'foo', }, ) self.assertEqual(message.text, None)
def test_init__video_with_info(self): self.message_json['video'] = { 'duration': 85, 'file_id': 'foo', } self.message_json['caption'] = 'Pink Floyd' message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'video': 'foo', 'duration': 85, 'caption': 'Pink Floyd', }, )
def test_init__audio_with_info(self): self.message_json['audio'] = { 'duration': 85, 'file_id': 'foo', 'performer': 'Pink Floyd', 'title': 'Another Brick In The Wall Part 3', } message = Message(self.message_json) self.assertEqual( message.sending_kwargs, { 'audio': 'foo', 'duration': 85, 'performer': 'Pink Floyd', 'title': 'Another Brick In The Wall Part 3', }, )
def test_init__text_without_command_has_empty_comand_field(self, telepot): telepot.glance.return_value = 'text', 'private', 31416 self.message_json['text'] = 'foo' message = Message(self.message_json) self.assertEqual(message.command, None) self.assertEqual(message.command_args, None)
def test_init__invalid_voice(self, telepot): telepot.glance.return_value = 'voice', 'private', 31416 with self.assertRaises(UnsupportedContentError): Message(self.message_json)
def test_init__message_with_forward(self, telepot): telepot.glance.return_value = 'text', 'private', 31416 self.message_json['forward_from'] = None with self.assertRaises(UnsupportedContentError): Message(self.message_json)
def test_init__invalid_json(self): with self.assertRaises(UnsupportedContentError): Message(self.message_json)
def test_init__unknown_content_type(self, telepot): telepot.glance.return_value = 'foo_content_type', 'private', 31416 with self.assertRaises(UnsupportedContentError): Message(self.message_json)
def test_decode_command_args__b64decode_type_error(self): message = Mock() message.command_args = None with self.assertRaises(UnsupportedContentError): Message.decode_command_args(message)
def test_decode_command_args__b64decode_incorrect_padding(self): message = Mock() message.command_args = 'NoonfowfVyZSwg' with self.assertRaises(UnsupportedContentError): Message.decode_command_args(message)
def test_decode_command_args__b64decode_value_error(self): message = Mock() message.command_args = 'кириллица' with self.assertRaises(UnsupportedContentError): Message.decode_command_args(message)
def test_decode_command_args__unicode_decode_error(self): message = Mock() message.command_args = '_w==' # b'\xff' with self.assertRaises(UnsupportedContentError): Message.decode_command_args(message)
def test_decode_command_args__loading_json_error(self): message = Mock() message.command_args = 'Ww==' # b'[' with self.assertRaises(UnsupportedContentError): Message.decode_command_args(message)
def test_init__command_with_underscore(self, telepot): telepot.glance.return_value = 'text', 'private', 31416 self.message_json['text'] = '/begin_chat here' message = Message(self.message_json) self.assertEqual(message.command, 'begin_chat') self.assertEqual(message.command_args, 'here')