Bene has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/278566

Change subject: Add support for all entity types in ParserOutputJsConfigBuilder
......................................................................

Add support for all entity types in ParserOutputJsConfigBuilder

This changes the js config builder to require the entity serializer as a
dependency instead of creating one that only supports items and
properties.

Change-Id: I7380b0c726daa5b808c397436731b8ba1c397581
---
M repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
M repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
M repo/includes/WikibaseRepo.php
M 
repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
M repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
5 files changed, 67 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/66/278566/1

diff --git a/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php 
b/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
index c7c5aaa..4e6c5f9 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGeneratorFactory.php
@@ -4,6 +4,7 @@
 
 use GeoData\GeoData;
 use Language;
+use Serializers\Serializer;
 use Wikibase\DataModel\Entity\EntityIdParser;
 use Wikibase\DataModel\Services\Entity\PropertyDataTypeMatcher;
 use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
@@ -63,6 +64,11 @@
        private $externalEntityIdParser;
 
        /**
+        * @var Serializer
+        */
+       private $entitySerializer;
+
+       /**
         * @var string[]
         */
        private $preferredGeoDataProperties;
@@ -86,6 +92,7 @@
         * @param EntityDataFormatProvider $entityDataFormatProvider
         * @param PropertyDataTypeLookup $propertyDataTypeLookup
         * @param EntityIdParser $externalEntityIdParser
+        * @param Serializer $entitySerializer
         * @param string[] $preferredGeoDataProperties
         * @param string[] $preferredPageImagesProperties
         * @param string[] $globeUris Mapping of globe uris to string names.
@@ -99,9 +106,10 @@
                EntityDataFormatProvider $entityDataFormatProvider,
                PropertyDataTypeLookup $propertyDataTypeLookup,
                EntityIdParser $externalEntityIdParser,
+               Serializer $entitySerializer,
                array $preferredGeoDataProperties = array(),
                array $preferredPageImagesProperties = array(),
