109 lines
3.9 KiB
Python
109 lines
3.9 KiB
Python
"""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
|