@@ -413,6 +413,134 @@ public function testTypesOverrideWorksWithTypeLoader(): void
413413 'types ' => [$ uppercaseString ],
414414 ]);
415415
416+ $ result = GraphQL::executeQuery ($ schema , '{ greeting user { name } } ' );
417+
418+ self ::assertSame (['data ' => ['greeting ' => 'HELLO WORLD ' , 'user ' => ['name ' => 'JANE ' ]]], $ result ->toArray ());
419+ }
420+
421+ public function testTypesOverrideWorksWithTypeLoaderAndAssertValid (): void
422+ {
423+ $ uppercaseString = self ::createUppercaseString ();
424+
425+ $ userType = new ObjectType ([
426+ 'name ' => 'User ' ,
427+ 'fields ' => [
428+ 'name ' => Type::string (),
429+ ],
430+ ]);
431+
432+ $ queryType = new ObjectType ([
433+ 'name ' => 'Query ' ,
434+ 'fields ' => [
435+ 'greeting ' => [
436+ 'type ' => Type::string (),
437+ 'resolve ' => static fn (): string => 'hello world ' ,
438+ ],
439+ 'user ' => [
440+ 'type ' => $ userType ,
441+ 'resolve ' => static fn (): array => ['name ' => 'Jane ' ],
442+ ],
443+ ],
444+ ]);
445+
446+ $ types = ['Query ' => $ queryType , 'User ' => $ userType ];
447+ $ schema = new Schema ([
448+ 'query ' => $ queryType ,
449+ 'typeLoader ' => static fn (string $ name ): ?Type => $ types [$ name ] ?? null ,
450+ 'types ' => [$ uppercaseString ],
451+ ]);
452+
453+ $ schema ->assertValid ();
454+
455+ $ result = GraphQL::executeQuery ($ schema , '{ greeting user { name } } ' );
456+
457+ self ::assertSame (['data ' => ['greeting ' => 'HELLO WORLD ' , 'user ' => ['name ' => 'JANE ' ]]], $ result ->toArray ());
458+ }
459+
460+ public function testGetTypeReturnsScalarOverrideWithTypeLoader (): void
461+ {
462+ $ uppercaseString = self ::createUppercaseString ();
463+ $ queryType = self ::createQueryType ();
464+
465+ $ schema = new Schema ([
466+ 'query ' => $ queryType ,
467+ 'typeLoader ' => static fn (string $ name ): ?Type => $ name === 'Query ' ? $ queryType : null ,
468+ 'types ' => [$ uppercaseString ],
469+ ]);
470+
471+ self ::assertSame ($ uppercaseString , $ schema ->getType (Type::STRING ));
472+ }
473+
474+ public function testTypesOverrideWorksWithCallableTypesConfig (): void
475+ {
476+ $ uppercaseString = self ::createUppercaseString ();
477+ $ queryType = self ::createQueryType ();
478+
479+ $ schema = new Schema ([
480+ 'query ' => $ queryType ,
481+ 'typeLoader ' => static fn (string $ name ): ?Type => $ name === 'Query ' ? $ queryType : null ,
482+ 'types ' => static fn (): array => [$ uppercaseString ],
483+ ]);
484+
485+ $ result = GraphQL::executeQuery ($ schema , '{ greeting } ' );
486+
487+ self ::assertSame (['data ' => ['greeting ' => 'HELLO WORLD ' ]], $ result ->toArray ());
488+ }
489+
490+ public function testTypesOverrideWorksWithGeneratorTypesConfig (): void
491+ {
492+ $ uppercaseString = self ::createUppercaseString ();
493+ $ queryType = self ::createQueryType ();
494+
495+ $ schema = new Schema ([
496+ 'query ' => $ queryType ,
497+ 'typeLoader ' => static fn (string $ name ): ?Type => $ name === 'Query ' ? $ queryType : null ,
498+ 'types ' => static function () use ($ uppercaseString ): \Generator {
499+ yield $ uppercaseString ;
500+ },
501+ ]);
502+
503+ $ result = GraphQL::executeQuery ($ schema , '{ greeting } ' );
504+
505+ self ::assertSame (['data ' => ['greeting ' => 'HELLO WORLD ' ]], $ result ->toArray ());
506+
507+ $ schema ->assertValid ();
508+ }
509+
510+ public function testGetTypeThenAssertValidBothWorkWithTypeLoader (): void
511+ {
512+ $ uppercaseString = self ::createUppercaseString ();
513+
514+ $ userType = new ObjectType ([
515+ 'name ' => 'User ' ,
516+ 'fields ' => [
517+ 'name ' => Type::string (),
518+ ],
519+ ]);
520+
521+ $ queryType = new ObjectType ([
522+ 'name ' => 'Query ' ,
523+ 'fields ' => [
524+ 'greeting ' => [
525+ 'type ' => Type::string (),
526+ 'resolve ' => static fn (): string => 'hello world ' ,
527+ ],
528+ 'user ' => [
529+ 'type ' => $ userType ,
530+ 'resolve ' => static fn (): array => ['name ' => 'Jane ' ],
531+ ],
532+ ],
533+ ]);
534+
535+ $ types = ['Query ' => $ queryType , 'User ' => $ userType ];
536+ $ schema = new Schema ([
537+ 'query ' => $ queryType ,
538+ 'typeLoader ' => static fn (string $ name ): ?Type => $ types [$ name ] ?? null ,
539+ 'types ' => [$ uppercaseString ],
540+ ]);
541+
542+ self ::assertSame ($ uppercaseString , $ schema ->getType (Type::STRING ));
543+
416544 $ schema ->assertValid ();
417545
418546 $ result = GraphQL::executeQuery ($ schema , '{ greeting user { name } } ' );
0 commit comments