예제 #1
0
 def test_multiple_question_states_exists(self):
     mock_event = MagicMock()
     mock_event.source.user_id = mock_event.source.group_id = user_id = group = "123"
     # Create two questions states
     qs_1 = TRA_QuestionState(group=group, user=user_id)
     self.app.session.add(qs_1)
     qs_2 = TRA_QuestionState(group=group, user=user_id)
     self.app.session.add(qs_2)
     with self.app.app_context():
         result = ask_question_states(mock_event)
         # Should return None and expire all question states
         self.assertIsNone(result)
         q = self.app.session.query(TRA_QuestionState).all()
         self.assertEqual(len(q), 2)
         for i in q:
             self.assertEqual(i.expired, True)
예제 #2
0
 def test_if_multiple_TRA_questionstates_exists_and_start_search_TRA(self):
     mock_event = MagicMock()
     mock_event.source.user_id = mock_event.source.group_id = user_id = group_id = "123"
     mock_event.message.text = "查臺鐵"
     q_1 = TRA_QuestionState(group=group_id, user=user_id, departure_station="新竹")
     q_1.expired = True
     q_2 = TRA_QuestionState(group=group_id, user=user_id, departure_station="高雄")
     self.app.session.add(q_1)
     self.app.session.add(q_2)
     with self.app.app_context():
         res = match_text_and_assign(mock_event)
     rq_1 = self.app.session.query(TRA_QuestionState).filter_by(expired=True).all()
     self.assertEqual(len(rq_1), 2)
     rq_2 = self.app.session.query(TRA_QuestionState).filter_by(expired=False).one()
     self.assertEqual(rq_2.user, user_id)
     self.assertEqual(rq_2.group, group_id)
     self.assertEqual(res.text, "請輸入起程站")
예제 #3
0
 def test_message_choosing_departure_station(self):
     mock_event = MagicMock()
     mock_event.source.user_id = mock_event.source.group_id = user_id = group = "123"
     mock_event.message.text = "新竹"
     qs_1 = TRA_QuestionState(group=group, user=user_id)
     self.app.session.add(qs_1)
     with self.app.app_context():
         result = ask_question_states(mock_event)
         self.assertEqual(result.text, "請輸入目的站")
예제 #4
0
 def test_destination_station_is_same_with_departure_station(self):
     mock_event = MagicMock()
     mock_event.source.user_id = mock_event.source.group_id = user_id = group = "123"
     mock_event.message.text = "新竹"
     qs_1 = TRA_QuestionState(group=group, user=user_id,
                              departure_station="新竹")
     self.app.session.add(qs_1)
     with self.app.app_context():
         result = ask_question_states(mock_event)
         self.assertEqual(result.text, "輸入的目的站與起程站皆是新竹,請重新輸入有效目的站")
예제 #5
0
def search_TRA_train(event):
    expire_user_all_questionstates(event.source.user_id)
    q_state = TRA_QuestionState(
        group=None
        if not hasattr(event.source, "group_id") else event.source.group_id,
        user=event.source.user_id)
    current_app.session.add(q_state)
    current_app.session.commit()
    message = TextSendMessage(text="請輸入起程站")
    return message
예제 #6
0
    def test_case_3(self):
        correct_list = [['105', '自強', '06:15', '11:02'], ['115', '自強', '08:14', '12:49'],
                        ['117', '自強', '09:06', '13:43'], ['129', '自強', '13:14', '17:44']]

        with self.app.app_context():
            qs = TRA_QuestionState(group=None, user='******',
                                   departure_station="基隆",
                                   destination_station="新營",
                                   departure_time=datetime(2018, 6, 2, 6, 0))
            res = request_TRA_matching_train(qs)
            self.check(correct_list, res)
예제 #7
0
 def test_case_2(self):
     correct_list = [['1272', '區間', '22:19', '22:23'], ['2254', '區間', '22:37', '22:41'],
                     ['1278', '區間', '23:12', '23:16'], ['1274', '區間', '23:28', '23:32'],
                     ['1284', '區間', '23:57', '00:01']]
     with self.app.app_context():
         qs = TRA_QuestionState(group=None, user='******',
                                departure_station="鶯歌",
                                destination_station="山佳",
                                departure_time=datetime(2018, 6, 2, 22, 0))
         res = request_TRA_matching_train(qs)
         self.check(correct_list, res)
예제 #8
0
 def test_case_5(self):
     correct_list = [['1803', '區間', '06:18', '06:30'], ['1805', '區間', '07:51', '08:03'],
                     ['1807', '區間', '08:51', '09:03'], ['1811', '區間', '09:51', '10:03'],
                     ['1813', '區間', '10:51', '11:03'], ['1815', '區間', '11:51', '12:03'],
                     ['1817', '區間', '12:51', '13:03'], ['1821', '區間', '13:51', '14:03'],
                     ['1823', '區間', '14:51', '15:03'], ['1825', '區間', '15:51', '16:03'],
                     ['1827', '區間', '16:51', '17:03'], ['1833', '區間', '17:51', '18:03'],
                     ['1835', '區間', '18:51', '19:03'], ['1839', '區間', '19:51', '20:03'],
                     ['1841', '區間', '20:51', '21:03']]
     with self.app.app_context():
         qs = TRA_QuestionState(group=None, user='******',
                                departure_station="富貴",
                                destination_station="橫山",
                                departure_time=datetime(2018, 6, 2, 6, 0))
         res = request_TRA_matching_train(qs)
         self.check(correct_list, res)
