mirror of
https://github.com/Horizontal42/Sort_YM.git
synced 2026-11-10 15:42:02 +03:00
CLI на yandex-music (device-flow auth, fetch/report/apply), жанр через реальное дерево client.genres(), язык гибридом (track_supplement + алфавит).
85 lines
2 KiB
Python
85 lines
2 KiB
Python
import pytest
|
|
|
|
from sort_ym import language
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"text_language,expected",
|
|
[
|
|
("ru", "RU"),
|
|
("RU", "RU"),
|
|
("en", "INT"),
|
|
("de", "INT"),
|
|
(None, None),
|
|
("", None),
|
|
],
|
|
)
|
|
def test_normalize_api_language(text_language, expected):
|
|
assert language.normalize_api_language(text_language) == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"genre_raw,expected",
|
|
[
|
|
("rusrap", "RU"),
|
|
("shanson", "RU"),
|
|
("rock", None),
|
|
(None, None),
|
|
],
|
|
)
|
|
def test_genre_hint(genre_raw, expected):
|
|
assert language.genre_hint(genre_raw) == expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"title,artists,expected",
|
|
[
|
|
("Кино не для всех", ["Земфира"], "RU"),
|
|
("Bohemian Rhapsody", ["Queen"], "INT"),
|
|
("AB", ["АБ"], None), # ровно поровну — не решаем
|
|
("123", [], None),
|
|
("", [], None),
|
|
],
|
|
)
|
|
def test_alphabet_heuristic(title, artists, expected):
|
|
assert language.alphabet_heuristic(title, artists) == expected
|
|
|
|
|
|
def test_detect_language_prefers_api_over_everything():
|
|
result = language.detect_language(
|
|
title="Bohemian Rhapsody",
|
|
artists=["Queen"],
|
|
genre_raw="rusrap",
|
|
api_language="ru",
|
|
)
|
|
assert result == "RU"
|
|
|
|
|
|
def test_detect_language_falls_back_to_genre_hint():
|
|
result = language.detect_language(
|
|
title="???",
|
|
artists=[],
|
|
genre_raw="shanson",
|
|
api_language=None,
|
|
)
|
|
assert result == "RU"
|
|
|
|
|
|
def test_detect_language_falls_back_to_alphabet():
|
|
result = language.detect_language(
|
|
title="Отпусти меня",
|
|
artists=["ДДТ"],
|
|
genre_raw="rock",
|
|
api_language=None,
|
|
)
|
|
assert result == "RU"
|
|
|
|
|
|
def test_detect_language_unknown_when_nothing_matches():
|
|
result = language.detect_language(
|
|
title="123",
|
|
artists=[],
|
|
genre_raw=None,
|
|
api_language=None,
|
|
)
|
|
assert result == "UNKNOWN"
|