wrongmove/tests/unit/test_debug_cli.py

110 lines
3.9 KiB
Python
Raw Normal View History

"""Tests for the debug CLI."""
from unittest.mock import MagicMock, patch
from click.testing import CliRunner
from main import cli
class TestDebugGroup:
"""Tests for the debug command group."""
@patch("main.engine", new_callable=MagicMock)
def test_debug_help_shows_subcommands(self, mock_engine: MagicMock) -> None:
runner = CliRunner()
result = runner.invoke(cli, ["debug", "--help"])
assert result.exit_code == 0
assert "districts" in result.output
@patch("main.engine", new_callable=MagicMock)
def test_debug_requires_user_email(self, mock_engine: MagicMock) -> None:
runner = CliRunner()
result = runner.invoke(cli, ["debug", "districts", "list"])
assert result.exit_code != 0
assert "user-email" in result.output.lower() or "Missing" in result.output
class TestDistrictsCommand:
"""Tests for debug districts subcommand."""
@patch("cli.districts.district_service.get_all_districts")
@patch("main.engine", new_callable=MagicMock)
def test_list_districts_direct(
self, mock_engine: MagicMock, mock_get: MagicMock
) -> None:
mock_get.return_value = {"London": "R1", "Camden": "R2"}
runner = CliRunner()
result = runner.invoke(
cli, ["debug", "-u", "test@example.com", "districts", "list"]
)
assert result.exit_code == 0
assert "London" in result.output
@patch("cli.districts.district_service.get_all_districts")
@patch("main.engine", new_callable=MagicMock)
def test_list_districts_json(
self, mock_engine: MagicMock, mock_get: MagicMock
) -> None:
mock_get.return_value = {"London": "R1"}
runner = CliRunner()
result = runner.invoke(
cli, ["debug", "-u", "test@example.com", "--json", "districts", "list"]
)
assert result.exit_code == 0
import json
data = json.loads(result.output)
assert "London" in data
class TestDecisionsCommand:
"""Tests for debug decisions subcommand."""
@patch("cli.decisions.decision_service.set_decision")
@patch("cli.decisions.resolve_user_id", return_value=1)
@patch("main.engine", new_callable=MagicMock)
def test_set_decision_direct(
self, mock_engine: MagicMock, mock_resolve: MagicMock, mock_set: MagicMock
) -> None:
from datetime import datetime
mock_set.return_value = MagicMock(
listing_id=123, listing_type="RENT", decision="liked",
created_at=datetime(2025, 1, 1), updated_at=datetime(2025, 1, 1),
)
runner = CliRunner()
result = runner.invoke(
cli, ["debug", "-u", "test@example.com", "decisions", "set", "123", "liked", "-t", "RENT"]
)
assert result.exit_code == 0
mock_set.assert_called_once()
@patch("cli.decisions.decision_service.get_user_decisions")
@patch("cli.decisions.resolve_user_id", return_value=1)
@patch("main.engine", new_callable=MagicMock)
def test_list_decisions_direct(
self, mock_engine: MagicMock, mock_resolve: MagicMock, mock_list: MagicMock
) -> None:
mock_list.return_value = []
runner = CliRunner()
result = runner.invoke(
cli, ["debug", "-u", "test@example.com", "decisions", "list"]
)
assert result.exit_code == 0
class TestPOIsCommand:
"""Tests for debug pois subcommand."""
@patch("cli.pois.poi_service.get_user_pois")
@patch("cli.pois.resolve_user_id", return_value=1)
@patch("main.engine", new_callable=MagicMock)
def test_list_pois_empty(
self, mock_engine: MagicMock, mock_resolve: MagicMock, mock_pois: MagicMock
) -> None:
mock_pois.return_value = []
runner = CliRunner()
result = runner.invoke(
cli, ["debug", "-u", "test@example.com", "pois", "list"]
)
assert result.exit_code == 0
assert "No results" in result.output