@@ -1006,6 +1006,166 @@ describe('Execute: Handles inputs', () => {
1006
1006
} ) ;
1007
1007
} ) ;
1008
1008
1009
+ describe ( 'using fragment arguments' , ( ) => {
1010
+ it ( 'when there are no fragment arguments' , ( ) => {
1011
+ const result = executeQuery ( `
1012
+ query {
1013
+ ...a
1014
+ }
1015
+
1016
+ fragment a on TestType {
1017
+ fieldWithNonNullableStringInput(input: "A")
1018
+ }
1019
+ ` ) ;
1020
+ expect ( result ) . to . deep . equal ( {
1021
+ data : {
1022
+ fieldWithNonNullableStringInput : '"A"' ,
1023
+ } ,
1024
+ } ) ;
1025
+ } ) ;
1026
+
1027
+ it ( 'when a value is required and provided' , ( ) => {
1028
+ const result = executeQuery ( `
1029
+ query {
1030
+ ...a(value: "A")
1031
+ }
1032
+
1033
+ fragment a($value: String!) on TestType {
1034
+ fieldWithNonNullableStringInput(input: $value)
1035
+ }
1036
+ ` ) ;
1037
+ expect ( result ) . to . deep . equal ( {
1038
+ data : {
1039
+ fieldWithNonNullableStringInput : '"A"' ,
1040
+ } ,
1041
+ } ) ;
1042
+ } ) ;
1043
+
1044
+ it ( 'when a value is required and not provided' , ( ) => {
1045
+ const result = executeQuery ( `
1046
+ query {
1047
+ ...a
1048
+ }
1049
+
1050
+ fragment a($value: String!) on TestType {
1051
+ fieldWithNullableStringInput(input: $value)
1052
+ }
1053
+ ` ) ;
1054
+ expect ( result ) . to . deep . equal ( {
1055
+ data : {
1056
+ fieldWithNullableStringInput : null ,
1057
+ } ,
1058
+ } ) ;
1059
+ } ) ;
1060
+
1061
+ it ( 'when the definition has a default and is provided' , ( ) => {
1062
+ const result = executeQuery ( `
1063
+ query {
1064
+ ...a(value: "A")
1065
+ }
1066
+
1067
+ fragment a($value: String! = "B") on TestType {
1068
+ fieldWithNonNullableStringInput(input: $value)
1069
+ }
1070
+ ` ) ;
1071
+ expect ( result ) . to . deep . equal ( {
1072
+ data : {
1073
+ fieldWithNonNullableStringInput : '"A"' ,
1074
+ } ,
1075
+ } ) ;
1076
+ } ) ;
1077
+
1078
+ it ( 'when the definition has a default and is not provided' , ( ) => {
1079
+ const result = executeQuery ( `
1080
+ query {
1081
+ ...a
1082
+ }
1083
+
1084
+ fragment a($value: String! = "B") on TestType {
1085
+ fieldWithNonNullableStringInput(input: $value)
1086
+ }
1087
+ ` ) ;
1088
+ expect ( result ) . to . deep . equal ( {
1089
+ data : {
1090
+ fieldWithNonNullableStringInput : '"B"' ,
1091
+ } ,
1092
+ } ) ;
1093
+ } ) ;
1094
+
1095
+ it ( 'when the definition has a non-nullable default and is provided null' , ( ) => {
1096
+ const result = executeQuery ( `
1097
+ query {
1098
+ ...a(value: null)
1099
+ }
1100
+
1101
+ fragment a($value: String! = "B") on TestType {
1102
+ fieldWithNullableStringInput(input: $value)
1103
+ }
1104
+ ` ) ;
1105
+ expect ( result ) . to . deep . equal ( {
1106
+ data : {
1107
+ fieldWithNullableStringInput : 'null' ,
1108
+ } ,
1109
+ } ) ;
1110
+ } ) ;
1111
+
1112
+ it ( 'when the definition has no default and is not provided' , ( ) => {
1113
+ const result = executeQuery ( `
1114
+ query {
1115
+ ...a
1116
+ }
1117
+
1118
+ fragment a($value: String) on TestType {
1119
+ fieldWithNonNullableStringInputAndDefaultArgumentValue(input: $value)
1120
+ }
1121
+ ` ) ;
1122
+ expect ( result ) . to . deep . equal ( {
1123
+ data : {
1124
+ fieldWithNonNullableStringInputAndDefaultArgumentValue :
1125
+ '"Hello World"' ,
1126
+ } ,
1127
+ } ) ;
1128
+ } ) ;
1129
+
1130
+ it ( 'when the argument variable is nested in a complex type' , ( ) => {
1131
+ const result = executeQuery ( `
1132
+ query {
1133
+ ...a(value: "C")
1134
+ }
1135
+
1136
+ fragment a($value: String) on TestType {
1137
+ list(input: ["A", "B", $value, "D"])
1138
+ }
1139
+ ` ) ;
1140
+ expect ( result ) . to . deep . equal ( {
1141
+ data : {
1142
+ list : '["A", "B", "C", "D"]' ,
1143
+ } ,
1144
+ } ) ;
1145
+ } ) ;
1146
+
1147
+ it ( 'when argument variables are used recursively' , ( ) => {
1148
+ const result = executeQuery ( `
1149
+ query {
1150
+ ...a(aValue: "C")
1151
+ }
1152
+
1153
+ fragment a($aValue: String) on TestType {
1154
+ ...b(bValue: $aValue)
1155
+ }
1156
+
1157
+ fragment b($bValue: String) on TestType {
1158
+ list(input: ["A", "B", $bValue, "D"])
1159
+ }
1160
+ ` ) ;
1161
+ expect ( result ) . to . deep . equal ( {
1162
+ data : {
1163
+ list : '["A", "B", "C", "D"]' ,
1164
+ } ,
1165
+ } ) ;
1166
+ } ) ;
1167
+ } ) ;
1168
+
1009
1169
describe ( 'getVariableValues: limit maximum number of coercion errors' , ( ) => {
1010
1170
const doc = parse ( `
1011
1171
query ($input: [String!]) {
0 commit comments