From 8f3442a850fcd1e9501577a4d81ae2a02f94aa47 Mon Sep 17 00:00:00 2001 From: Deko Date: Sun, 10 Mar 2024 15:16:38 +0100 Subject: [PATCH] Fix tests for crash recovery --- app/main.py | 20 ++++++++++++++------ app/tests/test_discord_client.py | 2 ++ app/tests/test_main.py | 2 ++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/main.py b/app/main.py index 8d231ae..15f2094 100644 --- a/app/main.py +++ b/app/main.py @@ -1,6 +1,8 @@ import json import os import time +from dataclasses import asdict +from json import JSONDecodeError from loguru import logger from requests import HTTPError @@ -12,17 +14,20 @@ class Main: is_live: bool = False current_stream_id: str = "" - streams: dict[str, StreamInformation] + streams: dict[str, StreamInformation] = dict() def __init__(self): self.twitch_client = TwitchClient(streamer=os.environ["STREAMER_NAME"]) self.twitch_client.update_access_token() self.profile_image = self.twitch_client.get_streamer_profile_picture() self.discord_client = DiscordClient() - with open("streams.json", "r") as file: - saved_streams = json.load(file) - for stream_id, saved_stream in saved_streams: - self.streams[stream_id] = StreamInformation(**saved_stream) + try: + with open("streams.json", "r") as file: + saved_streams = json.load(file) + for stream_id, saved_stream in saved_streams: + self.streams[stream_id] = StreamInformation(**saved_stream) + except (FileNotFoundError, JSONDecodeError): + pass def update_status(self): try: @@ -101,7 +106,10 @@ def entry() -> None: while True: main.update_status() with open("streams.json", "w") as file: - json.dump(main.streams, file) + serializable_streams = { + k: asdict(v) for k, v in main.streams.items() + } + json.dump(serializable_streams, file) time.sleep( DELAY_SECONDS - ((time.time() - start_time) % DELAY_SECONDS) ) diff --git a/app/tests/test_discord_client.py b/app/tests/test_discord_client.py index 7e1194f..45e1eef 100644 --- a/app/tests/test_discord_client.py +++ b/app/tests/test_discord_client.py @@ -17,6 +17,7 @@ def test_require_webhook_url(): def test_send_information_to_discord(mock_loggers): stream = StreamInformation( + id="0", user_id="0", user_name="Test", user_login="test", @@ -56,6 +57,7 @@ def test_send_information_to_discord(mock_loggers): def test_send_information_to_discord_fails(mock_loggers): stream = StreamInformation( + id="", user_id="", user_name="", user_login="", diff --git a/app/tests/test_main.py b/app/tests/test_main.py index a352815..904fff6 100644 --- a/app/tests/test_main.py +++ b/app/tests/test_main.py @@ -196,3 +196,5 @@ def delayed_raise(): finalize_notification_request = requests_mocker.request_history[-1] assert finalize_notification_request.path == "/webhook/messages/123456" assert finalize_notification_request.json() + + os.remove("streams.json")