|
4 | 4 |
|
5 | 5 | from graphql import parse
|
6 | 6 | from graphql.execution import execute
|
7 |
| -from graphql.type import (GraphQLArgument, GraphQLField, GraphQLID, |
8 |
| - GraphQLInterfaceType, GraphQLList, GraphQLNonNull, |
9 |
| - GraphQLObjectType, GraphQLSchema, GraphQLString, |
10 |
| - GraphQLUnionType) |
| 7 | +from graphql.type import (GraphQLArgument, GraphQLEnumType, GraphQLEnumValue, |
| 8 | + GraphQLField, GraphQLID, GraphQLInterfaceType, |
| 9 | + GraphQLList, GraphQLNonNull, GraphQLObjectType, |
| 10 | + GraphQLSchema, GraphQLString, GraphQLUnionType) |
11 | 11 | from graphql.utils.extend_schema import extend_schema
|
12 | 12 | from graphql.utils.schema_printer import print_schema
|
13 | 13 |
|
|
55 | 55 | types=[FooType, BizType],
|
56 | 56 | )
|
57 | 57 |
|
| 58 | +SomeEnumType = GraphQLEnumType( |
| 59 | + name='SomeEnum', |
| 60 | + values=OrderedDict([ |
| 61 | + ('ONE', GraphQLEnumValue(1)), |
| 62 | + ('TWO', GraphQLEnumValue(2)), |
| 63 | + ]) |
| 64 | +) |
| 65 | + |
58 | 66 | test_schema = GraphQLSchema(
|
59 | 67 | query=GraphQLObjectType(
|
60 | 68 | name='Query',
|
61 | 69 | fields=lambda: OrderedDict([
|
62 | 70 | ('foo', GraphQLField(FooType)),
|
63 | 71 | ('someUnion', GraphQLField(SomeUnionType)),
|
| 72 | + ('someEnum', GraphQLField(SomeEnumType)), |
64 | 73 | ('someInterface', GraphQLField(
|
65 | 74 | SomeInterfaceType,
|
66 | 75 | args={
|
@@ -143,9 +152,15 @@ def test_extends_objects_by_adding_new_fields():
|
143 | 152 | type Query {
|
144 | 153 | foo: Foo
|
145 | 154 | someUnion: SomeUnion
|
| 155 | + someEnum: SomeEnum |
146 | 156 | someInterface(id: ID!): SomeInterface
|
147 | 157 | }
|
148 | 158 |
|
| 159 | +enum SomeEnum { |
| 160 | + ONE |
| 161 | + TWO |
| 162 | +} |
| 163 | +
|
149 | 164 | interface SomeInterface {
|
150 | 165 | name: String
|
151 | 166 | some: SomeInterface
|
@@ -201,9 +216,74 @@ def test_extends_objects_by_adding_new_fields_with_arguments():
|
201 | 216 | type Query {
|
202 | 217 | foo: Foo
|
203 | 218 | someUnion: SomeUnion
|
| 219 | + someEnum: SomeEnum |
204 | 220 | someInterface(id: ID!): SomeInterface
|
205 | 221 | }
|
206 | 222 |
|
| 223 | +enum SomeEnum { |
| 224 | + ONE |
| 225 | + TWO |
| 226 | +} |
| 227 | +
|
| 228 | +interface SomeInterface { |
| 229 | + name: String |
| 230 | + some: SomeInterface |
| 231 | +} |
| 232 | +
|
| 233 | +union SomeUnion = Foo | Biz |
| 234 | +''' |
| 235 | + |
| 236 | + |
| 237 | +def test_extends_objects_by_adding_new_fields_with_existing_types(): |
| 238 | + ast = parse(''' |
| 239 | + extend type Foo { |
| 240 | + newField(arg1: SomeEnum!): SomeEnum |
| 241 | + } |
| 242 | +
|
| 243 | + input NewInputObj { |
| 244 | + field1: Int |
| 245 | + field2: [Float] |
| 246 | + field3: String! |
| 247 | + } |
| 248 | + ''') |
| 249 | + original_print = print_schema(test_schema) |
| 250 | + extended_schema = extend_schema(test_schema, ast) |
| 251 | + assert extended_schema != test_schema |
| 252 | + assert print_schema(test_schema) == original_print |
| 253 | + assert print_schema(extended_schema) == \ |
| 254 | + '''schema { |
| 255 | + query: Query |
| 256 | +} |
| 257 | +
|
| 258 | +type Bar implements SomeInterface { |
| 259 | + name: String |
| 260 | + some: SomeInterface |
| 261 | + foo: Foo |
| 262 | +} |
| 263 | +
|
| 264 | +type Biz { |
| 265 | + fizz: String |
| 266 | +} |
| 267 | +
|
| 268 | +type Foo implements SomeInterface { |
| 269 | + name: String |
| 270 | + some: SomeInterface |
| 271 | + tree: [Foo]! |
| 272 | + newField(arg1: SomeEnum!): SomeEnum |
| 273 | +} |
| 274 | +
|
| 275 | +type Query { |
| 276 | + foo: Foo |
| 277 | + someUnion: SomeUnion |
| 278 | + someEnum: SomeEnum |
| 279 | + someInterface(id: ID!): SomeInterface |
| 280 | +} |
| 281 | +
|
| 282 | +enum SomeEnum { |
| 283 | + ONE |
| 284 | + TWO |
| 285 | +} |
| 286 | +
|
207 | 287 | interface SomeInterface {
|
208 | 288 | name: String
|
209 | 289 | some: SomeInterface
|
@@ -250,9 +330,15 @@ def test_extends_objects_by_adding_implemented_interfaces():
|
250 | 330 | type Query {
|
251 | 331 | foo: Foo
|
252 | 332 | someUnion: SomeUnion
|
| 333 | + someEnum: SomeEnum |
253 | 334 | someInterface(id: ID!): SomeInterface
|
254 | 335 | }
|
255 | 336 |
|
| 337 | +enum SomeEnum { |
| 338 | + ONE |
| 339 | + TWO |
| 340 | +} |
| 341 | +
|
256 | 342 | interface SomeInterface {
|
257 | 343 | name: String
|
258 | 344 | some: SomeInterface
|
@@ -343,9 +429,15 @@ def test_extends_objects_by_adding_implemented_interfaces_2():
|
343 | 429 | type Query {
|
344 | 430 | foo: Foo
|
345 | 431 | someUnion: SomeUnion
|
| 432 | + someEnum: SomeEnum |
346 | 433 | someInterface(id: ID!): SomeInterface
|
347 | 434 | }
|
348 | 435 |
|
| 436 | +enum SomeEnum { |
| 437 | + ONE |
| 438 | + TWO |
| 439 | +} |
| 440 | +
|
349 | 441 | interface SomeInterface {
|
350 | 442 | name: String
|
351 | 443 | some: SomeInterface
|
@@ -397,9 +489,15 @@ def test_extends_objects_by_adding_implemented_new_interfaces():
|
397 | 489 | type Query {
|
398 | 490 | foo: Foo
|
399 | 491 | someUnion: SomeUnion
|
| 492 | + someEnum: SomeEnum |
400 | 493 | someInterface(id: ID!): SomeInterface
|
401 | 494 | }
|
402 | 495 |
|
| 496 | +enum SomeEnum { |
| 497 | + ONE |
| 498 | + TWO |
| 499 | +} |
| 500 | +
|
403 | 501 | interface SomeInterface {
|
404 | 502 | name: String
|
405 | 503 | some: SomeInterface
|
@@ -464,9 +562,15 @@ def test_extends_objects_multiple_times():
|
464 | 562 | type Query {
|
465 | 563 | foo: Foo
|
466 | 564 | someUnion: SomeUnion
|
| 565 | + someEnum: SomeEnum |
467 | 566 | someInterface(id: ID!): SomeInterface
|
468 | 567 | }
|
469 | 568 |
|
| 569 | +enum SomeEnum { |
| 570 | + ONE |
| 571 | + TWO |
| 572 | +} |
| 573 | +
|
470 | 574 | interface SomeInterface {
|
471 | 575 | name: String
|
472 | 576 | some: SomeInterface
|
|
0 commit comments