|
36 | 36 | sys.path.append('.') |
37 | 37 |
|
38 | 38 | from telegram import Update, Message, TelegramError, User, Chat, Bot |
39 | | -from telegram.ext import * |
| 39 | +from telegram.ext import Updater, ConversationHandler, CommandHandler |
40 | 40 | from tests.base import BaseTest |
41 | 41 | from tests.test_updater import MockBot |
42 | 42 |
|
@@ -109,6 +109,9 @@ def _get_state(self, user_id): |
109 | 109 | def start(self, bot, update): |
110 | 110 | return self._set_state(update, self.THIRSTY) |
111 | 111 |
|
| 112 | + def start_end(self, bot, update): |
| 113 | + return self._set_state(update, self.END) |
| 114 | + |
112 | 115 | def brew(self, bot, update): |
113 | 116 | return self._set_state(update, self.BREWING) |
114 | 117 |
|
@@ -161,6 +164,48 @@ def test_addConversationHandler(self): |
161 | 164 | sleep(.1) |
162 | 165 | self.assertRaises(KeyError, self._get_state, user_id=second_user.id) |
163 | 166 |
|
| 167 | + def test_endOnFirstMessage(self): |
| 168 | + self._setup_updater('', messages=0) |
| 169 | + d = self.updater.dispatcher |
| 170 | + user = User(first_name="Misses Test", id=123) |
| 171 | + |
| 172 | + handler = ConversationHandler( |
| 173 | + entry_points=[CommandHandler('start', self.start_end)], states={}, fallbacks=[]) |
| 174 | + d.add_handler(handler) |
| 175 | + queue = self.updater.start_polling(0.01) |
| 176 | + |
| 177 | + # User starts the state machine and immediately ends it. |
| 178 | + message = Message(0, user, None, None, text="/start") |
| 179 | + queue.put(Update(update_id=0, message=message)) |
| 180 | + sleep(.1) |
| 181 | + self.assertEquals(len(handler.conversations), 0) |
| 182 | + |
| 183 | + def test_endOnFirstMessageAsync(self): |
| 184 | + self._setup_updater('', messages=0) |
| 185 | + d = self.updater.dispatcher |
| 186 | + user = User(first_name="Misses Test", id=123) |
| 187 | + |
| 188 | + start_end_async = (lambda bot, update: d.run_async(self.start_end, bot, update)) |
| 189 | + |
| 190 | + handler = ConversationHandler( |
| 191 | + entry_points=[CommandHandler('start', start_end_async)], states={}, fallbacks=[]) |
| 192 | + d.add_handler(handler) |
| 193 | + queue = self.updater.start_polling(0.01) |
| 194 | + |
| 195 | + # User starts the state machine with an async function that immediately ends the |
| 196 | + # conversation. Async results are resolved when the users state is queried next time. |
| 197 | + message = Message(0, user, None, None, text="/start") |
| 198 | + queue.put(Update(update_id=0, message=message)) |
| 199 | + sleep(.1) |
| 200 | + # Assert that the Promise has been accepted as the new state |
| 201 | + self.assertEquals(len(handler.conversations), 1) |
| 202 | + |
| 203 | + message = Message(0, user, None, None, text="resolve promise pls") |
| 204 | + queue.put(Update(update_id=0, message=message)) |
| 205 | + sleep(.1) |
| 206 | + # Assert that the Promise has been resolved and the conversation ended. |
| 207 | + self.assertEquals(len(handler.conversations), 0) |
| 208 | + |
164 | 209 |
|
165 | 210 | if __name__ == '__main__': |
166 | 211 | unittest.main() |
0 commit comments