-               array $globeUris
+               array $globeUris = array()
        ) {
                $this->entityViewFactory = $entityViewFactory;
                $this->entityInfoBuilderFactory = $entityInfoBuilderFactory;
@@ -111,6 +119,7 @@
                $this->entityDataFormatProvider = $entityDataFormatProvider;
                $this->propertyDataTypeLookup = $propertyDataTypeLookup;
                $this->externalEntityIdParser = $externalEntityIdParser;
+               $this->entitySerializer = $entitySerializer;
                $this->preferredGeoDataProperties = $preferredGeoDataProperties;
                $this->preferredPageImagesProperties = 
$preferredPageImagesProperties;
                $this->globeUris = $globeUris;
@@ -145,7 +154,7 @@
         * @return ParserOutputJsConfigBuilder
         */
        private function newParserOutputJsConfigBuilder() {
-               return new ParserOutputJsConfigBuilder();
+               return new ParserOutputJsConfigBuilder( $this->entitySerializer 
);
        }
 
        /**
diff --git a/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php 
b/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
index 7888623..99c7ab0 100644
--- a/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
+++ b/repo/includes/ParserOutput/ParserOutputJsConfigBuilder.php
@@ -4,6 +4,7 @@
 
 use DataValues\Serializers\DataValueSerializer;
 use FormatJson;
+use Serializers\Serializer;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\SerializerFactory;
 
@@ -20,16 +21,12 @@
 class ParserOutputJsConfigBuilder {
 
        /**
-        * @var SerializerFactory
+        * @var Serializer
         */
-       private $serializerFactory;
+       private $entitySerializer;
 
-       public function __construct() {
-               $this->serializerFactory = new SerializerFactory(
-                       new DataValueSerializer(),
-                       
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
-                       
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
-               );
+       public function __construct( Serializer $entitySerializer ) {
+               $this->entitySerializer = $entitySerializer;
        }
 
        /**
@@ -60,9 +57,7 @@
         * @return string
         */
        private function getSerializedEntity( EntityDocument $entity ) {
-               $serializer = $this->serializerFactory->newEntitySerializer();
-
-               $serialization = $serializer->serialize( $entity );
+               $serialization = $this->entitySerializer->serialize( $entity );
 
                // Remove empty parts of the serialization (Added when Lib 
Serializers were removed)
                // We could allow parts if we are sure it would not break 
anything
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index 984b3f9..50329ce 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -1541,6 +1541,10 @@
                        // CachingPropertyInfoStore enough?
                        new InProcessCachingDataTypeLookup( 
$this->getPropertyDataTypeLookup() ),
                        $this->getLocalEntityUriParser(),
+                       $this->getEntitySerializer(
+                               
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
+                               
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
+                       ),
                        $this->settings->getSetting( 
'preferredGeoDataProperties' ),
                        $this->settings->getSetting( 
'preferredPageImagesProperties' ),
                        $this->settings->getSetting( 'globeUris' )
diff --git 
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
 
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
index 36d84ad..e2a18cb 100644
--- 
a/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
+++ 
b/repo/tests/phpunit/includes/ParserOutput/EntityParserOutputGeneratorFactoryTest.php
@@ -2,8 +2,18 @@
 
 namespace Wikibase\Repo\Tests\ParserOutput;
 
+use Serializers\Serializer;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
+use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup;
+use Wikibase\LanguageFallbackChainFactory;
+use Wikibase\Lib\Store\EntityInfoBuilderFactory;
+use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\LinkedData\EntityDataFormatProvider;
+use Wikibase\Repo\ParserOutput\DispatchingEntityViewFactory;
 use Wikibase\Repo\ParserOutput\EntityParserOutputGenerator;
+use Wikibase\Repo\ParserOutput\EntityParserOutputGeneratorFactory;
 use Wikibase\Repo\WikibaseRepo;
+use Wikibase\View\Template\TemplateFactory;
 
 /**
  * @covers Wikibase\Repo\ParserOutput\EntityParserOutputGeneratorFactory
@@ -20,8 +30,6 @@
        public function testGetEntityParserOutputGenerator() {
                $parserOutputGeneratorFactory = 
$this->getEntityParserOutputGeneratorFactory();
 
-               $testUser = new \TestUser( 'Wikibase User' );
-
                $instance = 
$parserOutputGeneratorFactory->getEntityParserOutputGenerator(
                        'en', true
                );
@@ -30,7 +38,19 @@
        }
 
        private function getEntityParserOutputGeneratorFactory() {
-               return 
WikibaseRepo::getDefaultInstance()->getEntityParserOutputGeneratorFactory();
+               return new EntityParserOutputGeneratorFactory(
+                       $this->getMockBuilder( 
DispatchingEntityViewFactory::class )
+                               ->disableOriginalConstructor()->getMock(),
+                       $this->getMock( EntityInfoBuilderFactory::class ),
+                       $this->getMock( EntityTitleLookup::class ),
+                       new LanguageFallbackChainFactory(),
+                       $this->getMockBuilder( TemplateFactory::class )
+                               ->disableOriginalConstructor()->getMock(),
+                       $this->getMock( EntityDataFormatProvider::class ),
+                       $this->getMock( PropertyDataTypeLookup::class ),
+                       new BasicEntityIdParser(),
+                       $this->getMock( Serializer::class )
+               );
        }
 
 }
diff --git 
a/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php 
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
index 27f77a9..91f61e0 100644
--- 
a/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
+++ 
b/repo/tests/phpunit/includes/ParserOutput/ParserOutputJsConfigBuilderTest.php
@@ -2,19 +2,23 @@
 
 namespace Wikibase\Repo\Tests\ParserOutput;
 
+use DataValues\Deserializers\DataValueDeserializer;
+use DataValues\Serializers\DataValueSerializer;
 use DataValues\StringValue;
 use MediaWikiTestCase;
+use Wikibase\DataModel\DeserializerFactory;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\SerializerFactory;
 use Wikibase\DataModel\Snak\PropertyValueSnak;
 use Wikibase\DataModel\Statement\StatementListProvider;
 use Wikibase\DataModel\Term\FingerprintProvider;
 use Wikibase\Repo\ParserOutput\ParserOutputJsConfigBuilder;
-use Wikibase\Repo\WikibaseRepo;
 
 /**
  * @covers Wikibase\Repo\ParserOutput\ParserOutputJsConfigBuilder
@@ -29,12 +33,22 @@
  */
 class ParserOutputJsConfigBuilderTest extends MediaWikiTestCase {
 
+       private function newEntitySerializer() {
+               $serializerFactory = new SerializerFactory(
+                       new DataValueSerializer(),
+                       
SerializerFactory::OPTION_SERIALIZE_MAIN_SNAKS_WITHOUT_HASH +
+                       
SerializerFactory::OPTION_SERIALIZE_REFERENCE_SNAKS_WITHOUT_HASH
+               );
+
+               return $serializerFactory->newEntitySerializer();
+       }
+
        public function testBuildConfigItem() {
                $item = new Item( new ItemId( 'Q5881' ) );
                $this->addLabels( $item );
                $mainSnakPropertyId = $this->addStatements( $item );
 
-               $configBuilder = new ParserOutputJsConfigBuilder();
+               $configBuilder = new ParserOutputJsConfigBuilder( 
$this->newEntitySerializer() );
                $configVars = $configBuilder->build( $item );
 
                $this->assertWbEntityId( 'Q5881', $configVars );
@@ -55,7 +69,7 @@
                $this->addLabels( $property );
                $mainSnakPropertyId = $this->addStatements( $property );
 
-               $configBuilder = new ParserOutputJsConfigBuilder();
+               $configBuilder = new ParserOutputJsConfigBuilder( 
$this->newEntitySerializer() );
                $configVars = $configBuilder->build( $property );
 
                $this->assertWbEntityId( 'P330', $configVars );
@@ -88,8 +102,12 @@
        }
 
        public function assertSerializationEqualsEntity( EntityDocument 
$entity, $serialization ) {
-               $deserializer = 
WikibaseRepo::getDefaultInstance()->getExternalFormatEntityDeserializer();
-               $unserializedEntity = $deserializer->deserialize( 
$serialization );
+               $deserializerFactory = new DeserializerFactory(
+                       new DataValueDeserializer( array( 'string' => 
StringValue::class ) ),
+                       new BasicEntityIdParser()
+               );
+
+               $unserializedEntity = 
$deserializerFactory->newEntityDeserializer()->deserialize( $serialization );
 
                $this->assertTrue(
                        $unserializedEntity->equals( $entity ),

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I7380b0c726daa5b808c397436731b8ba1c397581
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Bene <[email protected]>

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

Reply via email to