wrongmove/tests/unit/test_decision_service.py
Viktor Barzin 43f9d210fb
Fix tests to match decision service API and add filtering to non-streaming endpoint
- Update test mocks from _get_disliked_ids to _get_user_id_safe
- Fix decision service test method names (clear_decision -> remove_decision, etc.)
- Fix positional vs keyword arg assertion in set_decision test
- Add decision_filter param to non-streaming listing_geojson endpoint
2026-02-21 15:52:31 +00:00

90 lines
3 KiB
Python

"""Unit tests for decision_service."""
from unittest.mock import MagicMock
import pytest
from models.decision import ListingDecision
from services import decision_service
class TestSetDecision:
def test_set_liked(self) -> None:
repo = MagicMock()
repo.upsert_decision.return_value = ListingDecision(
id=1, user_id=1, listing_id=100, listing_type="RENT", decision="liked"
)
result = decision_service.set_decision(
repo, user_id=1, listing_id=100,
listing_type="RENT", decision="liked",
)
assert result.decision == "liked"
repo.upsert_decision.assert_called_once_with(
1, 100, "RENT", "liked"
)
def test_set_disliked(self) -> None:
repo = MagicMock()
repo.upsert_decision.return_value = ListingDecision(
id=1, user_id=1, listing_id=100, listing_type="RENT", decision="disliked"
)
result = decision_service.set_decision(
repo, user_id=1, listing_id=100,
listing_type="RENT", decision="disliked",
)
assert result.decision == "disliked"
def test_invalid_decision_raises(self) -> None:
repo = MagicMock()
with pytest.raises(ValueError, match="Invalid decision"):
decision_service.set_decision(
repo, user_id=1, listing_id=100,
listing_type="RENT", decision="maybe",
)
def test_invalid_listing_type_raises(self) -> None:
repo = MagicMock()
with pytest.raises(ValueError, match="Invalid listing_type"):
decision_service.set_decision(
repo, user_id=1, listing_id=100,
listing_type="SELL", decision="liked",
)
class TestGetDecisions:
def test_returns_all_decisions(self) -> None:
repo = MagicMock()
repo.get_decisions_for_user.return_value = [
ListingDecision(
id=1, user_id=1, listing_id=100,
listing_type="RENT", decision="liked",
),
]
result = decision_service.get_user_decisions(repo, user_id=1)
assert len(result) == 1
class TestClearDecision:
def test_clear_existing(self) -> None:
repo = MagicMock()
repo.delete_decision.return_value = True
result = decision_service.remove_decision(
repo, user_id=1, listing_id=100, listing_type="RENT"
)
assert result is True
def test_clear_nonexistent(self) -> None:
repo = MagicMock()
repo.delete_decision.return_value = False
result = decision_service.remove_decision(
repo, user_id=1, listing_id=100, listing_type="RENT"
)
assert result is False
class TestGetDislikedListingIds:
def test_returns_disliked_set(self) -> None:
repo = MagicMock()
repo.get_disliked_listing_ids.return_value = {200, 300}
result = decision_service.get_disliked_ids(
repo, user_id=1, listing_type="RENT"
)
assert result == {200, 300}