diff --git a/tests/test_api_telegram_create_bot.py b/tests/test_api_telegram_create_bot.py new file mode 100644 index 0000000..826a1d3 --- /dev/null +++ b/tests/test_api_telegram_create_bot.py @@ -0,0 +1,64 @@ +# Copyright (C) 2020 by Cathy Hu +# +# SPDX-License-Identifier: 0BSD + +from fastapi import status +from kibicara.platforms import telegram +from kibicara.platforms.telegram.model import Telegram +from pytest import fixture, mark + + +@fixture(scope='function') +def disable_spawner(monkeypatch): + class DoNothing: + def start(self, bot): + assert bot is not None + + monkeypatch.setattr(telegram.webapi, 'spawner', DoNothing()) + + +@mark.parametrize('body', [{'api_token': 'string', 'welcome_message': 'string'}]) +def test_telegram_create_bot( + event_loop, client, disable_spawner, hood_id, auth_header, monkeypatch, body, +): + def check_token_mock(token): + return True + + monkeypatch.setattr(telegram.webapi, 'check_token', check_token_mock) + + response = client.post( + f'/api/hoods/{hood_id}/telegram/', json=body, headers=auth_header, + ) + assert response.status_code == status.HTTP_201_CREATED + bot_id = response.json()['id'] + telegram_obj = event_loop.run_until_complete(Telegram.objects.get(id=bot_id)) + assert response.json()['api_token'] == body['api_token'] == telegram_obj.api_token + assert ( + response.json()['welcome_message'] + == body['welcome_message'] + == telegram_obj.welcome_message + ) + assert response.json()['hood']['id'] == telegram_obj.hood.id + assert telegram_obj.enabled + + +@mark.parametrize('body', [{'api_token': 'string', 'welcome_message': 'string'}]) +def test_telegram_invalid_api_token( + event_loop, client, disable_spawner, hood_id, auth_header, monkeypatch, body, +): + response = client.post( + f'/api/hoods/{hood_id}/telegram/', json=body, headers=auth_header, + ) + assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY + + +def test_telegram_create_telegram_invalid_id(client, auth_header): + response = client.post('/api/hoods/1337/telegram/', headers=auth_header) + assert response.status_code == status.HTTP_404_NOT_FOUND + response = client.post('/api/hoods/wrong/telegram/', headers=auth_header) + assert response.status_code == status.HTTP_422_UNPROCESSABLE_ENTITY + + +def test_telegram_create_unauthorized(client, hood_id): + response = client.post('/api/hoods/{hood_id}/telegram/') + assert response.status_code == status.HTTP_401_UNAUTHORIZED