Spaces:
Build error
Build error
| """ | |
| E2E Tests for Authenticated Flows | |
| These tests use REAL authentication: | |
| 1. Create a user directly in the database | |
| 2. Generate a valid JWT token | |
| 3. Make API calls with that token | |
| 4. Verify actual business logic responses | |
| """ | |
| import pytest | |
| class TestAuthenticatedUserInfoE2E: | |
| """Test authenticated endpoints with real user.""" | |
| def test_get_credit_balance(self, authenticated_client): | |
| """Get credit balance with valid token - verifies auth works.""" | |
| client, user_data = authenticated_client | |
| response = client.get("/credits/balance") | |
| assert response.status_code == 200, f"Expected 200, got {response.status_code}: {response.text}" | |
| data = response.json() | |
| assert data["credits"] == user_data["credits"] | |
| assert data["user_id"] == user_data["user_id"] | |
| class TestAuthenticatedCreditsE2E: | |
| """Test credits endpoints with real authenticated user.""" | |
| def test_get_credit_balance(self, authenticated_client): | |
| """Get credit balance for authenticated user.""" | |
| client, user_data = authenticated_client | |
| response = client.get("/credits/balance") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["credits"] == user_data["credits"] | |
| assert data["user_id"] == user_data["user_id"] | |
| def test_get_credit_history(self, authenticated_client): | |
| """Get credit history for authenticated user.""" | |
| client, user_data = authenticated_client | |
| response = client.get("/credits/history") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "history" in data | |
| assert data["current_balance"] == user_data["credits"] | |
| class TestAuthenticatedGeminiE2E: | |
| """Test Gemini endpoints with real authenticated user.""" | |
| def test_get_models(self, authenticated_client): | |
| """Get available models.""" | |
| client, user_data = authenticated_client | |
| response = client.get("/gemini/models") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "models" in data | |
| assert "video_generation" in data["models"] | |
| # text_generation might not be exposed in this endpoint yet | |
| # assert "text_generation" in data["models"] | |
| def test_get_jobs_empty(self, authenticated_client): | |
| """Get jobs list (empty for new user).""" | |
| client, user_data = authenticated_client | |
| response = client.get("/gemini/jobs") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "jobs" in data | |
| # New user has no jobs | |
| assert len(data["jobs"]) == 0 | |
| def test_generate_text_request(self, authenticated_client): | |
| """Submit text generation request (will fail without real Gemini API, but tests the flow).""" | |
| client, user_data = authenticated_client | |
| response = client.post("/gemini/generate-text", json={ | |
| "prompt": "Hello, write a short greeting" | |
| }) | |
| # Should either succeed with job_id or fail due to missing API key (both are valid) | |
| # 402 = insufficient credits, 500 = API error, 200 = success | |
| assert response.status_code in [200, 201, 402, 500, 503] | |
| if response.status_code in [200, 201]: | |
| data = response.json() | |
| assert "job_id" in data | |
| class TestAuthenticatedPaymentsE2E: | |
| """Test payments endpoints with real authenticated user.""" | |
| def test_get_payment_history_empty(self, authenticated_client): | |
| """Get payment history (empty for new user).""" | |
| client, user_data = authenticated_client | |
| response = client.get("/payments/history") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert "transactions" in data | |
| assert len(data["transactions"]) == 0 | |
| class TestAuthenticatedLogoutE2E: | |
| """Test logout with real authenticated user.""" | |
| def test_logout(self, authenticated_client): | |
| """Logout invalidates token.""" | |
| client, user_data = authenticated_client | |
| response = client.post("/auth/logout") | |
| assert response.status_code == 200 | |
| data = response.json() | |
| assert data["success"] is True | |