| |
| """Test script for HuggingFace Crypto Data Engine API""" |
| import asyncio |
| import httpx |
| import json |
| from typing import Optional |
|
|
|
|
| BASE_URL = "http://localhost:8000" |
|
|
|
|
| async def test_endpoint(client: httpx.AsyncClient, name: str, url: str, params: Optional[dict] = None) -> bool: |
| """Test a single endpoint""" |
| print(f"\n{'='*60}") |
| print(f"Testing: {name}") |
| print(f"URL: {url}") |
| if params: |
| print(f"Params: {json.dumps(params, indent=2)}") |
|
|
| try: |
| response = await client.get(url, params=params, timeout=30.0) |
| response.raise_for_status() |
|
|
| data = response.json() |
| print(f"✅ SUCCESS - Status: {response.status_code}") |
| print(f"Response preview:") |
| print(json.dumps(data, indent=2)[:500] + "...") |
|
|
| return True |
|
|
| except Exception as e: |
| print(f"❌ FAILED - Error: {e}") |
| return False |
|
|
|
|
| async def main(): |
| """Run all API tests""" |
| print("🚀 HuggingFace Crypto Data Engine - API Test Suite") |
| print(f"Base URL: {BASE_URL}") |
|
|
| results = [] |
|
|
| async with httpx.AsyncClient(base_url=BASE_URL) as client: |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Root Endpoint", |
| "/" |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Health Check", |
| "/api/health" |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "OHLCV Data (BTC 1h)", |
| "/api/ohlcv", |
| {"symbol": "BTC", "interval": "1h", "limit": 10} |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "OHLCV Data (ETH 5m)", |
| "/api/ohlcv", |
| {"symbol": "ETH", "interval": "5m", "limit": 20} |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Prices (BTC)", |
| "/api/prices", |
| {"symbols": "BTC"} |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Prices (BTC, ETH, SOL)", |
| "/api/prices", |
| {"symbols": "BTC,ETH,SOL"} |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Prices (All Symbols)", |
| "/api/prices" |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Market Sentiment", |
| "/api/sentiment" |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Market Overview", |
| "/api/market/overview" |
| )) |
|
|
| |
| results.append(await test_endpoint( |
| client, |
| "Cache Statistics", |
| "/api/cache/stats" |
| )) |
|
|
| |
| print(f"\n{'='*60}") |
| print("📊 TEST SUMMARY") |
| print(f"{'='*60}") |
| print(f"Total Tests: {len(results)}") |
| print(f"Passed: {sum(results)}") |
| print(f"Failed: {len(results) - sum(results)}") |
| print(f"Success Rate: {(sum(results) / len(results) * 100):.1f}%") |
|
|
| if all(results): |
| print("\n✅ All tests passed!") |
| return 0 |
| else: |
| print("\n❌ Some tests failed!") |
| return 1 |
|
|
|
|
| if __name__ == "__main__": |
| exit_code = asyncio.run(main()) |
| exit(exit_code) |
|
|