-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtest_standard_queries.py
More file actions
124 lines (98 loc) · 3.15 KB
/
test_standard_queries.py
File metadata and controls
124 lines (98 loc) · 3.15 KB
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
"""Test manual implementation of standard queries to verify approach."""
from __future__ import annotations
from pydantic import BaseModel
from sqlmodel import Field, SQLModel
from sqlmodel_graphql import GraphQLHandler, query
class TestBase(SQLModel):
pass
class TestUser(TestBase, table=False):
__test__ = False
id: int = Field(primary_key=True)
name: str
email: str
age: int | None = None
# Create filter input type manually
class TestUserFilterInput(BaseModel):
name: str | None = None
email: str | None = None
age: int | None = None
class TestUserWithQueries(TestBase, table=False):
__test__ = False
id: int = Field(primary_key=True)
name: str
email: str
age: int | None = None
@query
async def by_id(cls, id: int, query_meta=None) -> TestUserWithQueries | None:
"""Get user by ID."""
return TestUserWithQueries(id=id, name=f"User {id}", email=f"user{id}@test.com")
@query
async def by_filter(
cls, filter: TestUserFilterInput, limit: int = 10, query_meta=None
) -> list[TestUserWithQueries]:
"""Get users by filter."""
users = []
for i in range(1, limit + 1):
user = TestUserWithQueries(
id=i,
name=f"User {i}",
email=f"user{i}@test.com",
age=20 + i,
)
# Apply filter logic
if filter.name and filter.name not in user.name:
continue
if filter.email and filter.email not in user.email:
continue
if filter.age is not None and user.age != filter.age:
continue
users.append(user)
return users
# Test if this works
def test_manual_standard_queries():
handler = GraphQLHandler(base=TestBase)
sdl = handler.get_sdl()
print("\nGenerated SDL:")
print(sdl)
assert "input TestUserFilterInput" in sdl
assert "type Query" in sdl
assert "testUserWithQueriesById" in sdl
assert "testUserWithQueriesByFilter" in sdl
async def test_query_execution():
handler = GraphQLHandler(base=TestBase)
# Test by_id
result = await handler.execute("""
query {
testUserWithQueriesById(id: 1) {
id
name
email
}
}
""")
print("\nBy ID query result:")
print(result)
assert "data" in result
assert "testUserWithQueriesById" in result["data"]
assert result["data"]["testUserWithQueriesById"]["id"] == 1
# Test by_filter
result = await handler.execute("""
query {
testUserWithQueriesByFilter(filter: {age: 25}, limit: 3) {
id
name
age
}
}
""")
print("\nBy Filter query result:")
print(result)
assert "data" in result
assert "testUserWithQueriesByFilter" in result["data"]
assert len(result["data"]["testUserWithQueriesByFilter"]) > 0
if __name__ == "__main__":
import asyncio
test_manual_standard_queries()
print("✅ Manual test passed!")
asyncio.run(test_query_execution())
print("✅ Execution tests passed!")