Jeroen De Dauw has uploaded a new change for review. https://gerrit.wikimedia.org/r/75591
Change subject: Work on QueryEntity ...................................................................... Work on QueryEntity Change-Id: I838a2ce49d053b854f2e228b07cf14ddb2b29044 --- M Tests/Phpunit/Wikibase/Query/QueryEntitySerializerTest.php M src/Wikibase/Query/QueryEntitySerializer.php 2 files changed, 126 insertions(+), 9 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQuery refs/changes/91/75591/1 diff --git a/Tests/Phpunit/Wikibase/Query/QueryEntitySerializerTest.php b/Tests/Phpunit/Wikibase/Query/QueryEntitySerializerTest.php index 0797d74..8dbf073 100644 --- a/Tests/Phpunit/Wikibase/Query/QueryEntitySerializerTest.php +++ b/Tests/Phpunit/Wikibase/Query/QueryEntitySerializerTest.php @@ -22,8 +22,24 @@ class QueryEntitySerializerTest extends \PHPUnit_Framework_TestCase { public function testCanConstruct() { - new QueryEntitySerializer( $this->getMock( 'Serializers\Serializer' ) ); + $this->newSimpleQueryEntitySerializer(); $this->assertFalse( false ); + } + + protected function newSimpleQueryEntitySerializer() { + return new QueryEntitySerializer( $this->getMock( 'Serializers\Serializer' ) ); + } + + protected function newSimpleEntity() { + return new QueryEntity( $this->newQuery() ); + } + + protected function newQuery() { + return new Query( + new AnyValue(), + array(), + new QueryOptions( 1, 0 ) + ); } public function testSerializationCallsQuerySerialization() { @@ -41,20 +57,101 @@ $serialization = $serializer->serialize( $queryEntity ); + $this->assertInternalType( 'array', $serialization ); $this->assertArrayHasKey( 'query', $serialization ); $this->assertEquals( $mockSerialization, $serialization['query'] ); } - protected function newSimpleEntity() { - return new QueryEntity( $this->newQuery() ); + public function testSerializationOfNotSetId() { + $queryEntity = $this->newSimpleEntity(); + + $serialization = $this->newSimpleQueryEntitySerializer()->serialize( $queryEntity ); + + $this->assertHasSerializedId( $serialization, null ); } - protected function newQuery() { - return new Query( - new AnyValue(), - array(), - new QueryOptions( 1, 0 ) + /** + * @dataProvider idNumberProvider + */ + public function testSerializationContainsId( $idNumber ) { + $queryEntity = $this->newSimpleEntity(); + + $queryEntity->setId( $idNumber ); + + $serialization = $this->newSimpleQueryEntitySerializer()->serialize( $queryEntity ); + + $this->assertHasSerializedId( $serialization, array( $queryEntity->getType(), $idNumber ) ); + } + + public function idNumberProvider() { + return array( + array( 42 ), + array( 9001 ), + array( 31337 ), ); } + protected function assertHasSerializedId( $serialization, $expectedId ) { + $this->assertInternalType( 'array', $serialization ); + $this->assertArrayHasKey( 'entity', $serialization ); + $this->assertEquals( $expectedId, $serialization['entity'] ); + } + + /** + * @dataProvider descriptionListProvider + */ + public function testSerializationContainsDescriptions( array $descriptionList ) { + $queryEntity = $this->newSimpleEntity(); + + $queryEntity->setDescriptions( $descriptionList ); + + $serialization = $this->newSimpleQueryEntitySerializer()->serialize( $queryEntity ); + + $this->assertHasSerializedDescriptions( $serialization, $descriptionList ); + } + + public function descriptionListProvider() { + return array( + array( array() ), + + array( array( + 'en' => 'Test Description' + ) ), + + array( array( + 'en' => 'Test Description', + 'de' => 'Die Teste Descript' + ) ), + ); + } + + protected function assertHasSerializedDescriptions( $serialization, array $expectedDescriptions ) { + $this->assertInternalType( 'array', $serialization ); + $this->assertArrayHasKey( 'description', $serialization ); + $this->assertEquals( $expectedDescriptions, $serialization['description'] ); + } + + /** + * @dataProvider notAQueryEntityProvider + */ + public function testAttemptToSerializeANonQueryEntityCausesException( $notAQueryEntity ) { + $serializer = $this->newSimpleQueryEntitySerializer(); + + $this->setExpectedException( 'InvalidArgumentException' ); + $serializer->serialize( $notAQueryEntity ); + } + + public function notAQueryEntityProvider() { + $argLists = array(); + + $argLists[] = array( null ); + $argLists[] = array( true ); + $argLists[] = array( 42 ); + $argLists[] = array( 'foo bar baz' ); + $argLists[] = array( array( 1, 2, '3' ) ); + $argLists[] = array( (object)array( 1, 2, '3' ) ); + + return $argLists; + } + } diff --git a/src/Wikibase/Query/QueryEntitySerializer.php b/src/Wikibase/Query/QueryEntitySerializer.php index 7a549b6..92f3b87 100644 --- a/src/Wikibase/Query/QueryEntitySerializer.php +++ b/src/Wikibase/Query/QueryEntitySerializer.php @@ -2,7 +2,9 @@ namespace Wikibase\Query; +use InvalidArgumentException; use Serializers\Serializer; +use Wikibase\Entity; /** * @since 1.0 @@ -23,13 +25,31 @@ } public function serialize( $queryEntity ) { + + if( !( $queryEntity instanceof QueryEntity ) ){ + throw new InvalidArgumentException('Not instance of queryEntity'); + } + $querySerialization = $this->querySerializer->serialize( $queryEntity ); return array( - 'query' => $querySerialization + 'entity' => $this->getSerializedId( $queryEntity ), + 'description' => $queryEntity->getDescriptions(), + 'query' => $querySerialization, ); } + private function getSerializedId( Entity $entity ) { + $id = $entity->getId(); + + if ( $id === null ) { + return $id; + } + else { + return array( $id->getEntityType(), $id->getNumericId() ); + } + } + // TODO } -- To view, visit https://gerrit.wikimedia.org/r/75591 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I838a2ce49d053b854f2e228b07cf14ddb2b29044 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/WikibaseQuery Gerrit-Branch: master Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits