async def execute(self, message: Message): chat_id = message.chat.id user_id = message.user.id self.bot.track(message) config = settings.EVERNOTE['basic_access'] welcome_text = '''Welcome! It's bot for saving your notes to Evernote on fly. Please tap on button below to link your Evernote account with bot.''' signin_button = { 'text': 'Waiting for Evernote...', 'url': self.bot.url, } inline_keyboard = {'inline_keyboard': [[signin_button]]} welcome_message_future = asyncio.ensure_future( self.bot.api.sendMessage(chat_id, welcome_text, json.dumps(inline_keyboard))) session_key = "".join([ random.choice(string.ascii_letters + string.digits) for i in range(32) ]) oauth_data = await self.bot.evernote_api.get_oauth_data( user_id, config['key'], config['secret'], config['oauth_callback'], session_key) session_data = { 'user': { 'username': message.user.username, 'first_name': message.user.first_name, 'last_name': message.user.last_name, }, 'chat_id': chat_id, } StartSession.create(id=user_id, key=session_key, data=session_data, oauth_data=oauth_data) signin_button['text'] = 'Sign in to Evernote' signin_button['url'] = oauth_data["oauth_url"] await asyncio.wait([welcome_message_future]) msg = welcome_message_future.result() asyncio.ensure_future( self.bot.api.editMessageReplyMarkup(chat_id, msg['message_id'], json.dumps(inline_keyboard)))
async def test_requre_full_permissions(user): StartSession.create(id=user.id, key='', data={}, oauth_data={}) config['evernote']['full_access'] = {} update_data = { 'update_id': 93710840, 'message': { 'date': datetime.datetime.now(), 'from': { 'username': user.username, 'id': user.id, }, 'chat': { 'id': user.id, 'type': 'private', 'username': user.username, }, 'message_id': 164, 'text': '/switch_mode', 'entities': [ { 'type': 'bot_command', 'offset': 0, 'length': 12 }, ], }, } bot = EvernoteBot('token', 'test_bot') bot.api.sendMessage = AsyncMock() await bot.handle_update(update_data) await asyncio.sleep(0.1) user = User.get({'id': user.id}) user.mode = 'multiple_notes' user.save() assert user.state == 'switch_mode' assert bot.api.sendMessage.call_count == 1 args = bot.api.sendMessage.call_args[0] assert args[1] == 'Please, select mode' bot.api.sendMessage.reset_mock() update_data = { 'update_id': 93710840, 'message': { 'date': datetime.datetime.now(), 'from': { 'username': user.username, 'id': user.id, }, 'chat': { 'id': user.id, 'type': 'private', 'username': user.username, }, 'message_id': 164, 'text': 'One note', }, } bot.api.sendMessage = AsyncMock(return_value={'message_id': 123}) bot.api.editMessageReplyMarkup = AsyncMock() bot.evernote.get_oauth_data = AsyncMock(return_value={'oauth_url': 'url'}) await bot.handle_update(update_data) await asyncio.sleep(0.1) session = StartSession.get({'id': user.id}) assert session.oauth_data['oauth_url'] == 'url' assert bot.evernote.get_oauth_data.call_count == 1 assert bot.api.editMessageReplyMarkup.call_count == 1 assert bot.api.sendMessage.call_count == 2