@@ -98,6 +98,117 @@ describe('Validate: Overlapping fields can be merged', () => {
98
98
` ) ;
99
99
} ) ;
100
100
101
+ it ( 'Same stream directives supported' , ( ) => {
102
+ // @stream is allowed on overlapping fields when they have the same label and
103
+ // initial count.
104
+ expectValid ( `
105
+ fragment differentDirectivesWithDifferentAliases on Dog {
106
+ name @stream(label: "streamLabel", initial_count: 1)
107
+ name @stream(label: "streamLabel", initial_count: 1)
108
+ }
109
+ ` ) ;
110
+ } ) ;
111
+
112
+ it ( 'different stream directive label' , ( ) => {
113
+ // @stream is allowed on overlapping fields when they have the same label and
114
+ // initial count.
115
+ expectErrors ( `
116
+ fragment conflictingArgs on Dog {
117
+ name @stream(label: "streamLabel", initial_count: 1)
118
+ name @stream(label: "anotherLabel", initial_count: 1)
119
+ }
120
+ ` ) . to . deep . equal ( [
121
+ {
122
+ message :
123
+ 'Fields "name" conflict because they have differing stream directives. Use different aliases on the fields to fetch both if this was intentional.' ,
124
+ locations : [
125
+ { line : 3 , column : 9 } ,
126
+ { line : 4 , column : 9 } ,
127
+ ] ,
128
+ } ,
129
+ ] ) ;
130
+ } ) ;
131
+
132
+ it ( 'different stream directive initial_count' , ( ) => {
133
+ // @stream is allowed on overlapping fields when they have the same label and
134
+ // initial count.
135
+ expectErrors ( `
136
+ fragment conflictingArgs on Dog {
137
+ name @stream(label: "streamLabel", initial_count: 1)
138
+ name @stream(label: "streamLabel", initial_count: 2)
139
+ }
140
+ ` ) . to . deep . equal ( [
141
+ {
142
+ message :
143
+ 'Fields "name" conflict because they have differing stream directives. Use different aliases on the fields to fetch both if this was intentional.' ,
144
+ locations : [
145
+ { line : 3 , column : 9 } ,
146
+ { line : 4 , column : 9 } ,
147
+ ] ,
148
+ } ,
149
+ ] ) ;
150
+ } ) ;
151
+
152
+ it ( 'different stream directive first missing args' , ( ) => {
153
+ // @stream is allowed on overlapping fields when they have the same label and
154
+ // initial count.
155
+ expectErrors ( `
156
+ fragment conflictingArgs on Dog {
157
+ name @stream
158
+ name @stream(label: "streamLabel", initial_count: 1)
159
+ }
160
+ ` ) . to . deep . equal ( [
161
+ {
162
+ message :
163
+ 'Fields "name" conflict because they have differing stream directives. Use different aliases on the fields to fetch both if this was intentional.' ,
164
+ locations : [
165
+ { line : 3 , column : 9 } ,
166
+ { line : 4 , column : 9 } ,
167
+ ] ,
168
+ } ,
169
+ ] ) ;
170
+ } ) ;
171
+
172
+ it ( 'different stream directive second missing args' , ( ) => {
173
+ // @stream is allowed on overlapping fields when they have the same label and
174
+ // initial count.
175
+ expectErrors ( `
176
+ fragment conflictingArgs on Dog {
177
+ name @stream(label: "streamLabel", initial_count: 1)
178
+ name @stream
179
+ }
180
+ ` ) . to . deep . equal ( [
181
+ {
182
+ message :
183
+ 'Fields "name" conflict because they have differing stream directives. Use different aliases on the fields to fetch both if this was intentional.' ,
184
+ locations : [
185
+ { line : 3 , column : 9 } ,
186
+ { line : 4 , column : 9 } ,
187
+ ] ,
188
+ } ,
189
+ ] ) ;
190
+ } ) ;
191
+
192
+ it ( 'different stream directive both missing args' , ( ) => {
193
+ // @stream is allowed on overlapping fields when they have the same label and
194
+ // initial count.
195
+ expectErrors ( `
196
+ fragment conflictingArgs on Dog {
197
+ name @stream
198
+ name @stream
199
+ }
200
+ ` ) . to . deep . equal ( [
201
+ {
202
+ message :
203
+ 'Fields "name" conflict because they have differing stream directives. Use different aliases on the fields to fetch both if this was intentional.' ,
204
+ locations : [
205
+ { line : 3 , column : 9 } ,
206
+ { line : 4 , column : 9 } ,
207
+ ] ,
208
+ } ,
209
+ ] ) ;
210
+ } ) ;
211
+
101
212
it ( 'Same aliases with different field targets' , ( ) => {
102
213
expectErrors ( `
103
214
fragment sameAliasesWithDifferentFieldTargets on Dog {
0 commit comments