Skip to main content
Glama
test_model_validation.py5.42 kB
#!/usr/bin/env python3 """ Model validation test using Pydantic directly """ import sys from datetime import datetime from typing import Optional, List from pydantic import BaseModel, Field, validator # Define test models similar to the actual models class Project(BaseModel): id: str name: str description: Optional[str] = None status: str = "active" priority: str = "medium" tags: List[str] = [] created_date: datetime updated_date: datetime class Todo(BaseModel): id: str title: str description: Optional[str] = None completed: bool = False priority: str = "medium" project_id: Optional[str] = None created_date: datetime updated_date: Optional[datetime] = None class CalendarEvent(BaseModel): id: str title: str description: Optional[str] = None start_time: datetime end_time: datetime location: Optional[str] = None attendees: List[str] = [] created_date: datetime updated_date: Optional[datetime] = None def test_project_validation(): """Test project model validation""" now = datetime.now() # Valid project project = Project( id="test_project", name="Test Project", description="Test Description", status="active", priority="high", tags=["test", "validation"], created_date=now, updated_date=now ) assert project.id == "test_project" assert project.name == "Test Project" assert project.status == "active" assert project.priority == "high" assert len(project.tags) == 2 assert "test" in project.tags # Test JSON serialization json_data = project.model_dump() assert json_data["name"] == "Test Project" # Test JSON deserialization reconstructed = Project(**json_data) assert reconstructed.name == project.name print("✓ Project model validation passed") def test_todo_validation(): """Test todo model validation""" now = datetime.now() # Valid todo todo = Todo( id="test_todo", title="Test Todo", description="Test Description", completed=False, priority="high", project_id="test_project", created_date=now ) assert todo.id == "test_todo" assert todo.title == "Test Todo" assert todo.completed is False assert todo.priority == "high" assert todo.project_id == "test_project" # Test completion toggle todo.completed = True assert todo.completed is True print("✓ Todo model validation passed") def test_calendar_event_validation(): """Test calendar event model validation""" now = datetime.now() end_time = now.replace(hour=now.hour + 1) # Valid event event = CalendarEvent( id="test_event", title="Test Event", description="Test meeting", start_time=now, end_time=end_time, location="Test Room", attendees=["test1@example.com", "test2@example.com"], created_date=now ) assert event.id == "test_event" assert event.title == "Test Event" assert event.start_time == now assert event.end_time == end_time assert event.location == "Test Room" assert len(event.attendees) == 2 assert "test1@example.com" in event.attendees print("✓ Calendar event model validation passed") def test_model_serialization(): """Test model serialization and deserialization""" import json now = datetime.now() # Create test data project = Project( id="p1", name="Project 1", created_date=now, updated_date=now ) # Test pydantic JSON export json_str = project.model_dump_json() parsed_data = json.loads(json_str) assert parsed_data["name"] == "Project 1" assert "created_date" in parsed_data # Test reconstruction reconstructed = Project.model_validate(parsed_data) assert reconstructed.name == project.name assert reconstructed.id == project.id print("✓ Model serialization validation passed") def test_model_validation_errors(): """Test model validation error handling""" try: # Should fail - missing required fields Project(name="Test") assert False, "Should have raised validation error" except Exception as e: assert "validation error" in str(e).lower() or "missing" in str(e).lower() print("✓ Model validation errors handled correctly") def run_model_validation(): """Run all model validation tests""" print("Running Model Validation Tests") print("=" * 40) try: test_project_validation() test_todo_validation() test_calendar_event_validation() test_model_serialization() test_model_validation_errors() print("=" * 40) print("✅ ALL MODEL VALIDATION TESTS PASSED") print("✅ Pydantic models working correctly") print("✅ Serialization/deserialization functional") print("✅ Validation error handling working") return True except Exception as e: print(f"❌ Model validation failed: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": success = run_model_validation() sys.exit(0 if success else 1)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/swapnilsurdi/mcp-pa'

If you have feedback or need assistance with the MCP directory API, please join our Discord server