def setUp(self): self.user_session = UserSession('1488228') self.user_session.to_waiting_pizza_type() DialogEngine.process_message(self.user_session, Options.pizza_big) DialogEngine.process_message(self.user_session, Options.payment_card)
def __get_audio(self, bot: TelegramBot, update: Update): chat_id = update.message.chat.id if chat_id not in self.__sessions: self.__sessions[chat_id] = UserSession(chat_id) current_session: UserSession = self.__sessions[chat_id] audio_getter = YoutubeAudioGetter() part_time = current_session.get_part_time() if part_time > 0: audio_getter.set_part_len(part_time) current_session.set_audio_getter(audio_getter) url = None entities = update.message.entities if entities: if entities[0].type == MessageEntity.URL: url = update.message.parse_entity(entities[0]) if not url: return update.message.chat.send_message("Send url!") audio_files: List[AudioFile] = current_session.get_audio(url) for audio_file in audio_files: with open(audio_file.get_filename(), 'rb') as file: result = update.message.chat.send_audio( file, caption=audio_file.get_name()) logging.info(result)
def __start(self, bot: TelegramBot, update: Update): chat_id = update.message.chat.id if chat_id in self.__sessions: del self.__sessions[chat_id] self.__sessions[chat_id] = UserSession(chat_id) update.message.chat.send_message( "Hey! Use /help to get list of commands. Send url to download audio." )
class TestChoosingPaymentDialog(TestCase): def setUp(self): self.user_session = UserSession('1488228') self.user_session.to_waiting_pizza_type() DialogEngine.process_message(self.user_session, Options.pizza_big) # === test payment method choosing === def test_payment_choosing_wrong_choice(self): previous_state = self.user_session.state message = DialogEngine.process_message(self.user_session, 'любой неверный выбор') self.assertEqual(message, Messages.error) self.assertEqual(previous_state, self.user_session.state) def test_payment_choosing_cash_choice(self): message = DialogEngine.process_message(self.user_session, Options.payment_cash) self.assertEqual( message, Messages.verify_order_msg(PizzaType.big, PaymentMethod.cash)) self.assertTrue(self.user_session.is_verifying_order()) self.assertEqual(self.user_session.payment_method, PaymentMethod.cash) def test_payment_choosing_card_choice(self): message = DialogEngine.process_message(self.user_session, Options.payment_card) self.assertEqual( message, Messages.verify_order_msg(PizzaType.big, PaymentMethod.card)) self.assertTrue(self.user_session.is_verifying_order()) self.assertEqual(self.user_session.payment_method, PaymentMethod.card)
class TestOrderVerifyingDialog(TestCase): def setUp(self): self.user_session = UserSession('1488228') self.user_session.to_waiting_pizza_type() DialogEngine.process_message(self.user_session, Options.pizza_big) DialogEngine.process_message(self.user_session, Options.payment_card) # === test order verifying === def test_order_verifying_wrong_choice(self): previous_state = self.user_session.state message = DialogEngine.process_message(self.user_session, 'любой текст') self.assertEqual(message, Messages.error) self.assertEqual(self.user_session.state, previous_state) def test_order_verifying_verify_choice(self): message = DialogEngine.process_message(self.user_session, Options.order_verify) self.assertEqual(message, Messages.order_created) self.assertTrue(self.user_session.is_initial()) def test_order_verifying_decline_choice(self): messages = DialogEngine.process_message(self.user_session, Options.order_decline) self.assertListEqual(messages, [Messages.restart_order, Messages.choose_pizza]) self.assertTrue(self.user_session.is_waiting_pizza_type())
class TestChoosingPizzaDialog(TestCase): def setUp(self): self.user_session = UserSession('1488228') self.user_session.to_waiting_pizza_type() # === test pizza choosing === def test_pizza_choosing_wrong_choice(self): previous_state = self.user_session.state message = DialogEngine.process_message(self.user_session, 'любой неверный выбор') self.assertEqual(message, Messages.error) self.assertEqual(self.user_session.state, previous_state) def test_pizza_choosing_small_pizza_choice(self): message = DialogEngine.process_message(self.user_session, Options.pizza_small) self.assertEqual(message, Messages.choose_payment) self.assertTrue(self.user_session.is_waiting_payment_method()) self.assertEqual(self.user_session.pizza_type, PizzaType.small) def test_pizza_choosing_big_pizza_choice(self): message = DialogEngine.process_message(self.user_session, Options.pizza_big) self.assertEqual(message, Messages.choose_payment) self.assertTrue(self.user_session.is_waiting_payment_method()) self.assertEqual(self.user_session.pizza_type, PizzaType.big)
class TestInitDialog(TestCase): def setUp(self): self.user_session = UserSession('1488228') # === test dialog initializing === def test_init_dialog(self): messages = DialogEngine.process_message( self.user_session, 'любое сообщение для начала диалога') self.assertEqual(len(messages), 2, msg='в первом состоянии должно быть два сообщения') self.assertListEqual(messages, [Messages.hello, Messages.choose_pizza]) self.assertTrue(self.user_session.is_waiting_pizza_type())
def process_message(cls, session: UserSession, message_text: str): if session.state == 'initial': if session.start_ordering(): return [Messages.hello, Messages.choose_pizza] else: return Messages.error elif session.state == 'waiting_pizza_type': try: pizza_type = cls.parse_pizza_type(message_text) except ValueError: return Messages.error if session.approve_pizza_type(pizza_type): return Messages.choose_payment else: return Messages.error elif session.state == 'waiting_payment_method': try: payment_method = cls.parse_payment_method(message_text) except ValueError: return Messages.error if session.approve_payment_method(payment_method): return Messages.verify_order_msg(session.pizza_type, session.payment_method) else: return Messages.error elif session.state == 'verifying_order': try: order_was_verified = cls.parse_verifying_order(message_text) except ValueError: return Messages.error if not order_was_verified: if session.decline_order(): return [Messages.restart_order, Messages.choose_pizza] else: return Messages.error else: if session.verify_order(): # TODO: further order processing here process_order(session.user_id, session.pizza_type, session.payment_method) return Messages.order_created else: return Messages.error return Messages.error
def setUp(self): self.user_session = UserSession('1488228')
def setUp(self): self.user_session = UserSession('1488228') self.user_session.to_waiting_pizza_type()
def get_user_session(chat_id) -> UserSession: if sessions.get(chat_id) is None: sessions[chat_id] = UserSession(chat_id) return sessions[chat_id]