Jeroen De Dauw has submitted this change and it was merged.

Change subject: Ask DeserializerFactory and Tests
......................................................................


Ask DeserializerFactory and Tests

Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
---
M Tests/Integration/Serialization/QuerySerialializationTest.php
A Tests/Phpunit/DeserilaizerFactoryTest.php
R Tests/Phpunit/SerializerFactoryTest.php
A src/Ask/DeserializerFactory.php
R src/Ask/SerializerFactory.php
5 files changed, 227 insertions(+), 13 deletions(-)

Approvals:
  Jeroen De Dauw: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Tests/Integration/Serialization/QuerySerialializationTest.php 
b/Tests/Integration/Serialization/QuerySerialializationTest.php
index 2685a4e..3bc1600 100644
--- a/Tests/Integration/Serialization/QuerySerialializationTest.php
+++ b/Tests/Integration/Serialization/QuerySerialializationTest.php
@@ -2,7 +2,7 @@
 
 namespace Ask\Tests\Integration\Serialization;
 
-use Ask\AskFactory;
+use Ask\SerializerFactory;
 use Ask\Language\Description\AnyValue;
 use Ask\Language\Description\Conjunction;
 use Ask\Language\Description\SomeProperty;
@@ -155,7 +155,7 @@
        }
 
        protected function getQuerySerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
                return $askFactory->newQuerySerializer();
        }
 
