Skip to content

Commit aafe5c3

Browse files
committed
Improved order preserving
1 parent 3d33e92 commit aafe5c3

File tree

2 files changed

+107
-2
lines changed

2 files changed

+107
-2
lines changed

tests/connection/test_connection.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from collections import namedtuple
23
from pytest import raises
34
from graphql.core import graphql
@@ -33,6 +34,7 @@
3334
userType = GraphQLObjectType(
3435
'User',
3536
fields= lambda: {
37+
'id': GraphQLField(GraphQLString, resolver=lambda *_: 'id'),
3638
'name': GraphQLField(GraphQLString),
3739
'friends': GraphQLField(
3840
friendConnection,
@@ -111,3 +113,44 @@ def test_include_connections_and_edge_types():
111113
result = graphql(schema, query)
112114
assert not result.errors
113115
assert result.data == expected
116+
117+
118+
def test_edges_preserve_order1():
119+
query = '''
120+
query FriendsQuery {
121+
user {
122+
friends(first: 1) {
123+
edges {
124+
node {
125+
name
126+
id
127+
}
128+
}
129+
}
130+
}
131+
}
132+
'''
133+
result = graphql(schema, query)
134+
assert not result.errors
135+
assert json.dumps(result.data) == '{"user": {"friends": {"edges": [{"node": {"name": "Dan", "id": "id"}}]}}}'
136+
137+
138+
def test_edges_preserve_order2():
139+
query = '''
140+
query FriendsQuery {
141+
user {
142+
friends(first: 1) {
143+
edges {
144+
node {
145+
id
146+
name
147+
}
148+
}
149+
}
150+
}
151+
}
152+
'''
153+
result = graphql(schema, query)
154+
assert not result.errors
155+
assert json.dumps(result.data) == '{"user": {"friends": {"edges": [{"node": {"id": "id", "name": "Dan"}}]}}}'
156+

tests/node/test_node.py

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from collections import namedtuple
23
from pytest import raises
34
from graphql.core import graphql
@@ -37,7 +38,7 @@ def getNode(id, info):
3738
return photoData[id]
3839

3940
def getNodeType(obj):
40-
if obj.id in userData:
41+
if str(obj.id) in userData:
4142
return userType
4243
else:
4344
return photoType
@@ -49,7 +50,7 @@ def getNodeType(obj):
4950
'User',
5051
fields= lambda: {
5152
'id': GraphQLField(GraphQLNonNull(GraphQLID)),
52-
'name': GraphQLField(GraphQLString),
53+
'name': GraphQLField(GraphQLString, resolver=lambda *_: 'name'),
5354
},
5455
interfaces= [nodeInterface]
5556
)
@@ -67,11 +68,13 @@ def getNodeType(obj):
6768
'Query',
6869
fields= lambda: {
6970
'node': nodeField,
71+
'user': GraphQLField(userType, resolver=lambda *_: userData['1']),
7072
}
7173
)
7274

7375
schema = GraphQLSchema(query=queryType)
7476

77+
7578
def test_include_connections_and_edge_types():
7679
query = '''
7780
{
@@ -89,3 +92,62 @@ def test_include_connections_and_edge_types():
8992
assert not result.errors
9093
assert result.data == expected
9194

95+
96+
def test_preserves_order1():
97+
query = '''
98+
{
99+
node(id: "1") {
100+
... on User {
101+
name
102+
id
103+
}
104+
}
105+
}
106+
'''
107+
result = graphql(schema, query)
108+
assert not result.errors
109+
assert json.dumps(result.data) == '{"node": {"name": "name", "id": "1"}}'
110+
111+
112+
def test_preserves_order2():
113+
query = '''
114+
{
115+
node(id: "1") {
116+
... on User {
117+
id
118+
name
119+
}
120+
}
121+
}
122+
'''
123+
result = graphql(schema, query)
124+
assert not result.errors
125+
assert json.dumps(result.data) == '{"node": {"id": "1", "name": "name"}}'
126+
127+
128+
def test_preserves_order_general1():
129+
query = '''
130+
{
131+
user {
132+
id
133+
name
134+
}
135+
}
136+
'''
137+
result = graphql(schema, query)
138+
assert not result.errors
139+
assert json.dumps(result.data) == '{"user": {"id": "1", "name": "name"}}'
140+
141+
142+
def test_preserves_order_general2():
143+
query = '''
144+
{
145+
user {
146+
name
147+
id
148+
}
149+
}
150+
'''
151+
result = graphql(schema, query)
152+
assert not result.errors
153+
assert json.dumps(result.data) == '{"user": {"name": "name", "id": "1"}}'

0 commit comments

Comments
 (0)