Пример #1
0
 async def test_user_registered(telegram_client, session):
     session.add(get_test_placeholder_user())
     session.commit()
     response = await telegram_client.post('/telegram/',
                                           json=gen_message('/start'))
     assert response.status_code == status.HTTP_200_OK
     assert b'Welcome to PyLendar telegram client!' in response.content
Пример #2
0
def fake_user_events(session):
    Base.metadata.create_all(bind=test_engine)
    user = get_test_placeholder_user()
    session.add(user)
    session.commit()
    create_event(
        db=session,
        title='Cool today event',
        start=today_date,
        end=today_date + timedelta(days=2),
        all_day=False,
        content='test event',
        owner_id=user.id,
        location="Here",
        is_google_event=False,
    )
    create_event(
        db=session,
        title='Cool (somewhen in two days) event',
        start=today_date + timedelta(days=1),
        end=today_date + timedelta(days=3),
        all_day=False,
        content='this week test event',
        owner_id=user.id,
        location="Here",
        is_google_event=False,
    )
    yield user
    Base.metadata.drop_all(bind=test_engine)
Пример #3
0
class TestHandlers:
    TEST_USER = get_test_placeholder_user()

    @pytest.mark.asyncio
    async def test_start_handlers(self):
        chat = Chat(gen_message('/start'))
        message = MessageHandler(chat, self.TEST_USER)

        assert '/start' in message.handlers
        assert await message.process_callback() == '''Hello, Moshe!
Welcome to PyLendar telegram client!'''

    @pytest.mark.asyncio
    async def test_default_handlers(self):
        wrong_start = MessageHandler(Chat(gen_message('start')),
                                     self.TEST_USER)
        wrong_show_events = MessageHandler(Chat(gen_message('show_events')),
                                           self.TEST_USER)
        message = MessageHandler(Chat(gen_message('hello')), self.TEST_USER)

        assert await wrong_start.process_callback() == "Unknown command."
        assert await wrong_show_events.process_callback() == "Unknown command."
        assert await message.process_callback() == "Unknown command."

    @pytest.mark.asyncio
    async def test_show_events_handler(self):
        chat = Chat(gen_message('/show_events'))
        message = MessageHandler(chat, self.TEST_USER)
        assert await message.process_callback() == 'Choose events day.'

    @pytest.mark.asyncio
    async def test_no_today_events_handler(self):
        chat = Chat(gen_callback('Today'))
        message = MessageHandler(chat, self.TEST_USER)
        assert await message.process_callback() == "There're no events today."

    @pytest.mark.asyncio
    async def test_today_handler(self, fake_user_events):
        chat = Chat(gen_callback('Today'))
        message = MessageHandler(chat, fake_user_events)
        answer = f"{today_date.strftime('%A, %B %d')}:\n"
        assert await message.process_callback() == answer

    @pytest.mark.asyncio
    async def test_this_week_handler(self):
        chat = Chat(gen_callback('This week'))
        message = MessageHandler(chat, self.TEST_USER)
        assert await message.process_callback() == 'Choose a day.'

    @pytest.mark.asyncio
    async def test_no_chosen_day_handler(self):
        chat = Chat(gen_callback('10 Feb 2021'))
        message = MessageHandler(chat, self.TEST_USER)
        message.handlers['10 Feb 2021'] = message.chosen_day_handler
        answer = "There're no events on February 10."
        assert await message.process_callback() == answer

    @pytest.mark.asyncio
    async def test_chosen_day_handler(self, fake_user_events):
        chosen_date = today_date + timedelta(days=2)
        button = str(chosen_date.strftime(DATE_FORMAT))
        chat = Chat(gen_callback(button))
        message = MessageHandler(chat, fake_user_events)
        message.handlers[button] = message.chosen_day_handler
        answer = f"{chosen_date.strftime('%A, %B %d')}:\n"
        assert await message.chosen_day_handler() == answer

    @pytest.mark.asyncio
    async def test_new_event_handler(self):
        chat = Chat(gen_message('/new_event'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Please, give your event a title.'
        assert await message.process_callback() == answer

    @pytest.mark.asyncio
    async def test_process_new_event(self):
        chat = Chat(gen_message('New Title'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Title:\nNew Title\n\n'
        answer += 'Add a description of the event.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('New Content'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Content:\nNew Content\n\n'
        answer += 'Where the event will be held?'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('Universe'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Location:\nUniverse\n\n'
        answer += 'When does it start?'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('Not valid start datetime input'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = '❗️ Please, enter a valid date/time.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('today'))
        message = MessageHandler(chat, self.TEST_USER)
        today = datetime.today()
        answer = f'Starts on:\n{today.strftime("%d %b %Y %H:%M")}\n\n'
        answer += 'And when does it end?'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('Not valid end datetime input'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = '❗️ Please, enter a valid date/time.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('tomorrow'))
        message = MessageHandler(chat, self.TEST_USER)
        tomorrow = today + timedelta(days=1)
        answer = 'Title:\nNew Title\n\n'
        answer += 'Content:\nNew Content\n\n'
        answer += 'Location:\nUniverse\n\n'
        answer += f'Starts on:\n{today.strftime("%d %b %Y %H:%M")}\n\n'
        answer += f'Ends on:\n{tomorrow.strftime("%d %b %Y %H:%M")}'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('create'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'New event was successfully created 🎉'
        assert await message.process_callback() == answer

    @pytest.mark.asyncio
    async def test_process_new_event_cancel(self):
        chat = Chat(gen_message('/new_event'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Please, give your event a title.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('cancel'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = '🚫 The process was canceled.'
        assert await message.process_callback() == answer

    @pytest.mark.asyncio
    async def test_process_new_event_restart(self):
        chat = Chat(gen_message('/new_event'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Please, give your event a title.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('New Title'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Title:\nNew Title\n\n'
        answer += 'Add a description of the event.'
        assert await message.process_callback() == answer

        chat = Chat(gen_message('restart'))
        message = MessageHandler(chat, self.TEST_USER)
        answer = 'Please, give your event a title.'
        assert await message.process_callback() == answer