Files
ecd2iTat/tests.py
2026-03-11 21:50:36 -04:00

82 lines
2.8 KiB
Python

import ast
from pathlib import Path
from types import SimpleNamespace
from typing import Callable, cast
import pytest
def _load_strip_keyword_function():
module_path = Path(__file__).resolve().parent / "__init__.py"
source = module_path.read_text(encoding="utf-8")
tree = ast.parse(source, filename=str(module_path))
function_node = next(
node
for node in tree.body
if isinstance(node, ast.FunctionDef) and node.name == "strip_keyword_from_disambiguation"
)
isolated_module = ast.Module(
body=[
ast.Import(names=[ast.alias(name="re")]),
function_node,
],
type_ignores=[],
)
ast.fix_missing_locations(isolated_module)
namespace: dict[str, object] = {
"log": SimpleNamespace(debug=lambda *args, **kwargs: None),
}
exec(compile(isolated_module, str(module_path), "exec"), namespace)
return cast(Callable[[str, str], str], namespace["strip_keyword_from_disambiguation"])
strip_keyword_from_disambiguation = _load_strip_keyword_function()
@pytest.mark.parametrize(
"disambiguation, keyword, expected",
[
("explicit", "explicit", ""),
("original mix, explicit", "explicit", "original mix"),
("original mix explicit", "explicit", "original mix"),
("explicit, original mix", "explicit", "original mix"),
("explicit album version", "explicit", "album version"),
("explicit - original mix", "explicit", "original mix"),
("original mix,explicit", "explicit", "original mix"),
("original mix - explicit", "explicit", "original mix"),
("original mix (explicit)", "explicit", "original mix"),
("original mix ( explicit )", "explicit", "original mix"),
("original explicit mix", "explicit", "original mix"),
("album version, explicit, remix", "explicit", "album version, remix"),
("album version - explicit - remix", "explicit", "album version - remix"),
("album version | explicit | remix", "explicit", "album version | remix"),
],
)
def test_strip_keyword_supported_patterns(disambiguation, keyword, expected):
assert strip_keyword_from_disambiguation(disambiguation, keyword) == expected
def test_strip_keyword_is_case_insensitive():
result = strip_keyword_from_disambiguation("Original Mix, EXPLICIT", "explicit")
assert result == "Original Mix"
def test_strip_keyword_returns_original_when_not_found():
original = "original mix, clean"
assert strip_keyword_from_disambiguation(original, "explicit") == original
@pytest.mark.parametrize(
"disambiguation, keyword",
[
("", "explicit"),
("original mix", ""),
("", ""),
],
)
def test_strip_keyword_handles_empty_inputs(disambiguation, keyword):
assert strip_keyword_from_disambiguation(disambiguation, keyword) == disambiguation