1212from graphql .language import (
1313 EnumTypeDefinitionNode ,
1414 EnumTypeExtensionNode ,
15+ EnumValueDefinitionNode ,
1516 EnumValueNode ,
17+ FieldDefinitionNode ,
1618 FieldNode ,
1719 FragmentDefinitionNode ,
1820 InputObjectTypeDefinitionNode ,
@@ -89,6 +91,10 @@ def _stub_type() -> NamedTypeNode:
8991NonNullListOfScalars = GraphQLNonNull (ListOfScalarsType )
9092
9193
94+ def pass_through (arg : Any ) -> Any :
95+ return arg # pragma: no cover
96+
97+
9298def describe_type_system_scalars ():
9399 def defines_a_scalar_type ():
94100 scalar = GraphQLScalarType ("SomeScalar" )
@@ -108,6 +114,25 @@ def defines_a_scalar_type():
108114 "extension_ast_nodes" : (),
109115 }
110116
117+ def can_be_converted_to_a_configuration_object ():
118+ ast_node = ScalarTypeDefinitionNode (name = _stub_name ())
119+ extension_ast_node = ScalarTypeExtensionNode (name = _stub_name ())
120+ some_scalar_kwargs = {
121+ "name" : "SomeScalar" ,
122+ "description" : "SomeScalar description." ,
123+ "specified_by_url" : "https://example.com/foo_spec" ,
124+ "serialize" : pass_through ,
125+ "parse_value" : pass_through ,
126+ "parse_literal" : pass_through ,
127+ "parse_const_literal" : pass_through ,
128+ "value_to_literal" : pass_through ,
129+ "extensions" : {"some_extension" : "extension" },
130+ "ast_node" : ast_node ,
131+ "extension_ast_nodes" : (extension_ast_node ,),
132+ }
133+ some_scalar = GraphQLScalarType (** some_scalar_kwargs ) # type: ignore
134+ assert some_scalar .to_kwargs () == some_scalar_kwargs
135+
111136 def accepts_a_scalar_type_defining_serialize ():
112137 def serialize (_value ):
113138 pass
@@ -334,6 +359,44 @@ def defines_an_object_type():
334359 "extension_ast_nodes" : (),
335360 }
336361
362+ def can_be_converted_to_a_configuration_object ():
363+ ast_node = ObjectTypeDefinitionNode (name = _stub_name ())
364+ extension_ast_node = ObjectTypeExtensionNode (name = _stub_name ())
365+ arg_ast_node = InputValueDefinitionNode (name = _stub_name (), type = _stub_type ())
366+ field_ast_node = FieldDefinitionNode (name = _stub_name (), type = _stub_type ())
367+ some_object_kwargs = {
368+ "name" : "SomeObject" ,
369+ "description" : "SomeObject description." ,
370+ "interfaces" : (InterfaceType ,),
371+ "fields" : {
372+ "f" : GraphQLField (
373+ ScalarType ,
374+ args = {
375+ "input" : GraphQLArgument (
376+ ScalarType ,
377+ default_value = "DefaultValue" ,
378+ description = "Argument description." ,
379+ deprecation_reason = "Argument deprecation reason." ,
380+ extensions = {"some_extension" : "extension" },
381+ ast_node = arg_ast_node ,
382+ )
383+ },
384+ resolve = pass_through ,
385+ subscribe = pass_through ,
386+ description = "Field description." ,
387+ deprecation_reason = "Field deprecation reason." ,
388+ extensions = {"some_extension" : "extension" },
389+ ast_node = field_ast_node ,
390+ )
391+ },
392+ "is_type_of" : pass_through ,
393+ "extensions" : {"some_extension" : "extension" },
394+ "ast_node" : ast_node ,
395+ "extension_ast_nodes" : (extension_ast_node ,),
396+ }
397+ some_object = GraphQLObjectType (** some_object_kwargs ) # type: ignore
398+ assert some_object .to_kwargs () == some_object_kwargs
399+
337400 def does_not_mutate_passed_field_definitions ():
338401 output_fields = {
339402 "field1" : GraphQLField (ScalarType ),
@@ -583,6 +646,43 @@ def defines_an_interface_type():
583646 "extension_ast_nodes" : (),
584647 }
585648
649+ def can_be_converted_to_a_configuration_object ():
650+ ast_node = InterfaceTypeDefinitionNode (name = _stub_name ())
651+ arg_ast_node = InputValueDefinitionNode (name = _stub_name (), type = _stub_type ())
652+ field_ast_node = FieldDefinitionNode (name = _stub_name (), type = _stub_type ())
653+ some_interface_kwargs = {
654+ "name" : "SomeInterface" ,
655+ "description" : "SomeInterface description." ,
656+ "interfaces" : (InterfaceType ,),
657+ "fields" : {
658+ "f" : GraphQLField (
659+ ScalarType ,
660+ args = {
661+ "input" : GraphQLArgument (
662+ ScalarType ,
663+ default_value_literal = IntValueNode (value = "10" ),
664+ description = "Argument description." ,
665+ deprecation_reason = "Argument deprecation reason." ,
666+ extensions = {"some_extension" : "extension" },
667+ ast_node = arg_ast_node ,
668+ )
669+ },
670+ resolve = pass_through ,
671+ subscribe = pass_through ,
672+ description = "Field description." ,
673+ deprecation_reason = "Field deprecation reason." ,
674+ extensions = {"some_extension" : "extension" },
675+ ast_node = field_ast_node ,
676+ )
677+ },
678+ "resolve_type" : pass_through ,
679+ "extensions" : {},
680+ "ast_node" : ast_node ,
681+ "extension_ast_nodes" : (),
682+ }
683+ some_interface = GraphQLInterfaceType (** some_interface_kwargs ) # type: ignore
684+ assert some_interface .to_kwargs () == some_interface_kwargs
685+
586686 def accepts_an_interface_type_defining_resolve_type ():
587687 def resolve_type (_obj , _info , _type ):
588688 pass
@@ -696,6 +796,32 @@ def interfaces():
696796
697797
698798def describe_type_system_unions ():
799+ def can_be_converted_from_a_minimal_configuration_object ():
800+ some_union = GraphQLUnionType ("SomeUnion" , [])
801+ assert some_union .to_kwargs () == {
802+ "name" : "SomeUnion" ,
803+ "description" : None ,
804+ "types" : (),
805+ "resolve_type" : None ,
806+ "extensions" : {},
807+ "ast_node" : None ,
808+ "extension_ast_nodes" : (),
809+ }
810+
811+ def can_be_converted_to_a_configuration_object ():
812+ ast_node = UnionTypeDefinitionNode (name = _stub_name ())
813+ some_union_kwargs = {
814+ "name" : "SomeUnion" ,
815+ "description" : "SomeUnion description." ,
816+ "types" : (ObjectType ,),
817+ "resolve_type" : pass_through ,
818+ "extensions" : {},
819+ "ast_node" : ast_node ,
820+ "extension_ast_nodes" : (),
821+ }
822+ some_union = GraphQLUnionType (** some_union_kwargs ) # type: ignore
823+ assert some_union .to_kwargs () == some_union_kwargs
824+
699825 def accepts_a_union_type_defining_resolve_type ():
700826 assert GraphQLUnionType ("SomeUnion" , [ObjectType ])
701827
@@ -750,6 +876,40 @@ def types():
750876
751877
752878def describe_type_system_enums ():
879+ def can_be_converted_from_a_minimal_configuration_object ():
880+ some_enum = GraphQLEnumType ("SomeEnum" , {})
881+ assert some_enum .to_kwargs () == {
882+ "name" : "SomeEnum" ,
883+ "description" : None ,
884+ "values" : {},
885+ "extensions" : {},
886+ "ast_node" : None ,
887+ "extension_ast_nodes" : (),
888+ }
889+
890+ def can_be_converted_to_a_configuration_object ():
891+ ast_node = EnumTypeDefinitionNode (name = _stub_name ())
892+ extension_ast_node = EnumTypeExtensionNode (name = _stub_name ())
893+ value_ast_node = EnumValueDefinitionNode (name = _stub_name ())
894+ some_enum_kwargs = {
895+ "name" : "SomeEnum" ,
896+ "description" : "SomeEnum description." ,
897+ "values" : {
898+ "FOO" : GraphQLEnumValue (
899+ "foo" ,
900+ description = "FOO description." ,
901+ deprecation_reason = "Value deprecation reason." ,
902+ extensions = {"some_extension" : "extension" },
903+ ast_node = value_ast_node ,
904+ )
905+ },
906+ "extensions" : {"some_extension" : "extension" },
907+ "ast_node" : ast_node ,
908+ "extension_ast_nodes" : (extension_ast_node ,),
909+ }
910+ some_enum = GraphQLEnumType (** some_enum_kwargs ) # type: ignore
911+ assert some_enum .to_kwargs () == some_enum_kwargs
912+
753913 def defines_an_enum_using_a_dict ():
754914 enum_type = GraphQLEnumType ("SomeEnum" , {"RED" : 1 , "BLUE" : 2 })
755915 assert enum_type .values == {
@@ -1040,6 +1200,45 @@ def can_compare_enum_values():
10401200
10411201
10421202def describe_type_system_input_objects ():
1203+ def can_be_converted_from_a_minimal_configuration_object ():
1204+ some_input_object = GraphQLInputObjectType ("SomeInputObject" , {})
1205+ assert some_input_object .to_kwargs () == {
1206+ "name" : "SomeInputObject" ,
1207+ "description" : None ,
1208+ "fields" : {},
1209+ "out_type" : None , # the out_type is an extension of GraphQL.js
1210+ "is_one_of" : False ,
1211+ "extensions" : {},
1212+ "ast_node" : None ,
1213+ "extension_ast_nodes" : (),
1214+ }
1215+
1216+ def can_be_converted_to_a_configuration_object ():
1217+ ast_node = InputObjectTypeDefinitionNode (name = _stub_name ())
1218+ extension_ast_node = InputObjectTypeExtensionNode (name = _stub_name ())
1219+ field_ast_node = InputValueDefinitionNode (name = _stub_name (), type = _stub_type ())
1220+ some_input_object_kwargs = {
1221+ "name" : "SomeInputObject" ,
1222+ "description" : "SomeInputObject description." ,
1223+ "fields" : {
1224+ "input" : GraphQLInputField (
1225+ ScalarType ,
1226+ default_value = "DefaultValue" ,
1227+ description = "Input field description." ,
1228+ deprecation_reason = "Input field deprecation reason." ,
1229+ extensions = {"some_extension" : "extension" },
1230+ ast_node = field_ast_node ,
1231+ )
1232+ },
1233+ "out_type" : None , # the out_type is an extension of GraphQL.js
1234+ "is_one_of" : True ,
1235+ "extensions" : {"some_extension" : "extension" },
1236+ "ast_node" : ast_node ,
1237+ "extension_ast_nodes" : (extension_ast_node ,),
1238+ }
1239+ some_input_object = GraphQLInputObjectType (** some_input_object_kwargs ) # type: ignore
1240+ assert some_input_object .to_kwargs () == some_input_object_kwargs
1241+
10431242 def accepts_an_input_object_type_with_a_description ():
10441243 description = "nice input object"
10451244 input_obj_type = GraphQLInputObjectType (
0 commit comments