80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
import os
|
|
import threading
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
import requests_mock
|
|
|
|
from app.main import Main, entry
|
|
|
|
|
|
def test_create_main(mock_loggers):
|
|
with (
|
|
mock.patch.dict(
|
|
os.environ,
|
|
{
|
|
"STREAMER_NAME": "streamer_name",
|
|
"DISCORD_WEBHOOK_URL": "URL",
|
|
"TWITCH_CLIENT_ID": "id",
|
|
"TWITCH_CLIENT_SECRET": "secret",
|
|
},
|
|
),
|
|
requests_mock.Mocker() as requests_mocker,
|
|
):
|
|
# We authorize
|
|
requests_mocker.post(
|
|
"https://id.twitch.tv/oauth2/token", json={"access_token": "token"}
|
|
)
|
|
# We cache the profile image URL of the streamer
|
|
requests_mocker.get(
|
|
"https://api.twitch.tv/helix/users?login=streamer_name",
|
|
json={"data": [{"profile_image_url": "image"}]},
|
|
)
|
|
|
|
main = Main()
|
|
|
|
assert main.discord_client
|
|
assert main.twitch_client
|
|
assert main.profile_image == "image"
|
|
|
|
|
|
def test_run_main_one_iteration(mock_loggers):
|
|
with (
|
|
mock.patch.dict(
|
|
os.environ,
|
|
{
|
|
"STREAMER_NAME": "streamer_name",
|
|
"DISCORD_WEBHOOK_URL": "URL",
|
|
"TWITCH_CLIENT_ID": "id",
|
|
"TWITCH_CLIENT_SECRET": "secret",
|
|
},
|
|
),
|
|
mock.patch(
|
|
"app.main.Main.update_status",
|
|
side_effect=Main.update_status,
|
|
autospec=True,
|
|
) as mock_update_status,
|
|
mock.patch("app.main.DELAY_SECONDS", 2),
|
|
requests_mock.Mocker() as requests_mocker,
|
|
):
|
|
requests_mocker.post(
|
|
"https://id.twitch.tv/oauth2/token", json={"access_token": "token"}
|
|
)
|
|
requests_mocker.get(
|
|
"https://api.twitch.tv/helix/users?login=streamer_name",
|
|
json={"data": [{"profile_image_url": "image"}]},
|
|
)
|
|
requests_mocker.get(
|
|
"https://api.twitch.tv/helix/streams?user_login=streamer_name",
|
|
json={"data": []},
|
|
)
|
|
|
|
def delayed_raise():
|
|
mock_update_status.side_effect = KeyboardInterrupt()
|
|
|
|
thread = threading.Timer(1, delayed_raise)
|
|
thread.start()
|
|
|
|
with pytest.raises(KeyboardInterrupt):
|
|
entry()
|