Skip to content

Commit ba3075c

Browse files
committed
Allow nested objects with similar keys.
Closes #34
1 parent 90e5b9a commit ba3075c

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

graphql/core/validation/rules/unique_input_field_names.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@
33

44

55
class UniqueInputFieldNames(ValidationRule):
6-
__slots__ = 'known_names',
6+
__slots__ = 'known_names', 'known_names_stack'
77

88
def __init__(self, context):
99
super(UniqueInputFieldNames, self).__init__(context)
1010
self.known_names = {}
11+
self.known_names_stack = []
1112

1213
def enter_ObjectValue(self, node, key, parent, path, ancestors):
14+
self.known_names_stack.append(self.known_names)
1315
self.known_names = {}
1416

17+
def leave_ObjectValue(self, node, key, parent, path, ancestors):
18+
self.known_names = self.known_names_stack.pop()
19+
1520
def enter_ObjectField(self, node, key, parent, path, ancestors):
1621
field_name = node.name.value
1722
if field_name in self.known_names:

tests/core_validation/test_unique_input_field_names.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ def test_multiple_input_object_fields():
3434
''')
3535

3636

37+
def test_it_allows_for_nested_input_objects_with_similar_fields():
38+
expect_passes_rule(UniqueInputFieldNames, '''
39+
{
40+
field(arg: {
41+
deep: {
42+
deep: {
43+
id: 1
44+
}
45+
id: 1
46+
}
47+
id: 1
48+
})
49+
}
50+
''')
51+
52+
3753
def test_duplicate_input_object_fields():
3854
expect_fails_rule(UniqueInputFieldNames, '''
3955
{
@@ -52,4 +68,4 @@ def test_many_duplicate_input_object_fields():
5268
''', [
5369
duplicate_field('f1', L(3, 22), L(3, 35)),
5470
duplicate_field('f1', L(3, 22), L(3, 48))
55-
])
71+
])

0 commit comments

Comments
 (0)