|
2 | 2 | from typing import Any
|
3 | 3 |
|
4 | 4 | from graphql.error import GraphQLError
|
5 |
| -from graphql.execution import execute_sync, ExecutionResult |
6 |
| -from graphql.language import parse, SourceLocation |
| 5 | +from graphql.execution import ExecutionResult, execute_sync |
| 6 | +from graphql.language import SourceLocation, parse |
7 | 7 | from graphql.type import (
|
8 | 8 | GraphQLArgument,
|
9 | 9 | GraphQLField,
|
| 10 | + GraphQLID, |
10 | 11 | GraphQLInputField,
|
11 | 12 | GraphQLInputObjectType,
|
12 | 13 | GraphQLInt,
|
| 14 | + GraphQLList, |
13 | 15 | GraphQLObjectType,
|
14 | 16 | GraphQLSchema,
|
15 | 17 | GraphQLString,
|
@@ -213,6 +215,91 @@ def execute_query(query: str, root_value: Any = None) -> ExecutionResult:
|
213 | 215 | None,
|
214 | 216 | )
|
215 | 217 |
|
| 218 | + def transforms_default_values_using_out_names(): |
| 219 | + # This is an extension of GraphQL.js. |
| 220 | + resolver_kwargs: Any |
| 221 | + |
| 222 | + def search_resolver(_obj: None, _info, **kwargs): |
| 223 | + nonlocal resolver_kwargs |
| 224 | + resolver_kwargs = kwargs |
| 225 | + return [{"id": "42"}] |
| 226 | + |
| 227 | + filters_type = GraphQLInputObjectType( |
| 228 | + "SearchFilters", |
| 229 | + {"pageSize": GraphQLInputField(GraphQLInt, out_name="page_size")}, |
| 230 | + ) |
| 231 | + result_type = GraphQLObjectType("SearchResult", {"id": GraphQLField(GraphQLID)}) |
| 232 | + query = GraphQLObjectType( |
| 233 | + "Query", |
| 234 | + { |
| 235 | + "search": GraphQLField( |
| 236 | + GraphQLList(result_type), |
| 237 | + { |
| 238 | + "searchFilters": GraphQLArgument( |
| 239 | + filters_type, {"pageSize": 10}, out_name="search_filters" |
| 240 | + ) |
| 241 | + }, |
| 242 | + resolve=search_resolver, |
| 243 | + ) |
| 244 | + }, |
| 245 | + ) |
| 246 | + schema = GraphQLSchema(query) |
| 247 | + |
| 248 | + resolver_kwargs = None |
| 249 | + result = execute_sync(schema, parse("{ search { id } }")) |
| 250 | + assert result == ({"search": [{"id": "42"}]}, None) |
| 251 | + assert resolver_kwargs == {"search_filters": {"page_size": 10}} |
| 252 | + |
| 253 | + resolver_kwargs = None |
| 254 | + result = execute_sync( |
| 255 | + schema, parse("{ search(searchFilters:{pageSize: 25}) { id } }") |
| 256 | + ) |
| 257 | + assert result == ({"search": [{"id": "42"}]}, None) |
| 258 | + assert resolver_kwargs == {"search_filters": {"page_size": 25}} |
| 259 | + |
| 260 | + resolver_kwargs = None |
| 261 | + result = execute_sync( |
| 262 | + schema, |
| 263 | + parse( |
| 264 | + """ |
| 265 | + query ($searchFilters: SearchFilters) { |
| 266 | + search(searchFilters: $searchFilters) { id } |
| 267 | + } |
| 268 | + """ |
| 269 | + ), |
| 270 | + ) |
| 271 | + assert result == ({"search": [{"id": "42"}]}, None) |
| 272 | + assert resolver_kwargs == {"search_filters": {"page_size": 10}} |
| 273 | + |
| 274 | + resolver_kwargs = None |
| 275 | + result = execute_sync( |
| 276 | + schema, |
| 277 | + parse( |
| 278 | + """ |
| 279 | + query ($searchFilters: SearchFilters) { |
| 280 | + search(searchFilters: $searchFilters) { id } |
| 281 | + } |
| 282 | + """ |
| 283 | + ), |
| 284 | + variable_values={"searchFilters": {"pageSize": 25}}, |
| 285 | + ) |
| 286 | + assert result == ({"search": [{"id": "42"}]}, None) |
| 287 | + assert resolver_kwargs == {"search_filters": {"page_size": 25}} |
| 288 | + |
| 289 | + resolver_kwargs = None |
| 290 | + result = execute_sync( |
| 291 | + schema, |
| 292 | + parse( |
| 293 | + """ |
| 294 | + query ($searchFilters: SearchFilters = {pageSize: 25}) { |
| 295 | + search(searchFilters: $searchFilters) { id } |
| 296 | + } |
| 297 | + """ |
| 298 | + ), |
| 299 | + ) |
| 300 | + assert result == ({"search": [{"id": "42"}]}, None) |
| 301 | + assert resolver_kwargs == {"search_filters": {"page_size": 25}} |
| 302 | + |
216 | 303 | def pass_error_from_resolver_wrapped_as_located_graphql_error():
|
217 | 304 | def resolve(_obj, _info):
|
218 | 305 | raise ValueError("Some error")
|
|
0 commit comments