myrmidon / python /tests /server /api_routes /test_game_api.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
3.44 kB
from unittest.mock import MagicMock, patch
import pytest
from fastapi.testclient import TestClient
from src.server.auth.dependencies import get_current_user
from src.server.main import app
client = TestClient(app)
@pytest.fixture
def mock_user():
user = {"id": "user-uuid-1234", "role": "employee", "email": "user@archon.com"}
app.dependency_overrides[get_current_user] = lambda: user
yield user
app.dependency_overrides = {}
@pytest.fixture
def mock_supabase():
with patch("src.server.api_routes.game_api.get_supabase_client") as mock_get_client:
mock_client = MagicMock()
mock_get_client.return_value = mock_client
yield mock_client
def test_save_game_success(mock_user, mock_supabase):
# Arrange
mock_table = MagicMock()
mock_supabase.table.return_value = mock_table
mock_upsert = MagicMock()
mock_table.upsert.return_value = mock_upsert
mock_result = MagicMock()
mock_result.data = [{"user_id": "user-uuid-1234"}]
mock_upsert.execute.return_value = mock_result
# Act
response = client.post("/api/game/save", json={"save_data": {"funds": 1000, "reputation": 95}})
# Assert
assert response.status_code == 200
assert response.json()["status"] == "success"
mock_supabase.table.assert_called_once_with("user_game_saves")
mock_table.upsert.assert_called_once_with({
"user_id": "user-uuid-1234",
"save_data": {"funds": 1000, "reputation": 95},
"updated_at": "now()"
})
def test_save_game_database_error(mock_user, mock_supabase):
# Arrange
mock_table = MagicMock()
mock_supabase.table.return_value = mock_table
mock_upsert = MagicMock()
mock_table.upsert.return_value = mock_upsert
mock_upsert.execute.side_effect = Exception("DB Connection Down")
# Act
response = client.post("/api/game/save", json={"save_data": {"funds": 1000}})
# Assert
assert response.status_code == 500
assert "Database error" in response.json()["detail"]
def test_load_game_success(mock_user, mock_supabase):
# Arrange
mock_table = MagicMock()
mock_supabase.table.return_value = mock_table
mock_select = MagicMock()
mock_table.select.return_value = mock_select
mock_eq = MagicMock()
mock_select.eq.return_value = mock_eq
mock_result = MagicMock()
mock_result.data = [{"save_data": {"funds": 2500, "reputation": 88}}]
mock_eq.execute.return_value = mock_result
# Act
response = client.get("/api/game/load")
# Assert
assert response.status_code == 200
assert response.json()["status"] == "success"
assert response.json()["save_data"]["funds"] == 2500
mock_table.select.assert_called_once_with("save_data")
mock_select.eq.assert_called_once_with("user_id", "user-uuid-1234")
def test_load_game_not_found(mock_user, mock_supabase):
# Arrange
mock_table = MagicMock()
mock_supabase.table.return_value = mock_table
mock_select = MagicMock()
mock_table.select.return_value = mock_select
mock_eq = MagicMock()
mock_select.eq.return_value = mock_eq
mock_result = MagicMock()
mock_result.data = [] # No save game
mock_eq.execute.return_value = mock_result
# Act
response = client.get("/api/game/load")
# Assert
assert response.status_code == 200
assert response.json()["status"] == "not_found"
assert response.json()["save_data"] is None