@@ -195,6 +195,28 @@ public function testCompose() {
195195 $ this ->assertResults ($ query , [], ['tree ' => ['name ' => 'SOME TREE NAME ' ]]);
196196 }
197197
198+ /**
199+ * @covers ::compose
200+ */
201+ public function testComposeNullValue () {
202+ $ this ->mockResolver ('Query ' , 'tree ' , $ this ->builder ->fromValue (['name ' => 'some tree ' , 'id ' => 5 ]));
203+ $ this ->mockResolver ('Tree ' , 'name ' , $ this ->builder ->compose (
204+ $ this ->builder ->fromValue (NULL ),
205+ $ this ->builder ->produce ('uppercase ' )
206+ ->map ('string ' , $ this ->builder ->fromParent ())
207+ ));
208+
209+ $ query = <<<GQL
210+ query {
211+ tree {
212+ name
213+ }
214+ }
215+ GQL ;
216+
217+ $ this ->assertResults ($ query , [], ['tree ' => ['name ' => NULL ]]);
218+ }
219+
198220 /**
199221 * @covers ::context
200222 * @covers ::fromContext
@@ -287,5 +309,105 @@ public function testParentCond() {
287309
288310 $ this ->assertResults ($ query , [], ['tree ' => ['name ' => 'But this should. ' ]]);
289311 }
312+
313+ /**
314+ * @covers ::defaultValue
315+ */
316+ public function testSimpleDefaultValue () {
317+ $ this ->mockResolver ('Query ' , 'tree ' , ['name ' => 'some tree ' , 'id ' => 5 ]);
318+ $ this ->mockResolver ('Tree ' , 'name ' , $ this ->builder ->defaultValue (
319+ $ this ->builder ->fromValue (NULL ),
320+ $ this ->builder ->fromValue ('bar ' )
321+ ));
322+
323+ $ this ->mockResolver ('Tree ' , 'uri ' , $ this ->builder ->defaultValue (
324+ $ this ->builder ->fromValue ('baz ' ),
325+ $ this ->builder ->fromValue ('bar ' )
326+ ));
327+
328+ $ query = <<<GQL
329+ query {
330+ tree(id: 1) {
331+ name
332+ uri
333+ }
334+ }
335+ GQL ;
336+
337+ $ this ->assertResults ($ query , [], [
338+ 'tree ' => [
339+ 'name ' => 'bar ' ,
340+ 'uri ' => 'baz ' ,
341+ ]
342+ ]);
343+ }
344+
345+ public function testCompositeDefaultValue () {
346+
347+ $ this ->mockResolver ('Query ' , 'tree ' , ['name ' => 'some tree ' , 'id ' => 5 ]);
348+ $ this ->mockResolver ('Tree ' , 'name ' , $ this ->builder ->defaultValue (
349+ $ this ->builder ->compose (
350+ $ this ->builder ->fromValue ('baz ' ),
351+ $ this ->builder ->fromValue (NULL )
352+ ),
353+ $ this ->builder ->fromValue ('bar ' )
354+ ));
355+
356+ $ this ->mockResolver ('Tree ' , 'uri ' , $ this ->builder ->defaultValue (
357+ $ this ->builder ->compose (
358+ $ this ->builder ->fromValue (TRUE ),
359+ $ this ->builder ->fromValue ('baz ' )
360+ ),
361+ $ this ->builder ->fromValue ('bar ' )
362+ ));
363+
364+ $ query = <<<GQL
365+ query {
366+ tree(id: 1) {
367+ name
368+ uri
369+ }
370+ }
371+ GQL ;
372+
373+ $ this ->assertResults ($ query , [], [
374+ 'tree ' => [
375+ 'name ' => 'bar ' ,
376+ 'uri ' => 'baz ' ,
377+ ]
378+ ]);
379+ }
380+
381+ /**
382+ * @covers ::defaultValue
383+ */
384+ public function testDeferredDefaultValue () {
385+ $ this ->mockResolver ('Query ' , 'tree ' , ['name ' => 'some tree ' , 'id ' => 5 ]);
386+ $ this ->mockResolver ('Tree ' , 'name ' , $ this ->builder ->defaultValue (
387+ $ this ->builder ->callback (function () { return new Deferred (function () { return NULL ; }); }),
388+ $ this ->builder ->callback (function () { return new Deferred (function () { return 'bar ' ; }); })
389+ ));
390+
391+ $ this ->mockResolver ('Tree ' , 'uri ' , $ this ->builder ->defaultValue (
392+ $ this ->builder ->callback (function () { return new Deferred (function () { return 'baz ' ; }); }),
393+ $ this ->builder ->callback (function () { return new Deferred (function () { return 'bar ' ; }); })
394+ ));
395+
396+ $ query = <<<GQL
397+ query {
398+ tree(id: 1) {
399+ name
400+ uri
401+ }
402+ }
403+ GQL ;
404+
405+ $ this ->assertResults ($ query , [], [
406+ 'tree ' => [
407+ 'name ' => 'bar ' ,
408+ 'uri ' => 'baz ' ,
409+ ]
410+ ]);
411+ }
290412}
291413
0 commit comments