def test_mention_chat_in_message(): chat_id = uuid.uuid4() builder = MessageBuilder() builder.mention_chat(chat_id) assert builder.message.entities.__root__[ 0].data.mention_type == MentionTypes.chat assert (builder.message.entities.__root__[0].data.mention_data. group_chat_id == chat_id)
def test_building_forward_via_models(self): builder = MessageBuilder() builder.reply(reply=Reply( body="foo", reply_type=ChatTypes.group_chat, sender=uuid.uuid4(), source_chat_name="bar", source_sync_id=uuid.uuid4(), ), )
def test_mention_contact_in_message(): user_huid = uuid.uuid4() builder = MessageBuilder() builder.mention_contact(user_huid) assert (builder.message.entities.__root__[0].data.mention_type == MentionTypes.contact) assert builder.message.entities.__root__[ 0].data.mention_data.user_huid == user_huid
def test_building_forward_via_models(self): builder = MessageBuilder() builder.forward( forward=Forward( group_chat_id=uuid.uuid4(), sender_huid=uuid.uuid4(), forward_type=ChatTypes.group_chat, # ignore: type source_inserted_at=datetime.now(), source_sync_id=uuid.uuid4(), ), )
def test_setting_not_processable_file_for_incoming_message(): file = StringIO("import this") file.name = "zen.py" builder = MessageBuilder() builder.file = file message = builder.message assert message.file.file_name == "zen.py"
def test_setting_raw_entities(): builder = MessageBuilder() builder.entities = [ Entity( type=EntityTypes.mention, data=Mention(mention_data=UserMention(user_huid=uuid.uuid4())), ), ] assert builder.message.entities.__root__[ 0].data.mention_type == MentionTypes.user
def test_building_forward_arguments_error(self, message): builder = MessageBuilder() with pytest.raises(ValueError): builder.reply( message=message, reply=Reply( body="foo", reply_type=ChatTypes.group_chat, sender=uuid.uuid4(), source_chat_name="bar", source_sync_id=uuid.uuid4(), ), )
def test_building_forward_arguments_error(self, message): builder = MessageBuilder() with pytest.raises(ValueError): builder.forward( message=message, forward=Forward( group_chat_id=uuid.uuid4(), sender_huid=uuid.uuid4(), forward_type=ChatTypes.botx, # ignore: type source_inserted_at=datetime.now(), source_sync_id=uuid.uuid4(), ), )
async def test_hello_format(bot: Bot, builder: MessageBuilder, client: TestClient) -> None: builder.body = "/hello" await client.send_command(builder.message) command_result = client.command_results[0] assert command_result.result.body == f"Hello, {builder.user.username}"
def test_building_from_message(self, sending_message: SendingMessage) -> None: builder = MessageBuilder() msg = Message(message=builder.message, bot=Bot()) sending_msg = SendingMessage.from_message( text=sending_message.text, message=msg, ) assert sending_msg.host == msg.host assert sending_msg.sync_id == msg.sync_id assert sending_msg.bot_id == msg.bot_id
def chat_created_message(host, bot_id): builder = MessageBuilder() builder.bot_id = bot_id builder.command_data = ChatCreatedEvent( group_chat_id=builder.user.group_chat_id, chat_type=builder.user.chat_type, name="chat", creator=builder.user.user_huid, members=[ UserInChatCreated( huid=builder.user.user_huid, user_kind=UserKinds.user, name=builder.user.username, admin=True, ), UserInChatCreated( huid=builder.bot_id, user_kind=UserKinds.bot, name="bot", admin=False, ), ], ) builder.user.user_huid = None builder.user.ad_login = None builder.user.ad_domain = None builder.user.username = None builder.body = "system:chat_created" builder.system_command = True return builder.message
def test_error_when_chat_validation_not_passed(include_param): user_params = {"user_huid", "ad_login", "ad_domain", "username"} builder = MessageBuilder() builder.body = "system:chat_created" builder.user = builder.user.copy( update={param: None for param in user_params - {include_param}}, ) builder.command_data = { "group_chat_id": uuid.uuid4(), "chat_type": "group_chat", "name": "", "creator": uuid.uuid4(), "members": [], } with pytest.raises(ValidationError): builder.system_command = True
def test_attach_type(): builder = MessageBuilder() builder.link() builder.message.attachments.attach_type == "link"
def test_contact_in_attachments(): builder = MessageBuilder() builder.image() builder.contact() assert builder.message.attachments.contact
def test_voice_attach_has_voice_type(): builder = MessageBuilder() builder.voice() assert isinstance(builder.message.attachments.voice, Voice)
def test_location_in_attachments(): builder = MessageBuilder() builder.image() builder.location() assert builder.message.attachments.location
def test_missing_location_in_attachments(): builder = MessageBuilder() with pytest.raises(AttributeError): builder.message.attachments.location
def test_document_in_attachments(): builder = MessageBuilder() builder.image() builder.document() assert builder.message.attachments.document
def test_no_attach_type(): builder = MessageBuilder() with pytest.raises(AttributeError): builder.message.attachments.attach_type
def test_is_forward_message(self, message, bot) -> None: builder = MessageBuilder() builder.forward(message=message) new_message = Message.from_dict(message=builder.message.dict(), bot=bot) assert new_message.is_forward
def test_forward_in_message(self, message) -> None: builder = MessageBuilder() builder.forward(message=message) assert builder.message.entities.forward.source_sync_id == message.sync_id
def test_mention_not_in_message(self, bot) -> None: builder = MessageBuilder() message = Message.from_dict(builder.message.dict(), bot) assert message.entities.mentions == []
def test_mention_in_message(self, mention_data, mention_type) -> None: builder = MessageBuilder() builder.mention(mention=Mention(mention_data=mention_data, mention_type=mention_type), ) assert builder.message.entities.mentions[0]
def test_mailto_property_in_attachment(): builder = MessageBuilder() mailto_url = "mailto:[email protected]" builder.link(mailto_url) assert builder.message.attachments.__root__[0].data.mailto == "*****@*****.**"
def test_reply_in_message(self, message) -> None: builder = MessageBuilder() builder.reply(message=message) assert builder.message.entities.reply.source_sync_id == message.sync_id
def test_tel_property_in_attachment(): builder = MessageBuilder() tel_url = "tel://+77777777777" builder.link(url=tel_url) assert builder.message.attachments.__root__[0].data.tel == "+77777777777"
def test_forward_not_in_message(self) -> None: builder = MessageBuilder() with pytest.raises(AttributeError): builder.message.entities.forward
def test_raising_missing_tel(): builder = MessageBuilder() builder.link() with pytest.raises(AttributeError): builder.message.attachments.__root__[0].data.tel
def incoming_message(host, bot_id): builder = MessageBuilder() builder.bot_id = bot_id builder.user.host = host return builder.message
def test_is_link_in_attachment(): builder = MessageBuilder() builder.link() assert builder.message.attachments.__root__[0].data.is_link()