testShouldDetectInputFieldChanges

This commit is contained in:
Ben Roberts 2017-11-17 15:43:16 -05:00
parent 68dbcc9ca3
commit cf4cccf4d6
2 changed files with 171 additions and 1 deletions

View File

@ -317,7 +317,7 @@ class FindBreakingChanges
if (!$isSafe) { if (!$isSafe) {
$oldFieldTypeString = self::isNamedType($oldFieldType) ? $oldFieldType->name : $oldFieldType; $oldFieldTypeString = self::isNamedType($oldFieldType) ? $oldFieldType->name : $oldFieldType;
$newFieldTypeString = self::isNamedType($newfieldType) ? $newfieldType->name : $newfieldType; $newFieldTypeString = self::isNamedType($newfieldType) ? $newfieldType->name : $newfieldType;
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_CHANGED, 'description' => "${typeName}->${fieldName} changed type from ${oldFieldTypeString} to ${newFieldTypeString}"]; $breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_CHANGED, 'description' => "${typeName}->${fieldName} changed type from ${oldFieldTypeString} to ${newFieldTypeString}."];
} }
} }
} }

View File

@ -5,6 +5,7 @@
namespace GraphQL\Tests\Utils; namespace GraphQL\Tests\Utils;
use GraphQL\Type\Definition\InputObjectType;
use GraphQL\Type\Definition\InterfaceType; use GraphQL\Type\Definition\InterfaceType;
use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\ObjectType;
use GraphQL\Type\Definition\Type; use GraphQL\Type\Definition\Type;
@ -258,4 +259,173 @@ class FindBreakingChangesTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expectedFieldChanges, FindBreakingChanges::findFieldsThatChangedType($oldSchema, $newSchema)); $this->assertEquals($expectedFieldChanges, FindBreakingChanges::findFieldsThatChangedType($oldSchema, $newSchema));
} }
public function testShouldDetectInputFieldChanges()
{
$oldInputType = new InputObjectType([
'name' => 'InputType1',
'fields' => [
'field1' => [
'type' => Type::string(),
],
'field2' => [
'type' => Type::boolean(),
],
'field3' => [
'type' => Type::listOf(Type::string())
],
'field4' => [
'type' => Type::nonNull(Type::string()),
],
'field5' => [
'type' => Type::string(),
],
'field6' => [
'type' => Type::listOf(Type::int())
],
'field7' => [
'type' => Type::nonNull(Type::listOf(Type::int()))
],
'field8' => [
'type' => Type::int(),
],
'field9' => [
'type' => Type::listOf(Type::int())
],
'field10' => [
'type' => Type::listOf(Type::nonNull(Type::int()))
],
'field11' => [
'type' => Type::listOf(Type::int())
],
'field12' => [
'type' => Type::listOf(Type::listOf(Type::int()))
],
'field13' => [
'type' => Type::nonNull(Type::int())
],
'field14' => [
'type' => Type::listOf(Type::nonNull(Type::listOf(Type::int())))
],
'field15' => [
'type' => Type::listOf(Type::nonNull(Type::listOf(Type::int())))
]
]
]);
$newInputType = new InputObjectType([
'name' => 'InputType1',
'fields' => [
'field1' => [
'type' => Type::int(),
],
'field3' => [
'type' => Type::string()
],
'field4' => [
'type' => Type::string()
],
'field5' => [
'type' => Type::nonNull(Type::string())
],
'field6' => [
'type' => Type::nonNull(Type::listOf(Type::int()))
],
'field7' => [
'type' => Type::listOf(Type::int())
],
'field8' => [
'type' => Type::nonNull(Type::listOf(Type::int()))
],
'field9' => [
'type' => Type::listOf(Type::nonNull(Type::int()))
],
'field10' => [
'type' => Type::listOf(Type::int())
],
'field11' => [
'type' => Type::listOf(Type::listOf(Type::int()))
],
'field12' => [
'type' => Type::listOf(Type::int())
],
'field13' => [
'type' => Type::nonNull(Type::listOf(Type::int()))
],
'field14' => [
'type' => Type::listOf(Type::listOf(Type::int()))
],
'field15' => [
'type' => Type::listOf(Type::nonNull(Type::listOf(Type::nonNull(Type::int()))))
]
]
]);
$oldSchema = new Schema([
'query' => new ObjectType([
'name' => 'root',
'fields' => [
'type1' => $oldInputType
]
])
]);
$newSchema = new Schema([
'query' => new ObjectType([
'name' => 'root',
'fields' => [
'type1' => $newInputType
]
])
]);
$expectedFieldChanges = [
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field1 changed type from String to Int.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_REMOVED,
'description' => 'InputType1->field2 was removed.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field3 changed type from [String] to String.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field5 changed type from String to String!.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field6 changed type from [Int] to [Int]!.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field8 changed type from Int to [Int]!.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field9 changed type from [Int] to [Int!].',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field11 changed type from [Int] to [[Int]].',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field12 changed type from [[Int]] to [Int].',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field13 changed type from Int! to [Int]!.',
],
[
'type' => FindBreakingChanges::BREAKING_CHANGE_FIELD_CHANGED,
'description' => 'InputType1->field15 changed type from [[Int]!] to [[Int!]!].',
],
];
$this->assertEquals($expectedFieldChanges, FindBreakingChanges::findFieldsThatChangedType($oldSchema, $newSchema));
}
} }