Files
attune/tests/test_wrapper_client.py
2026-02-04 17:46:30 -06:00

179 lines
4.7 KiB
Python

#!/usr/bin/env python3
"""
Test Wrapper Client Validation
Simple test script to validate that the wrapper client works correctly
with the generated API client.
"""
import os
import sys
# Add tests directory to path
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
def test_imports():
"""Test that all imports work"""
print("Testing imports...")
try:
from generated_client import AuthenticatedClient, Client
print(" ✓ Generated client imports")
except ImportError as e:
print(f" ✗ Failed to import generated client: {e}")
return False
try:
from helpers import AttuneClient
print(" ✓ Wrapper client imports")
except ImportError as e:
print(f" ✗ Failed to import wrapper client: {e}")
return False
return True
def test_client_initialization():
"""Test client initialization"""
print("\nTesting client initialization...")
try:
from helpers import AttuneClient
# Test without auto-login
client = AttuneClient(
base_url="http://localhost:8080", timeout=30, auto_login=False
)
print(" ✓ Client initialized without auto-login")
# Check client properties
assert client.base_url == "http://localhost:8080"
assert client.timeout == 30
assert client.auth_client is None
print(" ✓ Client properties correct")
return True
except Exception as e:
print(f" ✗ Client initialization failed: {e}")
import traceback
traceback.print_exc()
return False
def test_models():
"""Test Pydantic model construction"""
print("\nTesting Pydantic models...")
try:
from generated_client.models.login_request import LoginRequest
request = LoginRequest(login="test@example.com", password="password123")
print(" ✓ LoginRequest model created")
# Test to_dict
data = request.to_dict()
assert data["login"] == "test@example.com"
assert data["password"] == "password123"
print(" ✓ Model to_dict() works")
return True
except Exception as e:
print(f" ✗ Model construction failed: {e}")
import traceback
traceback.print_exc()
return False
def test_health_check(api_url="http://localhost:8080"):
"""Test health check endpoint (doesn't require auth)"""
print(f"\nTesting health check against {api_url}...")
try:
from helpers import AttuneClient
client = AttuneClient(base_url=api_url, timeout=5, auto_login=False)
health = client.health()
print(f" ✓ Health check successful: {health}")
return True
except Exception as e:
print(f" ✗ Health check failed: {e}")
print(f" (This is expected if API is not running)")
return False
def test_to_dict_helper():
"""Test the to_dict conversion helper"""
print("\nTesting to_dict helper...")
try:
from helpers.client_wrapper import to_dict
# Test with dict
d = {"key": "value"}
assert to_dict(d) == d
print(" ✓ Dict passthrough works")
# Test with None
assert to_dict(None) is None
print(" ✓ None handling works")
# Test with list
lst = [{"a": 1}, {"b": 2}]
result = to_dict(lst)
assert result == lst
print(" ✓ List conversion works")
return True
except Exception as e:
print(f" ✗ to_dict helper failed: {e}")
import traceback
traceback.print_exc()
return False
def main():
"""Run all tests"""
print("=" * 60)
print("Wrapper Client Validation Tests")
print("=" * 60)
results = []
# Run tests
results.append(("Imports", test_imports()))
results.append(("Client Init", test_client_initialization()))
results.append(("Models", test_models()))
results.append(("to_dict Helper", test_to_dict_helper()))
# Only test health if API URL is provided
api_url = os.getenv("ATTUNE_API_URL", "http://localhost:8080")
if api_url:
results.append(("Health Check", test_health_check(api_url)))
# Summary
print("\n" + "=" * 60)
print("Test Summary")
print("=" * 60)
passed = sum(1 for _, result in results if result)
total = len(results)
for name, result in results:
status = "✓ PASS" if result else "✗ FAIL"
print(f"{status}: {name}")
print(f"\nResults: {passed}/{total} tests passed")
if passed == total:
print("\n✓ All tests passed!")
return 0
else:
print(f"\n{total - passed} test(s) failed")
return 1
if __name__ == "__main__":
sys.exit(main())