IntegraChat / backend /tests /test_api_endpoints.py
nothingworry's picture
working Tenant ID
c509b44
raw
history blame
5.61 kB
"""
Integration tests for new API endpoints
"""
import sys
from pathlib import Path
# Add backend to path
backend_dir = Path(__file__).parent.parent
sys.path.insert(0, str(backend_dir))
# Add root directory to path for backend.api imports
root_dir = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(root_dir))
import pytest
from fastapi.testclient import TestClient
from fastapi import FastAPI
try:
from backend.api.main import app
except ImportError:
# Fallback if backend.api.main doesn't work
from api.main import app
@pytest.fixture
def client():
"""Create a test client."""
return TestClient(app)
def test_analytics_overview_endpoint(client):
"""Test /analytics/overview endpoint."""
response = client.get(
"/analytics/overview",
headers={"x-tenant-id": "test_tenant"},
params={"days": 30}
)
assert response.status_code == 200
data = response.json()
assert "tenant_id" in data
assert "overview" in data
assert "total_queries" in data["overview"]
assert "tool_usage" in data["overview"]
assert "redflag_count" in data["overview"]
def test_analytics_tool_usage_endpoint(client):
"""Test /analytics/tool-usage endpoint."""
response = client.get(
"/analytics/tool-usage",
headers={"x-tenant-id": "test_tenant"},
params={"days": 30}
)
assert response.status_code == 200
data = response.json()
assert "tenant_id" in data
assert "tool_usage" in data
assert "period_days" in data
def test_analytics_rag_quality_endpoint(client):
"""Test /analytics/rag-quality endpoint."""
response = client.get(
"/analytics/rag-quality",
headers={"x-tenant-id": "test_tenant"},
params={"days": 30}
)
assert response.status_code == 200
data = response.json()
assert "tenant_id" in data
assert "rag_quality" in data
def test_admin_rules_with_regex(client):
"""Test adding admin rule with regex pattern and severity."""
response = client.post(
"/admin/rules",
headers={"x-tenant-id": "test_tenant"},
json={
"rule": "Block password queries",
"pattern": ".*password.*",
"severity": "high",
"description": "Blocks password-related queries"
}
)
assert response.status_code == 200
data = response.json()
assert data["severity"] == "high"
assert ".*password.*" in data["pattern"]
# Get detailed rules
response = client.get(
"/admin/rules",
headers={"x-tenant-id": "test_tenant"},
params={"detailed": True}
)
assert response.status_code == 200
data = response.json()
assert "rules" in data
assert len(data["rules"]) > 0
assert data["rules"][0]["severity"] == "high"
def test_admin_violations_endpoint(client):
"""Test /admin/violations endpoint."""
response = client.get(
"/admin/violations",
headers={"x-tenant-id": "test_tenant"},
params={"limit": 50, "days": 30}
)
assert response.status_code == 200
data = response.json()
assert "tenant_id" in data
assert "violations" in data
assert "count" in data
def test_admin_tools_logs_endpoint(client):
"""Test /admin/tools/logs endpoint."""
response = client.get(
"/admin/tools/logs",
headers={"x-tenant-id": "test_tenant"},
params={"tool_name": "rag", "days": 7}
)
assert response.status_code == 200
data = response.json()
assert "tenant_id" in data
assert "tool_usage" in data
def test_agent_debug_endpoint(client):
"""Test /agent/debug endpoint."""
# Note: This will fail if LLM/MCP servers are not running
# But we can at least test the endpoint structure
response = client.post(
"/agent/debug",
json={
"tenant_id": "test_tenant",
"message": "Test message",
"temperature": 0.0
}
)
# Might fail if services not available, but should have proper error handling
assert response.status_code in [200, 500, 503] # Accept various status codes
def test_agent_plan_endpoint(client):
"""Test /agent/plan endpoint."""
# Note: This will fail if LLM/MCP servers are not running
response = client.post(
"/agent/plan",
json={
"tenant_id": "test_tenant",
"message": "What is the company policy?",
"temperature": 0.0
}
)
# Might fail if services not available
assert response.status_code in [200, 500, 503]
def test_missing_tenant_id_returns_400(client):
"""Test that endpoints return 400 when tenant ID is missing."""
endpoints = [
"/analytics/overview",
"/analytics/tool-usage",
"/admin/rules",
"/admin/violations"
]
for endpoint in endpoints:
response = client.get(endpoint)
assert response.status_code == 400, f"Endpoint {endpoint} should return 400"
def test_admin_tenants_endpoints(client):
"""Test tenant management endpoints (placeholders)."""
# List tenants
response = client.get("/admin/tenants")
assert response.status_code == 200
data = response.json()
assert "tenants" in data
# Create tenant (placeholder)
response = client.post("/admin/tenants", params={"tenant_id": "new_tenant"})
assert response.status_code == 200
# Delete tenant (placeholder)
response = client.delete("/admin/tenants/new_tenant")
assert response.status_code == 200