85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
from click.testing import CliRunner
|
|
|
|
|
|
SRC_ROOT = Path(__file__).resolve().parents[2] / "src"
|
|
|
|
if str(SRC_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(SRC_ROOT))
|
|
|
|
|
|
from ffx import cli # noqa: E402
|
|
|
|
|
|
class SubtitleDirectoryCliTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.tempdir = tempfile.TemporaryDirectory()
|
|
self.home_dir = Path(self.tempdir.name) / "home"
|
|
self.home_dir.mkdir()
|
|
self.database_path = Path(self.tempdir.name) / "test.db"
|
|
|
|
def tearDown(self):
|
|
self.tempdir.cleanup()
|
|
|
|
def write_config(self, data: dict) -> None:
|
|
config_dir = self.home_dir / ".local" / "etc"
|
|
config_dir.mkdir(parents=True, exist_ok=True)
|
|
(config_dir / "ffx.json").write_text(json.dumps(data), encoding="utf-8")
|
|
|
|
def invoke_convert(self, *args: str):
|
|
runner = CliRunner()
|
|
return runner.invoke(
|
|
cli.ffx,
|
|
[
|
|
"--database-file",
|
|
str(self.database_path),
|
|
"convert",
|
|
"--no-tmdb",
|
|
*args,
|
|
],
|
|
env={**os.environ, "HOME": str(self.home_dir)},
|
|
)
|
|
|
|
def test_subtitle_prefix_without_directory_or_default_fails(self):
|
|
result = self.invoke_convert("--subtitle-prefix", "dball")
|
|
|
|
self.assertNotEqual(0, result.exit_code)
|
|
self.assertIn("no --subtitle-directory was provided", result.output)
|
|
self.assertIn("no subtitlesDirectory default is configured", result.output)
|
|
|
|
def test_subtitle_prefix_without_directory_fails_when_configured_subdir_is_missing(self):
|
|
subtitles_base_dir = self.home_dir / ".local" / "var" / "sync" / "subtitles"
|
|
subtitles_base_dir.mkdir(parents=True, exist_ok=True)
|
|
self.write_config({"subtitlesDirectory": "~/.local/var/sync/subtitles"})
|
|
|
|
result = self.invoke_convert("--subtitle-prefix", "dball")
|
|
|
|
self.assertNotEqual(0, result.exit_code)
|
|
self.assertIn("resolved subtitle directory does not exist", result.output)
|
|
self.assertIn(str(subtitles_base_dir / "dball"), result.output)
|
|
|
|
def test_explicit_subtitle_directory_wins_over_missing_default(self):
|
|
explicit_subtitle_directory = self.home_dir / "manual-subtitles"
|
|
explicit_subtitle_directory.mkdir(parents=True, exist_ok=True)
|
|
|
|
result = self.invoke_convert(
|
|
"--subtitle-directory",
|
|
str(explicit_subtitle_directory),
|
|
"--subtitle-prefix",
|
|
"dball",
|
|
)
|
|
|
|
self.assertEqual(0, result.exit_code, result.output)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|