from __future__ import annotations import json from pathlib import Path from typer.testing import CliRunner import consumer_server_cli runner = CliRunner() def test_serve_accepts_positional_config_path(tmp_path: Path, monkeypatch) -> None: config_path = tmp_path / "commonwealth-server.json" config_path.write_text( json.dumps( { "host": "127.0.0.1", "port": 1, "server_name": "Arg Test", "max_players": 2, "log_verbosity": "info", "admin_port": 2, } ) + "\n", encoding="utf-8", newline="\n", ) # Avoid binding real sockets; validate CLI parsing only. called: dict[str, object] = {} class FakeService: def __init__(self) -> None: self.config = None def add_log_listener(self, _callback) -> None: return None def serve_forever(self) -> None: called["served"] = True def stop(self) -> None: return None monkeypatch.setattr(consumer_server_cli, "get_service", FakeService) monkeypatch.setattr(consumer_server_cli, "print_startup_banner", lambda _cfg: None) monkeypatch.setattr(consumer_server_cli, "ensure_writable_directory", lambda _path: None) monkeypatch.setattr( consumer_server_cli, "validate_config", lambda _cfg: (True, []), ) monkeypatch.setattr( consumer_server_cli.signal, "signal", lambda *_args, **_kwargs: None, ) result = runner.invoke( consumer_server_cli.app, ["serve", str(config_path)], ) assert result.exit_code == 0, result.output assert called.get("served") is True def test_serve_accepts_config_option(tmp_path: Path, monkeypatch) -> None: config_path = tmp_path / "commonwealth-server.json" config_path.write_text( json.dumps( { "host": "127.0.0.1", "port": 1, "server_name": "Arg Test", "max_players": 2, "log_verbosity": "info", "admin_port": 2, } ) + "\n", encoding="utf-8", newline="\n", ) called: dict[str, object] = {} class FakeService: def __init__(self) -> None: self.config = None def add_log_listener(self, _callback) -> None: return None def serve_forever(self) -> None: called["served"] = True def stop(self) -> None: return None monkeypatch.setattr(consumer_server_cli, "get_service", FakeService) monkeypatch.setattr(consumer_server_cli, "print_startup_banner", lambda _cfg: None) monkeypatch.setattr(consumer_server_cli, "ensure_writable_directory", lambda _path: None) monkeypatch.setattr(consumer_server_cli, "validate_config", lambda _cfg: (True, [])) monkeypatch.setattr(consumer_server_cli.signal, "signal", lambda *_args, **_kwargs: None) result = runner.invoke( consumer_server_cli.app, ["serve", "--config", str(config_path)], ) assert result.exit_code == 0, result.output assert called.get("served") is True