graphql 0.18.4 → 0.18.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/graphql.rb +1 -2
- data/lib/graphql/argument.rb +2 -2
- data/lib/graphql/base_type.rb +17 -0
- data/lib/graphql/define.rb +1 -1
- data/lib/graphql/directive.rb +6 -0
- data/lib/graphql/enum_type.rb +48 -4
- data/lib/graphql/field.rb +81 -19
- data/lib/graphql/field/resolve.rb +1 -1
- data/lib/graphql/input_object_type.rb +17 -3
- data/lib/graphql/interface_type.rb +12 -2
- data/lib/graphql/list_type.rb +23 -4
- data/lib/graphql/non_null_type.rb +27 -2
- data/lib/graphql/query.rb +0 -1
- data/lib/graphql/query/arguments.rb +1 -1
- data/lib/graphql/query/serial_execution/value_resolution.rb +3 -1
- data/lib/graphql/relay/global_node_identification.rb +29 -16
- data/lib/graphql/scalar_type.rb +24 -1
- data/lib/graphql/schema.rb +109 -19
- data/lib/graphql/schema/printer.rb +3 -3
- data/lib/graphql/static_validation/rules/argument_literals_are_compatible.rb +1 -1
- data/lib/graphql/union_type.rb +19 -6
- data/lib/graphql/version.rb +1 -1
- data/readme.md +5 -6
- data/spec/graphql/analysis/query_complexity_spec.rb +1 -1
- data/spec/graphql/argument_spec.rb +1 -1
- data/spec/graphql/field_spec.rb +1 -1
- data/spec/graphql/interface_type_spec.rb +0 -19
- data/spec/graphql/query/context_spec.rb +1 -1
- data/spec/graphql/query/executor_spec.rb +1 -1
- data/spec/graphql/query/serial_execution/value_resolution_spec.rb +8 -4
- data/spec/graphql/relay/array_connection_spec.rb +17 -17
- data/spec/graphql/relay/connection_type_spec.rb +1 -1
- data/spec/graphql/relay/global_node_identification_spec.rb +3 -21
- data/spec/graphql/relay/mutation_spec.rb +2 -2
- data/spec/graphql/relay/page_info_spec.rb +9 -9
- data/spec/graphql/relay/relation_connection_spec.rb +31 -31
- data/spec/graphql/schema/printer_spec.rb +1 -1
- data/spec/graphql/schema/reduce_types_spec.rb +1 -1
- data/spec/graphql/schema/timeout_middleware_spec.rb +1 -1
- data/spec/graphql/schema_spec.rb +18 -0
- data/spec/graphql/static_validation/rules/argument_literals_are_compatible_spec.rb +6 -6
- data/spec/graphql/union_type_spec.rb +0 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/support/dairy_app.rb +13 -8
- data/spec/support/star_wars_schema.rb +18 -16
- metadata +2 -2
@@ -8,11 +8,6 @@ describe GraphQL::InterfaceType do
|
|
8
8
|
assert_equal([CheeseType, HoneyType, MilkType], DummySchema.possible_types(interface))
|
9
9
|
end
|
10
10
|
|
11
|
-
it "resolves types for objects" do
|
12
|
-
assert_equal(CheeseType, interface.resolve_type(CHEESES.values.first, dummy_query_context))
|
13
|
-
assert_equal(MilkType, interface.resolve_type(MILKS.values.first, dummy_query_context))
|
14
|
-
end
|
15
|
-
|
16
11
|
describe "query evaluation" do
|
17
12
|
let(:result) { DummySchema.execute(query_string, variables: {"cheeseId" => 2})}
|
18
13
|
let(:query_string) {%|
|
@@ -40,20 +35,6 @@ describe GraphQL::InterfaceType do
|
|
40
35
|
end
|
41
36
|
end
|
42
37
|
|
43
|
-
describe '#resolve_type' do
|
44
|
-
let(:interface) {
|
45
|
-
GraphQL::InterfaceType.define do
|
46
|
-
resolve_type -> (object, ctx) {
|
47
|
-
:custom_resolve
|
48
|
-
}
|
49
|
-
end
|
50
|
-
}
|
51
|
-
|
52
|
-
it "can be overriden in the definition" do
|
53
|
-
assert_equal(interface.resolve_type(123, nil), :custom_resolve)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
38
|
describe "fragments" do
|
58
39
|
let(:query_string) {%|
|
59
40
|
{
|
@@ -16,7 +16,7 @@ describe GraphQL::Query::Context do
|
|
16
16
|
resolve -> (target, args, ctx) { ctx.query.class.name }
|
17
17
|
end
|
18
18
|
}}
|
19
|
-
let(:schema) { GraphQL::Schema.
|
19
|
+
let(:schema) { GraphQL::Schema.define(query: query_type, mutation: nil)}
|
20
20
|
let(:result) { schema.execute(query_string, context: {"some_key" => "some value"})}
|
21
21
|
|
22
22
|
describe "access to passed-in values" do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe GraphQL::Query::SerialExecution::ValueResolution do
|
4
|
-
let(:
|
4
|
+
let(:schema) {
|
5
5
|
day_of_week_enum = GraphQL::EnumType.define do
|
6
6
|
name "DayOfWeek"
|
7
7
|
value("MONDAY", value: 0)
|
@@ -16,10 +16,9 @@ describe GraphQL::Query::SerialExecution::ValueResolution do
|
|
16
16
|
interface = GraphQL::InterfaceType.define do
|
17
17
|
name "SomeInterface"
|
18
18
|
field :someField, !types.Int
|
19
|
-
resolve_type ->(obj, ctx) { nil }
|
20
19
|
end
|
21
20
|
|
22
|
-
GraphQL::ObjectType.define do
|
21
|
+
query_root = GraphQL::ObjectType.define do
|
23
22
|
name "Query"
|
24
23
|
field :tomorrow, day_of_week_enum do
|
25
24
|
argument :today, day_of_week_enum
|
@@ -29,8 +28,13 @@ describe GraphQL::Query::SerialExecution::ValueResolution do
|
|
29
28
|
resolve ->(obj, args, ctx) { Object.new }
|
30
29
|
end
|
31
30
|
end
|
31
|
+
|
32
|
+
GraphQL::Schema.define do
|
33
|
+
query(query_root)
|
34
|
+
resolve_type -> (obj, ctx) { nil }
|
35
|
+
end
|
32
36
|
}
|
33
|
-
|
37
|
+
|
34
38
|
let(:result) { schema.execute(
|
35
39
|
query_string,
|
36
40
|
)}
|
@@ -33,7 +33,7 @@ describe GraphQL::Relay::ArrayConnection do
|
|
33
33
|
|}
|
34
34
|
|
35
35
|
it 'limits the result' do
|
36
|
-
result =
|
36
|
+
result = star_wars_query(query_string, "first" => 2)
|
37
37
|
number_of_ships = get_names(result).length
|
38
38
|
assert_equal(2, number_of_ships)
|
39
39
|
assert_equal(true, result["data"]["rebels"]["ships"]["pageInfo"]["hasNextPage"])
|
@@ -41,19 +41,19 @@ describe GraphQL::Relay::ArrayConnection do
|
|
41
41
|
assert_equal("MQ==", result["data"]["rebels"]["ships"]["pageInfo"]["startCursor"])
|
42
42
|
assert_equal("Mg==", result["data"]["rebels"]["ships"]["pageInfo"]["endCursor"])
|
43
43
|
|
44
|
-
result =
|
44
|
+
result = star_wars_query(query_string, "first" => 3)
|
45
45
|
number_of_ships = get_names(result).length
|
46
46
|
assert_equal(3, number_of_ships)
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'provides pageInfo' do
|
50
|
-
result =
|
50
|
+
result = star_wars_query(query_string, "first" => 2)
|
51
51
|
assert_equal(true, result["data"]["rebels"]["ships"]["pageInfo"]["hasNextPage"])
|
52
52
|
assert_equal(false, result["data"]["rebels"]["ships"]["pageInfo"]["hasPreviousPage"])
|
53
53
|
assert_equal("MQ==", result["data"]["rebels"]["ships"]["pageInfo"]["startCursor"])
|
54
54
|
assert_equal("Mg==", result["data"]["rebels"]["ships"]["pageInfo"]["endCursor"])
|
55
55
|
|
56
|
-
result =
|
56
|
+
result = star_wars_query(query_string, "first" => 100)
|
57
57
|
assert_equal(false, result["data"]["rebels"]["ships"]["pageInfo"]["hasNextPage"])
|
58
58
|
assert_equal(false, result["data"]["rebels"]["ships"]["pageInfo"]["hasPreviousPage"])
|
59
59
|
assert_equal("MQ==", result["data"]["rebels"]["ships"]["pageInfo"]["startCursor"])
|
@@ -61,38 +61,38 @@ describe GraphQL::Relay::ArrayConnection do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'slices the result' do
|
64
|
-
result =
|
64
|
+
result = star_wars_query(query_string, "first" => 1)
|
65
65
|
assert_equal(["X-Wing"], get_names(result))
|
66
66
|
|
67
67
|
# After the last result, find the next 2:
|
68
68
|
last_cursor = get_last_cursor(result)
|
69
69
|
|
70
|
-
result =
|
70
|
+
result = star_wars_query(query_string, "after" => last_cursor, "first" => 2)
|
71
71
|
assert_equal(["Y-Wing", "A-Wing"], get_names(result))
|
72
72
|
|
73
73
|
# After the last result, find the next 2:
|
74
74
|
last_cursor = get_last_cursor(result)
|
75
75
|
|
76
|
-
result =
|
76
|
+
result = star_wars_query(query_string, "after" => last_cursor, "first" => 2)
|
77
77
|
assert_equal(["Millenium Falcon", "Home One"], get_names(result))
|
78
78
|
|
79
|
-
result =
|
79
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 2)
|
80
80
|
assert_equal(["X-Wing", "Y-Wing"], get_names(result))
|
81
81
|
end
|
82
82
|
|
83
83
|
it 'applies custom arguments' do
|
84
|
-
result =
|
84
|
+
result = star_wars_query(query_string, "nameIncludes" => "Wing", "first" => 2)
|
85
85
|
names = get_names(result)
|
86
86
|
assert_equal(2, names.length)
|
87
87
|
|
88
88
|
after = get_last_cursor(result)
|
89
|
-
result =
|
89
|
+
result = star_wars_query(query_string, "nameIncludes" => "Wing", "after" => after, "first" => 3)
|
90
90
|
names = get_names(result)
|
91
91
|
assert_equal(1, names.length)
|
92
92
|
end
|
93
93
|
|
94
94
|
it 'works without first/last/after/before' do
|
95
|
-
result =
|
95
|
+
result = star_wars_query(query_string)
|
96
96
|
|
97
97
|
assert_equal(false, result["data"]["rebels"]["ships"]["pageInfo"]["hasNextPage"])
|
98
98
|
assert_equal(false, result["data"]["rebels"]["ships"]["pageInfo"]["hasPreviousPage"])
|
@@ -130,12 +130,12 @@ describe GraphQL::Relay::ArrayConnection do
|
|
130
130
|
|}
|
131
131
|
|
132
132
|
it "applies to queries by `first`" do
|
133
|
-
result =
|
133
|
+
result = star_wars_query(query_string, "first" => 100)
|
134
134
|
assert_equal(["Yavin", "Echo Base"], get_names(result))
|
135
135
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
136
136
|
|
137
137
|
# Max page size is applied _without_ `first`, also
|
138
|
-
result =
|
138
|
+
result = star_wars_query(query_string)
|
139
139
|
assert_equal(["Yavin", "Echo Base"], get_names(result))
|
140
140
|
assert_equal(false, get_page_info(result)["hasNextPage"], "hasNextPage is false when first is not specified")
|
141
141
|
end
|
@@ -143,20 +143,20 @@ describe GraphQL::Relay::ArrayConnection do
|
|
143
143
|
it "applies to queries by `last`" do
|
144
144
|
last_cursor = "Ng=="
|
145
145
|
second_to_last_two_names = ["Death Star", "Shield Generator"]
|
146
|
-
result =
|
146
|
+
result = star_wars_query(query_string, "last" => 100, "before" => last_cursor)
|
147
147
|
assert_equal(second_to_last_two_names, get_names(result))
|
148
148
|
assert_equal(true, get_page_info(result)["hasPreviousPage"])
|
149
149
|
|
150
|
-
result =
|
150
|
+
result = star_wars_query(query_string, "before" => last_cursor)
|
151
151
|
assert_equal(second_to_last_two_names, get_names(result))
|
152
152
|
assert_equal(false, get_page_info(result)["hasPreviousPage"], "hasPreviousPage is false when last is not specified")
|
153
153
|
|
154
154
|
third_cursor = "Mw=="
|
155
155
|
first_and_second_names = ["Yavin", "Echo Base"]
|
156
|
-
result =
|
156
|
+
result = star_wars_query(query_string, "last" => 100, "before" => third_cursor)
|
157
157
|
assert_equal(first_and_second_names, get_names(result))
|
158
158
|
|
159
|
-
result =
|
159
|
+
result = star_wars_query(query_string, "before" => third_cursor)
|
160
160
|
assert_equal(first_and_second_names, get_names(result))
|
161
161
|
end
|
162
162
|
end
|
@@ -24,7 +24,7 @@ describe GraphQL::Relay::ConnectionType do
|
|
24
24
|
|}
|
25
25
|
|
26
26
|
it "uses the custom edge and custom connection" do
|
27
|
-
result =
|
27
|
+
result = star_wars_query(query_string)
|
28
28
|
bases = result["data"]["rebels"]["basesWithCustomEdge"]
|
29
29
|
assert_equal 300, bases["totalCountTimes100"]
|
30
30
|
assert_equal 'basesWithCustomEdge', bases["fieldName"]
|
@@ -5,7 +5,7 @@ describe GraphQL::Relay::GlobalNodeIdentification do
|
|
5
5
|
describe 'NodeField' do
|
6
6
|
it 'finds objects by id' do
|
7
7
|
global_id = node_identification.to_global_id("Faction", "1")
|
8
|
-
result =
|
8
|
+
result = star_wars_query(%|{
|
9
9
|
node(id: "#{global_id}") {
|
10
10
|
id,
|
11
11
|
... on Faction {
|
@@ -107,7 +107,7 @@ describe GraphQL::Relay::GlobalNodeIdentification do
|
|
107
107
|
|
108
108
|
describe "generating IDs" do
|
109
109
|
it "Applies custom-defined ID generation" do
|
110
|
-
result =
|
110
|
+
result = star_wars_query(%| { largestBase { id } }|)
|
111
111
|
generated_id = result["data"]["largestBase"]["id"]
|
112
112
|
assert_equal "Base/3", generated_id
|
113
113
|
end
|
@@ -115,7 +115,7 @@ describe GraphQL::Relay::GlobalNodeIdentification do
|
|
115
115
|
|
116
116
|
describe "fetching by ID" do
|
117
117
|
it "Deconstructs the ID by the custom proc" do
|
118
|
-
result =
|
118
|
+
result = star_wars_query(%| { node(id: "Base/1") { ... on Base { name } } }|)
|
119
119
|
base_name = result["data"]["node"]["name"]
|
120
120
|
assert_equal "Yavin", base_name
|
121
121
|
end
|
@@ -128,22 +128,4 @@ describe GraphQL::Relay::GlobalNodeIdentification do
|
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
131
|
-
|
132
|
-
describe "type_from_object" do
|
133
|
-
describe "when the return value is nil" do
|
134
|
-
it "returns nil" do
|
135
|
-
result = node_identification.type_from_object(123)
|
136
|
-
assert_equal(nil, result)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
describe "when the return value is not a BaseType" do
|
141
|
-
it "raises an error " do
|
142
|
-
err = assert_raises(RuntimeError) {
|
143
|
-
node_identification.type_from_object(:test_error)
|
144
|
-
}
|
145
|
-
assert_includes err.message, "not_a_type (Symbol)"
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
131
|
end
|
@@ -26,7 +26,7 @@ describe GraphQL::Relay::Mutation do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it "returns the result & clientMutationId" do
|
29
|
-
result =
|
29
|
+
result = star_wars_query(query_string, "clientMutationId" => "1234")
|
30
30
|
expected = {"data" => {
|
31
31
|
"introduceShip" => {
|
32
32
|
"clientMutationId" => "1234",
|
@@ -43,7 +43,7 @@ describe GraphQL::Relay::Mutation do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it "doesn't require a clientMutationId to perform mutations" do
|
46
|
-
result =
|
46
|
+
result = star_wars_query(query_string)
|
47
47
|
new_ship_name = result["data"]["introduceShip"]["shipEdge"]["node"]["name"]
|
48
48
|
assert_equal("Bagel", new_ship_name)
|
49
49
|
end
|
@@ -14,7 +14,7 @@ describe GraphQL::Relay::PageInfo do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
let(:cursor_of_last_base) {
|
17
|
-
result =
|
17
|
+
result = star_wars_query(query_string, "first" => 100)
|
18
18
|
last_cursor = get_last_cursor(result)
|
19
19
|
}
|
20
20
|
|
@@ -38,14 +38,14 @@ describe GraphQL::Relay::PageInfo do
|
|
38
38
|
|
39
39
|
describe 'hasNextPage / hasPreviousPage' do
|
40
40
|
it "hasNextPage is true if there are more items" do
|
41
|
-
result =
|
41
|
+
result = star_wars_query(query_string, "first" => 2)
|
42
42
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
43
43
|
assert_equal(false, get_page_info(result)["hasPreviousPage"], "hasPreviousPage is false if 'last' is missing")
|
44
44
|
assert_equal("MQ==", get_page_info(result)["startCursor"])
|
45
45
|
assert_equal("Mg==", get_page_info(result)["endCursor"])
|
46
46
|
|
47
47
|
last_cursor = get_last_cursor(result)
|
48
|
-
result =
|
48
|
+
result = star_wars_query(query_string, "first" => 100, "after" => last_cursor)
|
49
49
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
50
50
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
51
51
|
assert_equal("Mw==", get_page_info(result)["startCursor"])
|
@@ -53,13 +53,13 @@ describe GraphQL::Relay::PageInfo do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "hasPreviousPage if there are more items" do
|
56
|
-
result =
|
56
|
+
result = star_wars_query(query_string, "last" => 100, "before" => cursor_of_last_base)
|
57
57
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
58
58
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
59
59
|
assert_equal("MQ==", get_page_info(result)["startCursor"])
|
60
60
|
assert_equal("Mg==", get_page_info(result)["endCursor"])
|
61
61
|
|
62
|
-
result =
|
62
|
+
result = star_wars_query(query_string, "last" => 1, "before" => cursor_of_last_base)
|
63
63
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
64
64
|
assert_equal(true, get_page_info(result)["hasPreviousPage"])
|
65
65
|
assert_equal("Mg==", get_page_info(result)["startCursor"])
|
@@ -67,7 +67,7 @@ describe GraphQL::Relay::PageInfo do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
it "has both if first and last are present" do
|
70
|
-
result =
|
70
|
+
result = star_wars_query(query_string, "last" => 1, "first" => 1, "before" => cursor_of_last_base)
|
71
71
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
72
72
|
assert_equal(true, get_page_info(result)["hasPreviousPage"])
|
73
73
|
assert_equal("Mg==", get_page_info(result)["startCursor"])
|
@@ -75,7 +75,7 @@ describe GraphQL::Relay::PageInfo do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it "startCursor and endCursor are the cursors of the first and last edge" do
|
78
|
-
result =
|
78
|
+
result = star_wars_query(query_string, "first" => 2)
|
79
79
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
80
80
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
81
81
|
assert_equal("MQ==", get_page_info(result)["startCursor"])
|
@@ -83,7 +83,7 @@ describe GraphQL::Relay::PageInfo do
|
|
83
83
|
assert_equal("MQ==", get_first_cursor(result))
|
84
84
|
assert_equal("Mg==", get_last_cursor(result))
|
85
85
|
|
86
|
-
result =
|
86
|
+
result = star_wars_query(query_string, "first" => 1, "after" => get_page_info(result)["endCursor"])
|
87
87
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
88
88
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
89
89
|
assert_equal("Mw==", get_page_info(result)["startCursor"])
|
@@ -91,7 +91,7 @@ describe GraphQL::Relay::PageInfo do
|
|
91
91
|
assert_equal("Mw==", get_first_cursor(result))
|
92
92
|
assert_equal("Mw==", get_last_cursor(result))
|
93
93
|
|
94
|
-
result =
|
94
|
+
result = star_wars_query(query_string, "last" => 1, "before" => get_page_info(result)["endCursor"])
|
95
95
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
96
96
|
assert_equal(true, get_page_info(result)["hasPreviousPage"])
|
97
97
|
assert_equal("Mg==", get_page_info(result)["startCursor"])
|
@@ -46,7 +46,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
46
46
|
|}
|
47
47
|
|
48
48
|
it 'limits the result' do
|
49
|
-
result =
|
49
|
+
result = star_wars_query(query_string, "first" => 2)
|
50
50
|
assert_equal(2, get_names(result).length)
|
51
51
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
52
52
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
@@ -55,7 +55,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
55
55
|
assert_equal("MQ==", get_first_cursor(result))
|
56
56
|
assert_equal("Mg==", get_last_cursor(result))
|
57
57
|
|
58
|
-
result =
|
58
|
+
result = star_wars_query(query_string, "first" => 3)
|
59
59
|
assert_equal(3, get_names(result).length)
|
60
60
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
61
61
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
@@ -66,7 +66,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
it 'provides custom fields on the connection type' do
|
69
|
-
result =
|
69
|
+
result = star_wars_query(query_string, "first" => 2)
|
70
70
|
assert_equal(
|
71
71
|
Base.where(faction_id: 2).count,
|
72
72
|
result["data"]["empire"]["bases"]["totalCount"]
|
@@ -74,44 +74,44 @@ describe GraphQL::Relay::RelationConnection do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
it 'slices the result' do
|
77
|
-
result =
|
77
|
+
result = star_wars_query(query_string, "first" => 2)
|
78
78
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
79
79
|
|
80
80
|
# After the last result, find the next 2:
|
81
81
|
last_cursor = get_last_cursor(result)
|
82
82
|
|
83
|
-
result =
|
83
|
+
result = star_wars_query(query_string, "after" => last_cursor, "first" => 2)
|
84
84
|
assert_equal(["Headquarters"], get_names(result))
|
85
85
|
|
86
86
|
last_cursor = get_last_cursor(result)
|
87
87
|
|
88
|
-
result =
|
88
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 1)
|
89
89
|
assert_equal(["Shield Generator"], get_names(result))
|
90
90
|
|
91
|
-
result =
|
91
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 2)
|
92
92
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
93
93
|
|
94
|
-
result =
|
94
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 10)
|
95
95
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
96
96
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it "applies custom arguments" do
|
100
|
-
result =
|
100
|
+
result = star_wars_query(query_string, "first" => 1, "nameIncludes" => "ea")
|
101
101
|
assert_equal(["Death Star"], get_names(result))
|
102
102
|
|
103
103
|
after = get_last_cursor(result)
|
104
104
|
|
105
|
-
result =
|
105
|
+
result = star_wars_query(query_string, "first" => 2, "nameIncludes" => "ea", "after" => after )
|
106
106
|
assert_equal(["Headquarters"], get_names(result))
|
107
107
|
before = get_last_cursor(result)
|
108
108
|
|
109
|
-
result =
|
109
|
+
result = star_wars_query(query_string, "last" => 1, "nameIncludes" => "ea", "before" => before)
|
110
110
|
assert_equal(["Death Star"], get_names(result))
|
111
111
|
end
|
112
112
|
|
113
113
|
it 'works without first/last/after/before' do
|
114
|
-
result =
|
114
|
+
result = star_wars_query(query_string)
|
115
115
|
|
116
116
|
assert_equal(3, result["data"]["empire"]["bases"]["edges"].length)
|
117
117
|
end
|
@@ -143,12 +143,12 @@ describe GraphQL::Relay::RelationConnection do
|
|
143
143
|
|}
|
144
144
|
|
145
145
|
it "applies to queries by `first`" do
|
146
|
-
result =
|
146
|
+
result = star_wars_query(query_string, "first" => 100)
|
147
147
|
assert_equal(2, result["data"]["empire"]["bases"]["edges"].size)
|
148
148
|
assert_equal(true, result["data"]["empire"]["bases"]["pageInfo"]["hasNextPage"])
|
149
149
|
|
150
150
|
# Max page size is applied _without_ `first`, also
|
151
|
-
result =
|
151
|
+
result = star_wars_query(query_string)
|
152
152
|
assert_equal(2, result["data"]["empire"]["bases"]["edges"].size)
|
153
153
|
assert_equal(false, result["data"]["empire"]["bases"]["pageInfo"]["hasNextPage"], "hasNextPage is false when first is not specified")
|
154
154
|
end
|
@@ -156,20 +156,20 @@ describe GraphQL::Relay::RelationConnection do
|
|
156
156
|
it "applies to queries by `last`" do
|
157
157
|
last_cursor = "Ng=="
|
158
158
|
second_to_last_two_names = ["Death Star", "Shield Generator"]
|
159
|
-
result =
|
159
|
+
result = star_wars_query(query_string, "last" => 100, "before" => last_cursor)
|
160
160
|
assert_equal(second_to_last_two_names, get_names(result))
|
161
161
|
assert_equal(true, result["data"]["empire"]["bases"]["pageInfo"]["hasPreviousPage"])
|
162
162
|
|
163
|
-
result =
|
163
|
+
result = star_wars_query(query_string, "before" => last_cursor)
|
164
164
|
assert_equal(second_to_last_two_names, get_names(result))
|
165
165
|
assert_equal(false, result["data"]["empire"]["bases"]["pageInfo"]["hasPreviousPage"], "hasPreviousPage is false when last is not specified")
|
166
166
|
|
167
167
|
third_cursor = "Mw=="
|
168
168
|
first_and_second_names = ["Yavin", "Echo Base"]
|
169
|
-
result =
|
169
|
+
result = star_wars_query(query_string, "last" => 100, "before" => third_cursor)
|
170
170
|
assert_equal(first_and_second_names, get_names(result))
|
171
171
|
|
172
|
-
result =
|
172
|
+
result = star_wars_query(query_string, "before" => third_cursor)
|
173
173
|
assert_equal(first_and_second_names, get_names(result))
|
174
174
|
end
|
175
175
|
end
|
@@ -189,7 +189,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
189
189
|
}
|
190
190
|
}|}
|
191
191
|
it "uses default resolve" do
|
192
|
-
result =
|
192
|
+
result = star_wars_query(query_string)
|
193
193
|
bases = result["data"]["empire"]["basesClone"]["edges"]
|
194
194
|
assert_equal(3, bases.length)
|
195
195
|
end
|
@@ -225,7 +225,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
225
225
|
end
|
226
226
|
|
227
227
|
it "applies the default value" do
|
228
|
-
result =
|
228
|
+
result = star_wars_query(query_string)
|
229
229
|
bases_by_id = ["Death Star", "Shield Generator", "Headquarters"]
|
230
230
|
bases_by_name = ["Death Star", "Headquarters", "Shield Generator"]
|
231
231
|
|
@@ -280,7 +280,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
280
280
|
|}
|
281
281
|
|
282
282
|
it 'limits the result' do
|
283
|
-
result =
|
283
|
+
result = star_wars_query(query_string, "first" => 2)
|
284
284
|
assert_equal(2, get_names(result).length)
|
285
285
|
assert_equal(true, get_page_info(result)["hasNextPage"])
|
286
286
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
@@ -289,7 +289,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
289
289
|
assert_equal("MQ==", get_first_cursor(result))
|
290
290
|
assert_equal("Mg==", get_last_cursor(result))
|
291
291
|
|
292
|
-
result =
|
292
|
+
result = star_wars_query(query_string, "first" => 3)
|
293
293
|
assert_equal(3, get_names(result).length)
|
294
294
|
assert_equal(false, get_page_info(result)["hasNextPage"])
|
295
295
|
assert_equal(false, get_page_info(result)["hasPreviousPage"])
|
@@ -300,7 +300,7 @@ describe GraphQL::Relay::RelationConnection do
|
|
300
300
|
end
|
301
301
|
|
302
302
|
it 'provides custom fields on the connection type' do
|
303
|
-
result =
|
303
|
+
result = star_wars_query(query_string, "first" => 2)
|
304
304
|
assert_equal(
|
305
305
|
Base.where(faction_id: 2).count,
|
306
306
|
result["data"]["empire"]["basesAsSequelDataset"]["totalCount"]
|
@@ -308,39 +308,39 @@ describe GraphQL::Relay::RelationConnection do
|
|
308
308
|
end
|
309
309
|
|
310
310
|
it 'slices the result' do
|
311
|
-
result =
|
311
|
+
result = star_wars_query(query_string, "first" => 2)
|
312
312
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
313
313
|
|
314
314
|
# After the last result, find the next 2:
|
315
315
|
last_cursor = get_last_cursor(result)
|
316
316
|
|
317
|
-
result =
|
317
|
+
result = star_wars_query(query_string, "after" => last_cursor, "first" => 2)
|
318
318
|
assert_equal(["Headquarters"], get_names(result))
|
319
319
|
|
320
320
|
last_cursor = get_last_cursor(result)
|
321
321
|
|
322
|
-
result =
|
322
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 1)
|
323
323
|
assert_equal(["Shield Generator"], get_names(result))
|
324
324
|
|
325
|
-
result =
|
325
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 2)
|
326
326
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
327
327
|
|
328
|
-
result =
|
328
|
+
result = star_wars_query(query_string, "before" => last_cursor, "last" => 10)
|
329
329
|
assert_equal(["Death Star", "Shield Generator"], get_names(result))
|
330
330
|
|
331
331
|
end
|
332
332
|
|
333
333
|
it "applies custom arguments" do
|
334
|
-
result =
|
334
|
+
result = star_wars_query(query_string, "first" => 1, "nameIncludes" => "ea")
|
335
335
|
assert_equal(["Death Star"], get_names(result))
|
336
336
|
|
337
337
|
after = get_last_cursor(result)
|
338
338
|
|
339
|
-
result =
|
339
|
+
result = star_wars_query(query_string, "first" => 2, "nameIncludes" => "ea", "after" => after )
|
340
340
|
assert_equal(["Headquarters"], get_names(result))
|
341
341
|
before = get_last_cursor(result)
|
342
342
|
|
343
|
-
result =
|
343
|
+
result = star_wars_query(query_string, "last" => 1, "nameIncludes" => "ea", "before" => before)
|
344
344
|
assert_equal(["Death Star"], get_names(result))
|
345
345
|
end
|
346
346
|
end
|