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

Reply via email to