diff --git a/tests/core/test_import_service_contract.py b/tests/core/test_import_service_contract.py new file mode 100644 index 00000000..5353d91d --- /dev/null +++ b/tests/core/test_import_service_contract.py @@ -0,0 +1,19 @@ +"""ImportService and RemoteService stand in for a Service in dl, so they have every method dl calls on one.""" + +from __future__ import annotations + +import re +from pathlib import Path + +import pytest + +from unshackle.commands import dl as dl_module +from unshackle.core.import_service import ImportService +from unshackle.core.remote_service import RemoteService + + +@pytest.mark.parametrize("cls", [ImportService, RemoteService]) +def test_stand_in_service_has_every_method_dl_calls(cls: type) -> None: + called = set(re.findall(r"\bservice\.(\w+)\(", Path(dl_module.__file__).read_text(encoding="utf-8"))) + assert called + assert sorted(name for name in called if not hasattr(cls, name)) == [] diff --git a/unshackle/core/import_service.py b/unshackle/core/import_service.py index 35f39385..e21451d9 100644 --- a/unshackle/core/import_service.py +++ b/unshackle/core/import_service.py @@ -765,6 +765,12 @@ class ImportService: "license through a CDM: export the title again with the tracks you need selected." ) + def decrypts_samples(self, track: AnyTrack) -> bool: + return False + + def get_sample_decrypter(self, track: AnyTrack, entry: int) -> bytes: + raise NotImplementedError("An import does not decrypt samples") + def on_segment_downloaded(self, track: AnyTrack, segment: Any) -> None: pass