ytdl-sub/tests/unit/utils/test_yaml.py
Jesse Bannon 57fd6901e4
[DEV] Linter: Use ruff over black and isort (#1445)
Will eventually replace pylint with ruff
2026-03-09 11:39:01 -07:00

88 lines
2.4 KiB
Python

import re
import tempfile
import pytest
from ytdl_sub.utils.exceptions import FileNotFoundException, InvalidYamlException
from ytdl_sub.utils.file_handler import FileHandler
from ytdl_sub.utils.yaml import load_yaml
@pytest.fixture
def bad_yaml() -> str:
return """
this:
is:
bad:
asdf:
bad :
:yaml
"""
@pytest.fixture
def bad_yaml_file_path(bad_yaml) -> str:
# Do not delete the file in the context manager - for Windows compatibility
with tempfile.NamedTemporaryFile(suffix=".yaml", delete=False) as tmp_file:
tmp_file.write(bad_yaml.encode("utf-8"))
tmp_file.flush()
try:
yield tmp_file.name
finally:
FileHandler.delete(tmp_file.name)
@pytest.fixture
def single_int_file_path(bad_yaml) -> str:
# Do not delete the file in the context manager - for Windows compatibility
with tempfile.NamedTemporaryFile(suffix=".yaml", delete=False) as tmp_file:
tmp_file.write("0".encode("utf-8"))
tmp_file.flush()
try:
yield tmp_file.name
finally:
FileHandler.delete(tmp_file.name)
@pytest.fixture
def empty_yaml_file_path(bad_yaml) -> str:
# Do not delete the file in the context manager - for Windows compatibility
with tempfile.NamedTemporaryFile(suffix=".yaml", delete=False) as tmp_file:
pass
try:
yield tmp_file.name
finally:
FileHandler.delete(tmp_file.name)
def test_load_yaml_file_not_found():
file_path = "does_not_exist.yaml"
with pytest.raises(FileNotFoundException, match=f"The file '{file_path}' does not exist."):
load_yaml(file_path=file_path)
def test_load_yaml_invalid_syntax(bad_yaml_file_path: str):
with pytest.raises(
InvalidYamlException,
match=re.escape(f"'{bad_yaml_file_path}' has invalid YAML"),
):
load_yaml(file_path=bad_yaml_file_path)
def test_empty_yaml(empty_yaml_file_path: str):
with pytest.raises(
InvalidYamlException,
match=re.escape(f"'{empty_yaml_file_path}' was specified but does not contain any YAML."),
):
load_yaml(file_path=empty_yaml_file_path)
def test_empty_yaml_only_int(single_int_file_path: str):
with pytest.raises(
InvalidYamlException,
match=re.escape(f"'{single_int_file_path}' was specified but does not contain any YAML."),
):
load_yaml(file_path=single_int_file_path)