| 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): |
| |
| 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 |
|
|
| |
| response = client.post("/api/game/save", json={"save_data": {"funds": 1000, "reputation": 95}}) |
|
|
| |
| 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): |
| |
| 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") |
|
|
| |
| response = client.post("/api/game/save", json={"save_data": {"funds": 1000}}) |
|
|
| |
| assert response.status_code == 500 |
| assert "Database error" in response.json()["detail"] |
|
|
|
|
| def test_load_game_success(mock_user, mock_supabase): |
| |
| 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 |
|
|
| |
| response = client.get("/api/game/load") |
|
|
| |
| 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): |
| |
| 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 = [] |
| mock_eq.execute.return_value = mock_result |
|
|
| |
| response = client.get("/api/game/load") |
|
|
| |
| assert response.status_code == 200 |
| assert response.json()["status"] == "not_found" |
| assert response.json()["save_data"] is None |
|
|