Add a test for running the entire main loop once

This commit is contained in:
Deko
2023-03-11 00:45:46 +01:00
parent 063508c972
commit 28f12679f6
2 changed files with 55 additions and 3 deletions

View File

@@ -1,9 +1,11 @@
import os
import threading
from unittest import mock
import pytest
import requests_mock
from app.main import Main
from app.main import Main, entry
def test_create_main(mock_loggers):
@@ -34,3 +36,44 @@ def test_create_main(mock_loggers):
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()