Closes GH Issue #766, partially closes #520 Prior to this release, no other subscriptions would download if a subscription before it had an error. Now, subscriptions will continue to download even if one has an error, and will be reported in the output summary.
101 lines
2.8 KiB
Python
101 lines
2.8 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,
|
|
music_video_config_path: Path,
|
|
music_video_subscription_path: Path,
|
|
file_transaction_log: Optional[str],
|
|
) -> None:
|
|
with patch.object(
|
|
sys,
|
|
"argv",
|
|
[
|
|
"ytdl-sub",
|
|
"--config",
|
|
str(music_video_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,
|
|
music_video_config_path: Path,
|
|
music_video_subscription_path: Path,
|
|
transaction_log_file_path: Path,
|
|
) -> None:
|
|
with patch.object(
|
|
sys,
|
|
"argv",
|
|
[
|
|
"ytdl-sub",
|
|
"--config",
|
|
str(music_video_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 john_smith:\n"
|
|
|
|
|
|
def test_transaction_log_to_logger(
|
|
mock_subscription_download_success,
|
|
music_video_config_path: Path,
|
|
music_video_subscription_path: Path,
|
|
) -> None:
|
|
with patch.object(
|
|
sys,
|
|
"argv",
|
|
[
|
|
"ytdl-sub",
|
|
"--config",
|
|
str(music_video_config_path),
|
|
"sub",
|
|
str(music_video_subscription_path),
|
|
],
|
|
), assert_logs(
|
|
logger=transaction_logger,
|
|
expected_message="Transaction log for john_smith:\n",
|
|
log_level="info",
|
|
):
|
|
subscriptions = main()
|
|
assert subscriptions
|