From 0fd5abc8338addece3e57936d4402b9d30c352aa Mon Sep 17 00:00:00 2001 From: Ben Roberts Date: Mon, 20 Nov 2017 13:48:21 -0500 Subject: [PATCH] testDetectsAdditionOfFieldArg --- src/Utils/FindBreakingChanges.php | 3 +- tests/Utils/FindBreakingChangesTest.php | 49 +++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Utils/FindBreakingChanges.php b/src/Utils/FindBreakingChanges.php index aa6a468..7754924 100644 --- a/src/Utils/FindBreakingChanges.php +++ b/src/Utils/FindBreakingChanges.php @@ -184,7 +184,7 @@ class FindBreakingChanges } } // Check if a non-null arg was added to the field - foreach ($newTypeFields[$fieldName]->args as $newArgName => $newArgDef) { + foreach ($newTypeFields[$fieldName]->args as $newArgDef) { $oldArgs = $oldTypeFields[$fieldName]->args; $oldArgDef = Utils::find( $oldArgs, function ($arg) use ($newArgDef) { @@ -194,6 +194,7 @@ class FindBreakingChanges if (!$oldArgDef && $newArgDef->getType() instanceof NonNull) { $newTypeName = $newTypeDefinition->name; + $newArgName = $newArgDef->name; $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_NON_NULL_ARG_ADDED, 'description' => "A non-null arg ${newArgName} on ${newTypeName}->${fieldName} was added." diff --git a/tests/Utils/FindBreakingChangesTest.php b/tests/Utils/FindBreakingChangesTest.php index 3d2c433..ed735be 100644 --- a/tests/Utils/FindBreakingChangesTest.php +++ b/tests/Utils/FindBreakingChangesTest.php @@ -812,4 +812,53 @@ class FindBreakingChangesTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expectedChanges, FindBreakingChanges::findArgChanges($oldSchema, $newSchema)['breakingChanges']); } + + public function testDetectsAdditionOfFieldArg() + { + $oldType = new ObjectType([ + 'name' => 'Type1', + 'fields' => [ + 'field1' => [ + 'type' => Type::string(), + 'args' => [ + 'arg1' => Type::string() + ]] + ] + ]); + $newType = new ObjectType([ + 'name' => 'Type1', + 'fields' => [ + 'field1' => [ + 'type' => Type::string(), + 'args' => [ + 'arg1' => Type::string(), + 'newRequiredArg' => Type::nonNull(Type::string()), + 'newOptionalArg' => Type::int() + ]] + ] + ]); + $oldSchema = new Schema([ + 'query' => new ObjectType([ + 'name' => 'root', + 'fields' => [ + 'type1' => $oldType, + ] + ]) + ]); + $newSchema = new Schema([ + 'query' => new ObjectType([ + 'name' => 'root', + 'fields' => [ + 'type1' => $newType + ] + ]) + ]); + + $this->assertEquals( + [ + 'type' => FindBreakingChanges::BREAKING_CHANGE_NON_NULL_ARG_ADDED, + 'description' => 'A non-null arg newRequiredArg on Type1->field1 was added.' + ], + FindBreakingChanges::findArgChanges($oldSchema, $newSchema)['breakingChanges'][0]); + } } \ No newline at end of file