Extd cut parameter
This commit is contained in:
64
tests/unit/test_cli_cut_option.py
Normal file
64
tests/unit/test_cli_cut_option.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from __future__ import annotations
|
||||
|
||||
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 CutOptionCliTests(unittest.TestCase):
|
||||
def invoke_convert(self, *args: str):
|
||||
runner = CliRunner()
|
||||
|
||||
with tempfile.TemporaryDirectory() as home_dir:
|
||||
result = runner.invoke(
|
||||
cli.ffx,
|
||||
[
|
||||
"--database-file",
|
||||
os.path.join(home_dir, "ffx.db"),
|
||||
"--dry-run",
|
||||
"convert",
|
||||
"--no-tmdb",
|
||||
*args,
|
||||
],
|
||||
env={**os.environ, "HOME": home_dir},
|
||||
)
|
||||
|
||||
self.assertEqual(0, result.exit_code, result.output)
|
||||
return result.output
|
||||
|
||||
def test_convert_without_cut_prints_no_cut_message(self):
|
||||
output = self.invoke_convert()
|
||||
|
||||
self.assertNotIn("Cutting enabled:", output)
|
||||
|
||||
def test_convert_with_cut_flag_prints_default_cut_message(self):
|
||||
output = self.invoke_convert("--cut")
|
||||
|
||||
self.assertIn("Cutting enabled: start 60 s, duration 180 s.", output)
|
||||
|
||||
def test_convert_with_cut_duration_prints_zero_start_message(self):
|
||||
output = self.invoke_convert("--cut", "45")
|
||||
|
||||
self.assertIn("Cutting enabled: start 0 s, duration 45 s.", output)
|
||||
|
||||
def test_convert_with_cut_start_and_duration_prints_both_values(self):
|
||||
output = self.invoke_convert("--cut", "12,34")
|
||||
|
||||
self.assertIn("Cutting enabled: start 12 s, duration 34 s.", output)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -168,6 +168,67 @@ class CliLazyImportTests(unittest.TestCase):
|
||||
result["modules"],
|
||||
)
|
||||
|
||||
def test_convert_cut_option_supports_flag_duration_and_start_duration_forms(self):
|
||||
result = self.run_python(
|
||||
textwrap.dedent(
|
||||
f"""
|
||||
import click
|
||||
import json
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, {str(SRC_ROOT)!r})
|
||||
|
||||
import ffx.cli
|
||||
|
||||
flag_context = ffx.cli.convert.make_context(
|
||||
"convert",
|
||||
["--cut"],
|
||||
resilient_parsing=True,
|
||||
)
|
||||
duration_context = ffx.cli.convert.make_context(
|
||||
"convert",
|
||||
["--cut", "12"],
|
||||
resilient_parsing=True,
|
||||
)
|
||||
explicit_context = ffx.cli.convert.make_context(
|
||||
"convert",
|
||||
["--cut=12,34"],
|
||||
resilient_parsing=True,
|
||||
)
|
||||
disabled_context = ffx.cli.convert.make_context(
|
||||
"convert",
|
||||
[],
|
||||
resilient_parsing=True,
|
||||
)
|
||||
help_output = ffx.cli.convert.get_help(click.Context(ffx.cli.convert))
|
||||
|
||||
print(json.dumps({{
|
||||
"flag_cut": flag_context.params["cut"],
|
||||
"duration_cut": duration_context.params["cut"],
|
||||
"explicit_cut": explicit_context.params["cut"],
|
||||
"disabled_cut": disabled_context.params["cut"],
|
||||
"output": help_output,
|
||||
"modules": {{
|
||||
module_name: module_name in sys.modules
|
||||
for module_name in {HEAVY_MODULES!r}
|
||||
}},
|
||||
}}))
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
self.assertEqual([60, 180], result["flag_cut"])
|
||||
self.assertEqual([0, 12], result["duration_cut"])
|
||||
self.assertEqual([12, 34], result["explicit_cut"])
|
||||
self.assertIsNone(result["disabled_cut"])
|
||||
self.assertIn("--cut DURATION|START,DURATION", result["output"])
|
||||
self.assertIn("60,180", result["output"])
|
||||
self.assertIn("START,DURATION", result["output"])
|
||||
self.assertTrue(
|
||||
all(not is_loaded for is_loaded in result["modules"].values()),
|
||||
result["modules"],
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user