bazarr/tests/subliminal_patch/test_core.py

168 lines
5.1 KiB
Python

from pathlib import Path
import pytest
from subliminal_patch import core
def test_scan_video_movie(tmpdir):
video_path = Path(tmpdir, "Taxi Driver 1976 Bluray 720p x264.mkv")
video_path.touch()
result = core.scan_video(str(video_path))
assert isinstance(result, core.Movie)
def test_scan_video_episode(tmpdir):
video_path = Path(tmpdir, "The Wire S01E01 Bluray 720p x264.mkv")
video_path.touch()
result = core.scan_video(str(video_path))
assert isinstance(result, core.Episode)
@pytest.fixture
def pool_instance():
yield core.SZProviderPool({"subdivx"}, {})
def test_pool_update_w_nothing(pool_instance):
pool_instance.update({}, {}, [], {})
assert pool_instance.providers == set()
assert pool_instance.discarded_providers == set()
def test_pool_update_w_multiple_providers(pool_instance):
assert pool_instance.providers == {"subdivx"}
pool_instance.update({"subdivx", "subf2m"}, {}, [], {})
assert pool_instance.providers == {"subdivx", "subf2m"}
def test_pool_update_discarded_providers(pool_instance):
assert pool_instance.providers == {"subdivx"}
# Provider was discarded internally
pool_instance.discarded_providers = {"subdivx"}
assert pool_instance.discarded_providers == {"subdivx"}
# Provider is set to be used again
pool_instance.update({"subdivx", "subf2m"}, {}, [], {})
assert pool_instance.providers == {"subf2m", "subdivx"}
# Provider should disappear from discarded providers
assert pool_instance.discarded_providers == set()
def test_pool_update_discarded_providers_2(pool_instance):
assert pool_instance.providers == {"subdivx"}
# Provider was discarded internally
pool_instance.discarded_providers = {"subdivx"}
assert pool_instance.discarded_providers == {"subdivx"}
# Provider is not set to be used again
pool_instance.update({"subf2m"}, {}, [], {})
assert pool_instance.providers == {"subf2m"}
# Provider should not disappear from discarded providers
assert pool_instance.discarded_providers == {"subdivx"}
def test_language_equals_init():
assert core._LanguageEquals([(core.Language("spa"), core.Language("spa", "MX"))])
def test_language_equals_init_invalid():
with pytest.raises(ValueError):
assert core._LanguageEquals([(core.Language("spa", "MX"),)])
def test_language_equals_init_empty_list_gracefully():
assert core._LanguageEquals([]) == []
@pytest.mark.parametrize(
"langs",
[
[(core.Language("spa"), core.Language("spa", "MX"))],
[(core.Language("por"), core.Language("por", "BR"))],
[(core.Language("zho"), core.Language("zho", "TW"))],
],
)
def test_language_equals_check_set(langs):
equals = core._LanguageEquals(langs)
lang_set = {langs[0]}
assert equals.check_set(lang_set) == set(langs)
def test_language_equals_check_set_do_nothing():
equals = core._LanguageEquals([(core.Language("eng"), core.Language("spa"))])
lang_set = {core.Language("spa")}
assert equals.check_set(lang_set) == {core.Language("spa")}
def test_language_equals_check_set_do_nothing_w_forced():
equals = core._LanguageEquals(
[(core.Language("spa", forced=True), core.Language("spa", "MX"))]
)
lang_set = {core.Language("spa")}
assert equals.check_set(lang_set) == {core.Language("spa")}
@pytest.fixture
def language_equals_pool_intance():
equals = [(core.Language("spa"), core.Language("spa", "MX"))]
yield core.SZProviderPool({"subdivx"}, language_equals=equals)
def test_language_equals_pool_intance_list_subtitles(
language_equals_pool_intance, movies
):
subs = language_equals_pool_intance.list_subtitles(
movies["dune"], {core.Language("spa")}
)
assert subs
assert all(sub.language == core.Language("spa", "MX") for sub in subs)
def test_language_equals_pool_intance_list_subtitles_reversed(movies):
equals = [(core.Language("spa", "MX"), core.Language("spa"))]
language_equals_pool_intance = core.SZProviderPool(
{"subdivx"}, language_equals=equals
)
subs = language_equals_pool_intance.list_subtitles(
movies["dune"], {core.Language("spa")}
)
assert subs
assert all(sub.language == core.Language("spa") for sub in subs)
def test_language_equals_pool_intance_list_subtitles_empty_lang_equals(movies):
language_equals_pool_intance = core.SZProviderPool(
{"subdivx"}, language_equals=None
)
subs = language_equals_pool_intance.list_subtitles(
movies["dune"], {core.Language("spa")}
)
assert subs
assert not all(sub.language == core.Language("spa", "MX") for sub in subs)
def test_language_equals_pool_intance_list_subtitles_return_nothing(movies):
equals = [
(core.Language("spa", "MX"), core.Language("eng")),
(core.Language("spa"), core.Language("eng")),
]
language_equals_pool_intance = core.SZProviderPool(
{"subdivx"}, language_equals=equals
)
subs = language_equals_pool_intance.list_subtitles(
movies["dune"], {core.Language("spa")}
)
assert not language_equals_pool_intance.download_best_subtitles(
subs, movies["dune"], {core.Language("spa")}
)