mirror of
https://github.com/retailcrm/graphql-php.git
synced 2025-02-06 07:49:24 +03:00
Merge pull request #210 from enumag/patch-1
Allow objects with __toString in IDType
This commit is contained in:
commit
bb75586aa5
@ -43,7 +43,7 @@ When expected as an input type, any string (such as `"4"`) or integer
|
||||
if ($value === null) {
|
||||
return 'null';
|
||||
}
|
||||
if (!is_scalar($value)) {
|
||||
if (!is_scalar($value) && (!is_object($value) || !method_exists($value, '__toString'))) {
|
||||
throw new InvariantViolation("ID type cannot represent non scalar value: " . Utils::printSafe($value));
|
||||
}
|
||||
return (string) $value;
|
||||
|
23
tests/Type/ObjectIdStub.php
Normal file
23
tests/Type/ObjectIdStub.php
Normal file
@ -0,0 +1,23 @@
|
||||
<?php
|
||||
namespace GraphQL\Tests\Type;
|
||||
|
||||
class ObjectIdStub
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
public function __construct($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
public function __toString()
|
||||
{
|
||||
return (string) $this->id;
|
||||
}
|
||||
}
|
@ -178,4 +178,25 @@ class ScalarSerializationTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
// TODO: how should it behave on '0'?
|
||||
}
|
||||
|
||||
public function testSerializesOutputID()
|
||||
{
|
||||
$idType = Type::id();
|
||||
|
||||
$this->assertSame('string', $idType->serialize('string'));
|
||||
$this->assertSame('', $idType->serialize(''));
|
||||
$this->assertSame('1', $idType->serialize('1'));
|
||||
$this->assertSame('1', $idType->serialize(1));
|
||||
$this->assertSame('0', $idType->serialize(0));
|
||||
$this->assertSame('true', $idType->serialize(true));
|
||||
$this->assertSame('false', $idType->serialize(false));
|
||||
$this->assertSame('2', $idType->serialize(new ObjectIdStub(2)));
|
||||
|
||||
try {
|
||||
$idType->serialize(new \stdClass());
|
||||
$this->fail('Expected exception was not thrown');
|
||||
} catch (InvariantViolation $e) {
|
||||
$this->assertEquals('ID type cannot represent non scalar value: instance of stdClass', $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user