@@ -1006,6 +1006,166 @@ describe('Execute: Handles inputs', () => {
10061006 } ) ;
10071007 } ) ;
10081008
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+
10091169 describe ( 'getVariableValues: limit maximum number of coercion errors' , ( ) => {
10101170 const doc = parse ( `
10111171 query ($input: [String!]) {
0 commit comments