import sys import os from pathlib import Path # Add project root to path project_root = Path(__file__).resolve().parents[1] src_path = project_root / "src" if str(src_path) not in sys.path: sys.path.insert(0, str(src_path)) from fastapi.testclient import TestClient # noqa: E402 try: from dashboard.app import app # noqa: E402 print("✓ Successfully imported dashboard.app") except ImportError as e: print(f"✗ Failed to import dashboard.app: {e}") sys.exit(1) client = TestClient(app) def test_v1_status(): response = client.get("/api/v1/status") assert response.status_code == 200 data = response.json() assert "timmy" in data assert "model" in data assert "uptime" in data def test_v1_chat_history(): # Append a message first to ensure history is not empty from dashboard.store import message_log message_log.append(role="user", content="test message", timestamp="12:00:00", source="api-v1") response = client.get("/api/v1/chat/history") assert response.status_code == 200 data = response.json() assert "messages" in data assert len(data["messages"]) > 0 # The message_log.recent() returns reversed(rows) so the last one should be our test message assert data["messages"][-1]["content"] == "test message" def test_v1_upload_fail(): # Test without file response = client.post("/api/v1/upload") assert response.status_code == 422 # Unprocessable Entity (missing file) if __name__ == "__main__": print("Running API v1 tests...") try: test_v1_status() print("✓ Status test passed") test_v1_chat_history() print("✓ History test passed") test_v1_upload_fail() print("✓ Upload failure test passed") print("All tests passed!") except Exception as e: print(f"Test failed: {e}") import traceback traceback.print_exc() sys.exit(1)