mirror of
https://github.com/LukeHagar/ytdl-sub.git
synced 2025-12-09 12:57:43 +00:00
131 lines
3.9 KiB
Python
131 lines
3.9 KiB
Python
import os.path
|
|
|
|
import pytest
|
|
|
|
from ytdl_sub.utils.logger import Logger
|
|
from ytdl_sub.utils.logger import LoggerLevels
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def cleanup_debug_file():
|
|
Logger.set_log_level(log_level_name=LoggerLevels.DEBUG.name)
|
|
yield
|
|
Logger.cleanup(delete_debug_file=True)
|
|
|
|
|
|
class TestLogger:
|
|
@pytest.mark.parametrize(
|
|
"log_level",
|
|
[
|
|
LoggerLevels.QUIET,
|
|
LoggerLevels.INFO,
|
|
LoggerLevels.VERBOSE,
|
|
LoggerLevels.DEBUG,
|
|
],
|
|
)
|
|
def test_logger_level_set(self, log_level):
|
|
Logger.set_log_level(log_level_name=log_level.name)
|
|
assert Logger._LOGGER_LEVEL == log_level
|
|
|
|
def test_logger_level_invalid_name(self):
|
|
with pytest.raises(ValueError):
|
|
Logger.set_log_level("nope")
|
|
|
|
@pytest.mark.parametrize(
|
|
"log_level, outputs_to_stdout",
|
|
[
|
|
(LoggerLevels.QUIET, False),
|
|
(LoggerLevels.INFO, True),
|
|
(LoggerLevels.VERBOSE, True),
|
|
(LoggerLevels.DEBUG, True),
|
|
],
|
|
)
|
|
def test_logger_info_stdout(self, capsys, log_level, outputs_to_stdout):
|
|
Logger._LOGGER_LEVEL = log_level
|
|
logger = Logger.get(name="name_test")
|
|
|
|
logger.info("test")
|
|
captured = capsys.readouterr()
|
|
|
|
if outputs_to_stdout:
|
|
assert captured.out == "[ytdl-sub:name_test] test\n"
|
|
else:
|
|
assert not captured.out
|
|
|
|
@pytest.mark.parametrize(
|
|
"log_level, outputs_to_stdout",
|
|
[
|
|
(LoggerLevels.QUIET, False),
|
|
(LoggerLevels.INFO, False),
|
|
(LoggerLevels.VERBOSE, False),
|
|
(LoggerLevels.DEBUG, True),
|
|
],
|
|
)
|
|
def test_logger_debug_stdout(self, capsys, log_level, outputs_to_stdout):
|
|
Logger._LOGGER_LEVEL = log_level
|
|
logger = Logger.get(name="name_test")
|
|
|
|
logger.debug("test")
|
|
captured = capsys.readouterr()
|
|
|
|
if outputs_to_stdout:
|
|
assert captured.out == "[ytdl-sub:name_test] test\n"
|
|
else:
|
|
assert not captured.out
|
|
|
|
@pytest.mark.parametrize(
|
|
"log_level",
|
|
[
|
|
LoggerLevels.QUIET,
|
|
LoggerLevels.INFO,
|
|
LoggerLevels.VERBOSE,
|
|
LoggerLevels.DEBUG,
|
|
],
|
|
)
|
|
def test_logger_always_outputs_to_debug_file(self, log_level):
|
|
Logger._LOGGER_LEVEL = log_level
|
|
logger = Logger.get(name="name_test")
|
|
|
|
logger.info("info test")
|
|
logger.debug("debug test")
|
|
|
|
with open(Logger._DEBUG_LOGGER_FILE.name, "r", encoding="utf-8") as log_file:
|
|
lines = log_file.readlines()
|
|
|
|
assert lines == ["[ytdl-sub:name_test] info test\n", "[ytdl-sub:name_test] debug test\n"]
|
|
|
|
# Ensure the file cleans up too
|
|
Logger.cleanup(delete_debug_file=True)
|
|
assert not os.path.isfile(Logger._DEBUG_LOGGER_FILE.name)
|
|
|
|
@pytest.mark.parametrize(
|
|
"log_level, expected_stdout",
|
|
[
|
|
(LoggerLevels.QUIET, False),
|
|
(LoggerLevels.INFO, False),
|
|
(LoggerLevels.VERBOSE, True),
|
|
(LoggerLevels.DEBUG, True),
|
|
],
|
|
)
|
|
def test_handle_external_logs(self, capsys, log_level, expected_stdout):
|
|
Logger._LOGGER_LEVEL = log_level
|
|
expected_lines = [
|
|
"[ytdl-sub:name_test] test line 1\n",
|
|
"[ytdl-sub:name_test] test line 2\n",
|
|
]
|
|
with Logger.handle_external_logs(name="name_test"):
|
|
print("test line 1")
|
|
print("test line 2")
|
|
|
|
# Ensure it goes to stdout only if it is expected to
|
|
captured = capsys.readouterr()
|
|
if expected_stdout:
|
|
assert captured.out == "".join(expected_lines)
|
|
else:
|
|
assert not captured.out
|
|
|
|
# Ensure it always go to the debug file
|
|
with open(Logger._DEBUG_LOGGER_FILE.name, "r", encoding="utf-8") as log_file:
|
|
lines = log_file.readlines()
|
|
assert lines == expected_lines
|