"""Tests for CLI entry point.""" from __future__ import annotations import contextlib import sys from pathlib import Path from unittest import mock import pytest from volumen import VERSION from volumen.cli import main class TestVersionCommand: def test_version_output(self, capsys: pytest.CaptureFixture[str]) -> None: with ( mock.patch.object(sys, "argv", ["volumen", "version"]), contextlib.suppress(SystemExit), ): main() captured = capsys.readouterr() assert VERSION in captured.out class TestHelpCommand: def test_help_output(self, capsys: pytest.CaptureFixture[str]) -> None: with mock.patch.object(sys, "argv", ["volumen", "--help"]), contextlib.suppress(SystemExit): main() captured = capsys.readouterr() assert "volumen" in captured.out or "usage" in captured.out.lower() class TestUnknownCommand: def test_unknown_command_exits(self) -> None: with mock.patch.object(sys, "argv", ["volumen", "bogus"]), pytest.raises(SystemExit): main() class TestParseServeOptions: def test_parse_serve_defaults(self) -> None: with mock.patch.object(sys, "argv", ["volumen", "serve"]): import argparse parser = argparse.ArgumentParser() sp = parser.add_subparsers(dest="command") sp_serve = sp.add_parser("serve") sp_serve.add_argument("--config", default="/etc/volumen/config.toml") sp_serve.add_argument("--host", default=None) sp_serve.add_argument("--port", type=int, default=None) sp_serve.add_argument("--content", default=None) args = parser.parse_args(["serve"]) assert args.config == "/etc/volumen/config.toml" def test_parse_serve_overrides(self) -> None: import argparse parser = argparse.ArgumentParser() sp = parser.add_subparsers(dest="command") sp_serve = sp.add_parser("serve") sp_serve.add_argument("--config", default="/etc/volumen/config.toml") sp_serve.add_argument("--host", default=None) sp_serve.add_argument("--port", type=int, default=None) sp_serve.add_argument("--content", default=None) args = parser.parse_args( ["serve", "--config", "/t.toml", "--host", "127.0.0.1", "--port", "9000"] ) assert args.config == "/t.toml" assert args.host == "127.0.0.1" assert args.port == 9000 class TestPrepareConfig: def test_prepare_config_writes_template(self, tmp_path: Path) -> None: from volumen.config import Config path = tmp_path / "config.toml" result = Config.generate_default(str(path)) assert result == str(path) assert path.exists() def test_prepare_config_noops_when_present(self, tmp_path: Path) -> None: from volumen.config import Config path = tmp_path / "config.toml" path.write_text("[server]\nport = 1\n") result = Config.generate_default(str(path)) assert result is None