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
|
from functools import partial
from graphql.validation.rules.unique_argument_definition_names import (
UniqueArgumentDefinitionNamesRule,
)
from .harness import assert_sdl_validation_errors
assert_sdl_errors = partial(
assert_sdl_validation_errors, UniqueArgumentDefinitionNamesRule
)
assert_sdl_valid = partial(assert_sdl_errors, errors=[])
def describe_validate_unique_argument_definition_names():
def no_args():
assert_sdl_valid(
"""
type SomeObject {
someField: String
}
interface SomeInterface {
someField: String
}
directive @someDirective on QUERY
"""
)
def one_argument():
assert_sdl_valid(
"""
type SomeObject {
someField(foo: String): String
}
interface SomeInterface {
someField(foo: String): String
}
extend type SomeObject {
anotherField(foo: String): String
}
extend interface SomeInterface {
anotherField(foo: String): String
}
directive @someDirective(foo: String) on QUERY
"""
)
def multiple_arguments():
assert_sdl_valid(
"""
type SomeObject {
someField(
foo: String
bar: String
): String
}
interface SomeInterface {
someField(
foo: String
bar: String
): String
}
extend type SomeObject {
anotherField(
foo: String
bar: String
): String
}
extend interface SomeInterface {
anotherField(
foo: String
bar: String
): String
}
directive @someDirective(
foo: String
bar: String
) on QUERY
"""
)
def duplicating_arguments():
assert_sdl_errors(
"""
type SomeObject {
someField(
foo: String
bar: String
foo: String
): String
}
interface SomeInterface {
someField(
foo: String
bar: String
foo: String
): String
}
extend type SomeObject {
anotherField(
foo: String
bar: String
bar: String
): String
}
extend interface SomeInterface {
anotherField(
bar: String
foo: String
foo: String
): String
}
directive @someDirective(
foo: String
bar: String
foo: String
) on QUERY
""",
[
{
"message": "Argument 'SomeObject.someField(foo:)'"
" can only be defined once.",
"locations": [(4, 17), (6, 17)],
},
{
"message": "Argument 'SomeInterface.someField(foo:)'"
" can only be defined once.",
"locations": [(12, 17), (14, 17)],
},
{
"message": "Argument 'SomeObject.anotherField(bar:)'"
" can only be defined once.",
"locations": [(21, 17), (22, 17)],
},
{
"message": "Argument 'SomeInterface.anotherField(foo:)'"
" can only be defined once.",
"locations": [(29, 17), (30, 17)],
},
{
"message": "Argument '@someDirective(foo:)'"
" can only be defined once.",
"locations": [(35, 15), (37, 15)],
},
],
)
|