diff --git a/Tests/Phpunit/DeserilaizerFactoryTest.php 
b/Tests/Phpunit/DeserilaizerFactoryTest.php
new file mode 100644
index 0000000..d03b9ca
--- /dev/null
+++ b/Tests/Phpunit/DeserilaizerFactoryTest.php
@@ -0,0 +1,115 @@
+<?php
+
+namespace Ask\Tests\Phpunit;
+
+use Ask\DeserializerFactory;
+use Ask\Language\Option\SortExpression;
+use DataValues\DataValueFactory;
+use Deserializers\Deserializer;
+
+/**
+ * @covers Ask\AskFactory
+ *
+ * @file
+ * @since 0.1
+ *
+ * @ingroup Ask
+ * @group Ask
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
+ */
+class DeserializerFactoryTest extends \PHPUnit_Framework_TestCase {
+
+       public function testCanGetQueryDeserializer() {
+               $dataValueFactory = 
$this->getMock('DataValues\DataValueFactory');
+               $askFactory = new DeserializerFactory( $dataValueFactory );
+
+               $deserializer = $askFactory->newQueryDeserializer();
+
+               $object = array(
+                       'objectType' => 'query',
+                       'description' => array(
+                               'objectType' => 'description',
+                               'descriptionType' => 'conjunction',
+                               'value' => array(
+                                       'descriptions' => array()
+                               )
+                       ),
+                       'options' => array(),
+                       'selectionRequests' => array(),
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       protected function assertDeserializerThatCanDeserializeObject( 
Deserializer $deserializer, $object ) {
+               $this->assertTrue( $deserializer->canDeserialize( $object ) );
+       }
+
+       public function testCanGetDescriptionDeserializer() {
+               $dataValueFactory = 
$this->getMock('DataValues\DataValueFactory');
+               $askFactory = new DeserializerFactory( $dataValueFactory );
+
+               $deserializer = $askFactory->newDescriptionDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'description',
+                       'descriptionType' => 'anyValue',
+                       'value' => array()
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetSelectionRequestDeserializer() {
+               $dataValueFactory = 
$this->getMock('DataValues\DataValueFactory');
+               $askFactory = new DeserializerFactory( $dataValueFactory );
+
+               $deserializer = $askFactory->newSelectionRequestDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'selectionRequest',
+                       'selectionRequestType' => 'subject',
+                       'value' => array(),
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetSortExpressionDeserializer() {
+               $dataValueFactory = 
$this->getMock('DataValues\DataValueFactory');
+               $askFactory = new DeserializerFactory( $dataValueFactory );
+
+               $deserializer = $askFactory->newSortExpressionDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'sortExpression',
+                       'sortExpressionType' => 'propertyValue',
+                       'value' => array()
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+       public function testCanGetQueryOptionsDeserializer() {
+               $dataValueFactory = 
$this->getMock('DataValues\DataValueFactory');
+               $askFactory = new DeserializerFactory( $dataValueFactory );
+
+               $deserializer = $askFactory->newQueryOptionsDeserializer( 
$dataValueFactory );
+
+               $object = array(
+                       'objectType' => 'queryOptions',
+                       'limit' => 100,
+                       'offset' => 42,
+                       'sort' => array(
+                               'expressions' => array(),
+                       )
+               );
+
+               $this->assertDeserializerThatCanDeserializeObject( 
$deserializer, $object );
+       }
+
+
+}
diff --git a/Tests/Phpunit/AskFactoryTest.php 
b/Tests/Phpunit/SerializerFactoryTest.php
similarity index 75%
rename from Tests/Phpunit/AskFactoryTest.php
rename to Tests/Phpunit/SerializerFactoryTest.php
index 2e7ed03..c49f2f3 100644
--- a/Tests/Phpunit/AskFactoryTest.php
+++ b/Tests/Phpunit/SerializerFactoryTest.php
@@ -2,7 +2,7 @@
 
 namespace Ask\Tests\Phpunit;
 
-use Ask\AskFactory;
+use Ask\SerializerFactory;
 use Serializers\Serializer;
 
 /**
@@ -16,18 +16,19 @@
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
  */
-class AskFactoryTest extends \PHPUnit_Framework_TestCase {
+class SerializerFactoryTest extends \PHPUnit_Framework_TestCase {
 
        public function testCanGetQuerySerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
-               $querySerializer = $askFactory->newQuerySerializer();
+               $serializer = $askFactory->newQuerySerializer();
 
-               $query = $this->getMockBuilder( 'Ask\Language\Query' )
+               $object = $this->getMockBuilder( 'Ask\Language\Query' )
                        ->disableOriginalConstructor()->getMock();
 
-               $this->assertSerializerThatCanSerializeObject( 
$querySerializer, $query );
+               $this->assertSerializerThatCanSerializeObject( $serializer, 
$object );
        }
 
        protected function assertSerializerThatCanSerializeObject( Serializer 
$serializer, $object ) {
@@ -35,7 +36,7 @@
        }
 
        public function testCanGetDescriptionSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newDescriptionSerializer();
 
@@ -45,7 +46,7 @@
        }
 
        public function testCanGetSelectionRequestSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newSelectionRequestSerializer();
 
@@ -55,7 +56,7 @@
        }
 
        public function testCanGetSortExpressionSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newSortExpressionSerializer();
 
@@ -65,7 +66,7 @@
        }
 
        public function testCanGetQueryOptionsSerializer() {
-               $askFactory = new AskFactory();
+               $askFactory = new SerializerFactory();
 
                $serializer = $askFactory->newQueryOptionsSerializer();
 
@@ -75,4 +76,5 @@
                $this->assertSerializerThatCanSerializeObject( $serializer, 
$object );
        }
 
+
 }
diff --git a/src/Ask/DeserializerFactory.php b/src/Ask/DeserializerFactory.php
new file mode 100644
index 0000000..f5cbec8
--- /dev/null
+++ b/src/Ask/DeserializerFactory.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace Ask;
+
+use Ask\Deserializers\DescriptionDeserializer;
+use Ask\Deserializers\QueryDeserializer;
+use Ask\Deserializers\QueryOptionsDeserializer;
+use Ask\Deserializers\SelectionRequestDeserializer;
+use Ask\Deserializers\SortExpressionDeserializer;
+use DataValues\DataValueFactory;
+use Deserializers\Deserializer;
+use Deserializers\DispatchingDeserializer;
+
+/**
+ * @since 0.1
+ *
+ * @file
+ * @ingroup Ask
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
+ */
+class DeserializerFactory {
+
+       protected $dataValueFactory;
+
+       public function __construct( DataValueFactory $dataValueFactory ) {
+               $this->dataValueFactory = $dataValueFactory;
+       }
+
+       /**
+        * Returns a Deserializer that can serialize Query objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newQueryDeserializer() {
+
+
+               $dispatchingDeserializer = new DispatchingDeserializer();
+
+               $dispatchingDeserializer->addDeserializer( 
$this->newDescriptionDeserializer() );
+               $dispatchingDeserializer->addDeserializer( 
$this->newSelectionRequestDeserializer() );
+               $dispatchingDeserializer->addDeserializer( 
$this->newSortExpressionDeserializer() );
+               $dispatchingDeserializer->addDeserializer( 
$this->newQueryOptionsDeserializer() );
+
+               return new QueryDeserializer( $dispatchingDeserializer );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize Description objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newDescriptionDeserializer() {
+               return new DescriptionDeserializer( $this->dataValueFactory );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize SelectionRequest objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newSelectionRequestDeserializer() {
+               return new SelectionRequestDeserializer( 
$this->dataValueFactory );
+       }
+
+       /**
+        * Returns a Deserializer that can serialize SortExpression objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newSortExpressionDeserializer() {
+               return new SortExpressionDeserializer( $this->dataValueFactory 
);
+       }
+
+       /**
+        * Returns a Deserializer that can serialize QueryOptions objects.
+        *
+        * @since 0.1
+        *
+        * @return Deserializer
+        */
+       public function newQueryOptionsDeserializer() {
+               return new QueryOptionsDeserializer( 
$this->newSortExpressionDeserializer( $this->dataValueFactory ) );
+       }
+
+}
diff --git a/src/Ask/AskFactory.php b/src/Ask/SerializerFactory.php
similarity index 95%
rename from src/Ask/AskFactory.php
rename to src/Ask/SerializerFactory.php
index 6f6445d..49fb46a 100644
--- a/src/Ask/AskFactory.php
+++ b/src/Ask/SerializerFactory.php
@@ -18,8 +18,9 @@
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < [email protected] >
+ * @author Adam Shorland < [email protected] >
  */
-class AskFactory {
+class SerializerFactory {
 
        /**
         * Returns a Serializer that can serialize Query objects.

-- 
To view, visit https://gerrit.wikimedia.org/r/73786
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5413d7b2472c55d9c91c2200f2df811f2d5c1312
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/Ask
Gerrit-Branch: master
Gerrit-Owner: Addshore <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to