refactor: rewrite from Ruby/Sinatra to Python/FastAPI
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user