Sort_YM/tests/test_language.py
Andrew Pimenov 353be65e3a init: сортировка лайков Яндекс.Музыки по жанру и языку
CLI на yandex-music (device-flow auth, fetch/report/apply), жанр через
реальное дерево client.genres(), язык гибридом (track_supplement + алфавит).
2026-07-06 09:49:36 +03:00

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"