@@ -190,6 +190,11 @@ class AstTransformerTest extends Specification {
190190 return AstTransformerUtil . deleteNode(context);
191191 } else if (field. name == " a" ) {
192192 return changeNode(context, field. transform({ builder -> builder. name(" aChanged" ) }))
193+
194+ } else if (field. name == " root" ) {
195+ Field addField = new Field (" new" )
196+ def newSelectionSet = field. getSelectionSet(). transform({ builder -> builder. selection(addField) })
197+ changeNode(context, field. transform({ builder -> builder. selectionSet(newSelectionSet) }))
193198 } else {
194199 return TraversalControl . CONTINUE ;
195200 }
@@ -201,8 +206,62 @@ class AstTransformerTest extends Specification {
201206
202207 then :
203208
204- printAstCompact(newDocument) == " query {root {aChanged(arg:1) {y1} b {y2}}}"
209+ printAstCompact(newDocument) == " query {root {aChanged(arg:1) {y1} b {y2} new }}"
205210
206211 }
207212
213+ def " add sibling" () {
214+ def document = TestUtil . parseQuery(" {foo}" )
215+
216+ AstTransformer astTransformer = new AstTransformer ()
217+
218+ def visitor = new NodeVisitorStub () {
219+
220+ @Override
221+ TraversalControl visitField (Field node , TraverserContext<Node > context ) {
222+ return AstTransformerUtil . changeParentNode(context, { selectionSet ->
223+ selectionSet. transform({ builder -> builder. selection(new Field (" foo2" )) })
224+ })
225+ }
226+ }
227+
228+
229+ when :
230+ def newDocument = astTransformer. transform(document, visitor)
231+
232+ then :
233+ printAstCompact(newDocument) == " query {foo foo2}"
234+
235+ }
236+
237+ def " delete node and add sibling" () {
238+ def document = TestUtil . parseQuery(" {root { a(arg: 1) { x y } toDelete { x y } } }" )
239+
240+ AstTransformer astTransformer = new AstTransformer ()
241+
242+ def visitor = new NodeVisitorStub () {
243+
244+ @Override
245+ TraversalControl visitField (Field field , TraverserContext<Node > context ) {
246+ if (field. name == " toDelete" ) {
247+ return AstTransformerUtil . deleteNode(context);
248+ } else if (field. name == " a" ) {
249+ return AstTransformerUtil . changeParentNode(context, { selectionSet ->
250+ selectionSet. transform({ builder -> builder. selection(new Field (" newOne" )) })
251+ })
252+ } else {
253+ return TraversalControl . CONTINUE
254+ }
255+ }
256+ }
257+
258+ when :
259+ def newDocument = astTransformer. transform(document, visitor)
260+
261+ then :
262+ printAstCompact(newDocument) == " query {root {a(arg:1) {x y} newOne}}"
263+
264+ }
265+
266+
208267}
0 commit comments