ytdl-sub/tests/integration/cli/test_output_transaction_log.py
2024-09-30 23:55:15 -07:00

107 lines
2.9 KiB
Python

import os
import sys
import tempfile
from pathlib import Path
from typing import Optional
from unittest.mock import patch
import pytest
from conftest import assert_logs
from ytdl_sub.cli.entrypoint import main
from ytdl_sub.cli.output_transaction_log import logger as transaction_logger
from ytdl_sub.utils.file_handler import FileHandler
@pytest.fixture
def transaction_log_file_path() -> str:
# Delete the temp_file on creation
with tempfile.NamedTemporaryFile() as temp_file:
pass
yield temp_file.name
if os.path.isfile(temp_file.name):
FileHandler.delete(temp_file.name)
@pytest.mark.parametrize("file_transaction_log", [None, "output.log"])
def test_suppress_transaction_log(
mock_subscription_download_success,
default_config_path: Path,
music_video_subscription_path: Path,
file_transaction_log: Optional[str],
) -> None:
with (
patch.object(
sys,
"argv",
[
"ytdl-sub",
"--config",
str(default_config_path),
"sub",
str(music_video_subscription_path),
"--suppress-transaction-log",
]
+ (["--transaction-log", file_transaction_log] if file_transaction_log else []),
),
patch("ytdl_sub.cli.output_transaction_log.output_transaction_log") as mock_transaction_log,
):
subscriptions = main()
assert subscriptions
assert mock_transaction_log.call_count == 0
def test_transaction_log_to_file(
mock_subscription_download_success,
default_config_path: Path,
music_video_subscription_path: Path,
transaction_log_file_path: Path,
) -> None:
with patch.object(
sys,
"argv",
[
"ytdl-sub",
"--config",
str(default_config_path),
"sub",
str(music_video_subscription_path),
"--transaction-log",
str(transaction_log_file_path),
],
):
subscriptions = main()
assert subscriptions
with open(transaction_log_file_path, "r", encoding="utf-8") as transaction_log_file:
assert transaction_log_file.readlines()[0] == "Transaction log for Rick Astley:\n"
def test_transaction_log_to_logger(
mock_subscription_download_success,
default_config_path: Path,
music_video_subscription_path: Path,
) -> None:
with (
patch.object(
sys,
"argv",
[
"ytdl-sub",
"--config",
str(default_config_path),
"sub",
str(music_video_subscription_path),
],
),
assert_logs(
logger=transaction_logger,
expected_message="Transaction log for Rick Astley:\n",
log_level="info",
),
):
subscriptions = main()
assert subscriptions