Skip to content

Commit 4df0319

Browse files
authored
Merge pull request graphql-java#3709 from graphql-java/extra_default_values_tests
Added some more tests around providing default values
2 parents cbfef8a + beef012 commit 4df0319

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package graphql
2+
3+
import graphql.schema.DataFetcher
4+
import spock.lang.Specification
5+
6+
import static graphql.ExecutionInput.newExecutionInput
7+
8+
class DefaultValuesTest extends Specification {
9+
10+
def "provided values override defaults"() {
11+
def sdl = """
12+
type Query {
13+
myField(deleted: Boolean = true) : String
14+
myField2(deleted: Boolean = true) : String
15+
}
16+
"""
17+
18+
def df = { env ->
19+
return "dataFetcherArg=" + env.getArgument("deleted")
20+
} as DataFetcher
21+
def graphQL = TestUtil.graphQL(sdl, [Query: [
22+
myField : df,
23+
myField2: df]]
24+
).build()
25+
26+
//
27+
// The variable is present in the variables map and its explicitly null
28+
//
29+
// https://spec.graphql.org/draft/#sec-Coercing-Variable-Values
30+
//
31+
when:
32+
def ei = newExecutionInput('''
33+
query myQuery($deleted: Boolean = false) {
34+
myField(deleted : $deleted)
35+
}
36+
''').variables(["deleted": null]).build()
37+
def er = graphQL.execute(ei)
38+
39+
then:
40+
er.errors.isEmpty()
41+
er.data == [myField: "dataFetcherArg=null"]
42+
43+
//
44+
// The variable is present in the variables map and its explicitly a value
45+
//
46+
// https://spec.graphql.org/draft/#sec-Coercing-Variable-Values
47+
//
48+
when:
49+
ei = newExecutionInput('''
50+
query myQuery($deleted: Boolean = false) {
51+
myField(deleted : $deleted)
52+
}
53+
''').variables(["deleted": true]).build()
54+
er = graphQL.execute(ei)
55+
56+
then:
57+
er.errors.isEmpty()
58+
er.data == [myField: "dataFetcherArg=true"]
59+
60+
//
61+
// The variable is NOT present in the variables map it should use a default
62+
// value from the variable declaration
63+
//
64+
// https://spec.graphql.org/draft/#sec-Coercing-Variable-Values
65+
//
66+
when:
67+
ei = newExecutionInput('''
68+
query myQuery($deleted: Boolean = false) {
69+
myField(deleted : $deleted)
70+
}
71+
''').variables(["NotProvided": "valueNotProvided"]).build()
72+
er = graphQL.execute(ei)
73+
74+
then:
75+
er.errors.isEmpty()
76+
er.data == [myField: "dataFetcherArg=false"]
77+
78+
//
79+
// The variable is NOT present in the variables map and a variable is NOT used
80+
// it should use a default value from the field declaration
81+
//
82+
//
83+
when:
84+
ei = newExecutionInput('''
85+
query myQuery($deleted: Boolean = false) {
86+
myField
87+
myField2(deleted : $deleted)
88+
}
89+
''').variables(["NotProvided": "valueNotProvided"]).build()
90+
er = graphQL.execute(ei)
91+
92+
then:
93+
er.errors.isEmpty()
94+
er.data == [myField : "dataFetcherArg=true",
95+
myField2: "dataFetcherArg=false"]
96+
97+
//
98+
// If there are no variables on the query operation
99+
// it should use a default value from the field declaration
100+
// or literals provided
101+
//
102+
when:
103+
ei = newExecutionInput('''
104+
query myQuery {
105+
myField(deleted :false)
106+
myField2
107+
}
108+
''').variables(["NotProvided": "valueNotProvided"]).build()
109+
er = graphQL.execute(ei)
110+
111+
then:
112+
er.errors.isEmpty()
113+
er.data == [myField : "dataFetcherArg=false",
114+
myField2: "dataFetcherArg=true"]
115+
}
116+
}

0 commit comments

Comments
 (0)