def send_callback_query(self, data: str, markup_message: Message = None): if markup_message is None: last = self.messages().first() if last is None or last.reply_markup is None: raise ValueError("No ReplyMarkup to response") else: markup_message = last callback_query = types.CallbackQuery( id=self._next_callback_query_id(), from_user=self._telegram_user(), chat_instance=self._next_callback_query_id(), message=types.Message( message_id=markup_message.message_id, chat=self._telegram_chat(), date=markup_message.date, ), data=data, ) update = types.Update( update_id=self._next_update_id(), callback_query=callback_query, ) self.dispatcher.dispatch( update_data=update.to_dict(date_as_timestamp=True) )
def test_send_callback_query_default_message( self, mocked_next_update_id: Mock, mocked_next_message_id: Mock, mocked_now: Mock, mocked_dispatcher: Mock, ): now = timezone.datetime(2000, 1, 1, tzinfo=timezone.utc) mocked_now.return_value = now mocked_next_message_id.return_value = 42 mocked_next_update_id.return_value = 142 test_user = ClientUser(self.bot, username="******") message = Message.objects.create( chat=test_user.chat, date=timezone.now(), message_id=test_user._next_message_id(), text="Yes of No?", _reply_markup=types.InlineKeyboardMarkup(inline_keyboard=[ [types.InlineKeyboardButton("Yes", callback_data="yes")], [types.InlineKeyboardButton("No", callback_data="no")], ]).to_dict(), ) test_user.send_callback_query(data="yes") user = types.User(id=START_USER_ID, is_bot=False, username="******", first_name="u", last_name="u") chat = types.Chat( id=START_USER_ID, type="private", username="******", first_name="u", last_name="u", ) message = types.Message( message_id=message.message_id, date=message.date, chat=chat, ) callback_query = types.CallbackQuery(id="1", from_user=user, chat_instance="1", message=message, data="yes") update = types.Update(update_id=142, callback_query=callback_query) update_data = update.to_dict(date_as_timestamp=True) test_user.dispatcher.dispatch.assert_called_with( update_data=update_data)