# tests/integration/api/v1/admin/test_dashboard.py """ Integration tests for admin dashboard and statistics endpoints. Tests the /api/v1/admin/dashboard/* endpoints. """ import pytest @pytest.mark.integration @pytest.mark.api @pytest.mark.admin @pytest.mark.stats class TestAdminDashboardAPI: """Tests for admin dashboard endpoints.""" def test_get_dashboard(self, client, admin_headers): """Test getting admin dashboard.""" response = client.get("/api/v1/admin/dashboard", headers=admin_headers) assert response.status_code == 200 data = response.json() assert "platform" in data assert "users" in data assert "vendors" in data assert "recent_vendors" in data assert "recent_imports" in data def test_get_dashboard_non_admin(self, client, auth_headers): """Test non-admin cannot access dashboard.""" response = client.get("/api/v1/admin/dashboard", headers=auth_headers) assert response.status_code == 403 data = response.json() assert data["error_code"] == "ADMIN_REQUIRED" def test_get_comprehensive_stats( self, client, admin_headers, test_marketplace_product ): """Test getting comprehensive statistics.""" response = client.get("/api/v1/admin/dashboard/stats", headers=admin_headers) assert response.status_code == 200 data = response.json() assert "total_products" in data assert "unique_brands" in data assert "unique_categories" in data assert "unique_marketplaces" in data assert "unique_vendors" in data assert data["total_products"] >= 0 def test_get_marketplace_stats( self, client, admin_headers, test_marketplace_product ): """Test getting marketplace statistics.""" response = client.get( "/api/v1/admin/dashboard/stats/marketplace", headers=admin_headers ) assert response.status_code == 200 data = response.json() assert isinstance(data, list) if len(data) > 0: assert "marketplace" in data[0] assert "total_products" in data[0] assert "unique_vendors" in data[0] def test_get_platform_stats(self, client, admin_headers): """Test getting platform statistics.""" response = client.get( "/api/v1/admin/dashboard/stats/platform", headers=admin_headers ) assert response.status_code == 200 data = response.json() assert "users" in data assert "vendors" in data assert "products" in data assert "orders" in data assert "imports" in data def test_get_stats_without_auth(self, client): """Test that stats endpoints require authentication.""" response = client.get("/api/v1/admin/dashboard/stats") assert response.status_code == 401 def test_get_stats_non_admin(self, client, auth_headers): """Test non-admin cannot access stats.""" response = client.get("/api/v1/admin/dashboard/stats", headers=auth_headers) assert response.status_code == 403 data = response.json() assert data["error_code"] == "ADMIN_REQUIRED"