File size: 6,800 Bytes
35765b5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 | """Unit tests for Pydantic schemas."""
import pytest
from datetime import datetime
from pydantic import ValidationError
from app.schemas import (
UserBase, UserCreate, User,
ProjectBase, ProjectCreate, ProjectJoin, Project,
TaskBase, TaskCreate, Task,
TaskCompleteRequest, TaskCompleteResponse,
SearchRequest, SearchFilters, SearchResponse,
SmartQueryRequest, SmartQueryResponse
)
class TestUserSchemas:
"""Test User-related schemas."""
def test_user_base_requires_names(self):
"""Test UserBase requires firstName and lastName."""
user = UserBase(firstName="John", lastName="Doe")
assert user.firstName == "John"
assert user.lastName == "Doe"
def test_user_base_no_email_field(self):
"""Test UserBase does not have email field."""
user = UserBase(firstName="Test", lastName="User")
assert not hasattr(user, "email")
def test_user_base_optional_avatar(self):
"""Test avatar_url is optional."""
user = UserBase(firstName="Test", lastName="User")
assert user.avatar_url is None
user_with_avatar = UserBase(
firstName="Test",
lastName="User",
avatar_url="https://example.com/avatar.png"
)
assert user_with_avatar.avatar_url == "https://example.com/avatar.png"
def test_user_create_inherits_user_base(self):
"""Test UserCreate has same fields as UserBase."""
user = UserCreate(firstName="New", lastName="User")
assert user.firstName == "New"
assert user.lastName == "User"
def test_user_validation_missing_first_name(self):
"""Test validation fails without firstName."""
with pytest.raises(ValidationError):
UserBase(lastName="Doe")
def test_user_validation_missing_last_name(self):
"""Test validation fails without lastName."""
with pytest.raises(ValidationError):
UserBase(firstName="John")
def test_user_schema_has_id_and_created_at(self):
"""Test User schema includes id and created_at."""
user = User(
id="tes1234",
firstName="Test",
lastName="User",
created_at=datetime.now()
)
assert user.id == "tes1234"
assert user.created_at is not None
class TestProjectSchemas:
"""Test Project-related schemas."""
def test_project_base(self):
"""Test ProjectBase schema."""
project = ProjectBase(name="myproject", description="A test project")
assert project.name == "myproject"
assert project.description == "A test project"
def test_project_create_requires_user_id(self):
"""Test ProjectCreate requires userId."""
project = ProjectCreate(
name="testproj",
description="Test",
userId="usr1234"
)
assert project.userId == "usr1234"
def test_project_join_schema(self):
"""Test ProjectJoin schema."""
join = ProjectJoin(userId="usr1234")
assert join.userId == "usr1234"
def test_project_schema(self):
"""Test full Project schema."""
project = Project(
id="myproject",
name="myproject",
description="Test",
created_by="usr1234",
created_at=datetime.now()
)
assert project.id == project.name # ID is the name
class TestTaskSchemas:
"""Test Task-related schemas."""
def test_task_base(self):
"""Test TaskBase schema."""
task = TaskBase(title="Test Task")
assert task.title == "Test Task"
assert task.description is None
def test_task_create_optional_assigned_to(self):
"""Test TaskCreate has optional assignedTo."""
task = TaskCreate(title="Unassigned Task")
assert task.assignedTo is None
assigned_task = TaskCreate(title="Assigned", assignedTo="usr1234")
assert assigned_task.assignedTo == "usr1234"
def test_task_complete_request(self):
"""Test TaskCompleteRequest schema."""
request = TaskCompleteRequest(
userId="usr1234",
whatIDid="Fixed the bug",
codeSnippet="def fix(): pass"
)
assert request.userId == "usr1234"
assert request.whatIDid == "Fixed the bug"
assert request.codeSnippet == "def fix(): pass"
def test_task_complete_request_optional_code(self):
"""Test codeSnippet is optional."""
request = TaskCompleteRequest(
userId="usr1234",
whatIDid="Fixed the bug"
)
assert request.codeSnippet is None
class TestSearchSchemas:
"""Test Search-related schemas."""
def test_search_filters_all_optional(self):
"""Test SearchFilters has all optional fields."""
filters = SearchFilters()
assert filters.userId is None
assert filters.dateFrom is None
assert filters.dateTo is None
assert filters.tags is None
def test_search_request(self):
"""Test SearchRequest schema."""
request = SearchRequest(query="authentication")
assert request.query == "authentication"
assert request.filters is None
def test_search_request_with_filters(self):
"""Test SearchRequest with filters."""
filters = SearchFilters(userId="usr1234", tags=["auth", "security"])
request = SearchRequest(query="login", filters=filters)
assert request.filters.userId == "usr1234"
assert request.filters.tags == ["auth", "security"]
class TestSmartQuerySchemas:
"""Test SmartQuery-related schemas."""
def test_smart_query_request(self):
"""Test SmartQueryRequest schema."""
request = SmartQueryRequest(
query="What did I do yesterday?",
currentUserId="usr1234"
)
assert request.query == "What did I do yesterday?"
assert request.currentUserId == "usr1234"
assert request.currentDatetime is None
def test_smart_query_request_with_datetime(self):
"""Test SmartQueryRequest with datetime."""
request = SmartQueryRequest(
query="What tasks are done?",
currentUserId="usr1234",
currentDatetime="2025-11-30T12:00:00Z"
)
assert request.currentDatetime == "2025-11-30T12:00:00Z"
def test_smart_query_response(self):
"""Test SmartQueryResponse schema."""
response = SmartQueryResponse(
answer="You completed the auth task yesterday.",
tools_used=["get_user_activity"],
sources=[]
)
assert response.answer == "You completed the auth task yesterday."
assert "get_user_activity" in response.tools_used
|