예제 #9
0
 def test_case_4(self):
     correct_list = [['1804', '區間', '07:09', '07:38'], ['1806', '區間', '08:07', '08:38'],
                     ['1808', '區間', '08:57', '09:34'], ['1812', '區間', '10:03', '10:34'],
                     ['1814', '區間', '11:03', '11:34'], ['1816', '區間', '12:03', '12:34'],
                     ['1818', '區間', '13:03', '13:34'], ['1822', '區間', '14:03', '14:34'],
                     ['1824', '區間', '15:03', '15:34'], ['1826', '區間', '16:03', '16:34'],
                     ['1828', '區間', '17:03', '17:34'], ['1832', '區間', '18:03', '18:34'],
                     ['1836', '區間', '19:03', '19:34'], ['1838', '區間', '20:03', '20:34'],
                     ['1842', '區間', '22:03', '22:34']]
     with self.app.app_context():
         qs = TRA_QuestionState(group=None, user='******',
                                departure_station="榮華",
                                destination_station="內灣",
                                departure_time=datetime(2018, 6, 2, 6, 0))
         res = request_TRA_matching_train(qs)
         self.check(correct_list, res)
예제 #10
0
 def test_if_one_TRA_questionstate_exists_and_start_search_THSR(self):
     mock_event = MagicMock()
     mock_event.source.user_id = mock_event.source.group_id = user_id = group_id = "123"
     mock_event.message.text = "查高鐵"
     q_1 = TRA_QuestionState(group=group_id, user=user_id, departure_station="新竹")
     self.app.session.add(q_1)
     with self.app.app_context():
         res = match_text_and_assign(mock_event)
     # Check q_1 has been expired
     rq_1 = self.app.session.query(TRA_QuestionState).one()
     self.assertTrue(rq_1.expired)
     # Check that THSR has been created
     rq_2 = self.app.session.query(THSR_QuestionState).one()
     self.assertFalse(rq_2.expired)
     self.assertEqual(rq_2.user, user_id)
     self.assertEqual(rq_2.group, group_id)
     self.assertEqual(res.text, "請輸入起程站")
예제 #11
0
    def test_message_choosing_datetime(self):
        correct_items_in_result = ['0051', '莒光', '07:19', '11:16', '0103', '自強', '07:40', '11:32', '0105', '自強',
                                   '08:14', '12:10', '0507', '莒光', '08:53', '14:15']

        event = PostbackEvent()
        mock_source = MagicMock()
        mock_source.user_id = mock_source.group_id = user_id = group = "123"
        event.source = mock_source
        mock_postback = MagicMock()
        mock_postback.params = {"datetime": "2018-06-02T07:00"}
        event.postback = mock_postback
        qs_1 = TRA_QuestionState(group=group, user=user_id,
                                 departure_station="新竹",
                                 destination_station="高雄")
        self.app.session.add(qs_1)
        with self.app.app_context():
            result = ask_question_states(event)
            for item in correct_items_in_result:
                self.assertIn(item, result.template.text)
예제 #12
0
    def test_case_1(self):
        correct_list = [['51', '莒光', '07:19', '11:16'], ['103', '自強', '07:40', '11:32'],
                        ['105', '自強', '08:14', '12:10'], ['507', '莒光', '08:53', '14:15'],
                        ['113', '自強', '09:38', '13:21'], ['115', '自強', '10:13', '13:53'],
                        ['511', '莒光', '10:54', '15:49'], ['117', '自強', '11:05', '14:51'],
                        ['121', '自強', '12:10', '16:00'], ['513', '莒光', '12:49', '18:01'],
                        ['123', '自強', '13:10', '16:50'], ['125', '自強', '14:13', '17:50'],
                        ['129', '自強', '15:08', '18:49'], ['561', '莒光', '15:20', '20:38'],
                        ['133', '自強', '15:33', '18:15'], ['135', '自強', '16:10', '19:54'],
                        ['175', '自強', '17:10', '20:58'], ['521', '莒光', '17:46', '22:59'],
                        ['139', '自強', '18:10', '21:51'], ['141', '自強', '18:40', '22:24'],
                        ['145', '自強', '19:20', '23:06'], ['149', '自強', '19:56', '23:47'],
                        ['181', '自強', '20:37', '00:17']]

        with self.app.app_context():
            qs = TRA_QuestionState(group=None, user='******',
                                   departure_station="新竹",
                                   destination_station="高雄",
                                   departure_time=datetime(2018, 6, 2, 7, 0))
            res = request_TRA_matching_train(qs)
            self.check(correct_list, res)