WMDE-leszek has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/336827 )

Change subject: Inject RepositoryDefinitions object to DispatchingServiceFactory
......................................................................

Inject RepositoryDefinitions object to DispatchingServiceFactory

DispatchingServiceFactory uses RepositoryDefinitions instance
instead of expecting arbitrary arrays in its constructor.

Bug: T157570
Change-Id: Ia34d5132e494badc38d08ecd1a3ec2b05c592ced
---
M client/includes/DispatchingServiceFactory.php
M client/includes/WikibaseClient.php
M client/tests/phpunit/includes/DispatchingServiceFactoryTest.php
M client/tests/phpunit/includes/DispatchingServiceWiringTest.php
M client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
5 files changed, 40 insertions(+), 45 deletions(-)


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

diff --git a/client/includes/DispatchingServiceFactory.php 
b/client/includes/DispatchingServiceFactory.php
index 7e0498d..4ad6814 100644
--- a/client/includes/DispatchingServiceFactory.php
+++ b/client/includes/DispatchingServiceFactory.php
@@ -12,6 +12,7 @@
 use Wikibase\DataModel\Services\Term\TermBuffer;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\Interactors\TermSearchInteractorFactory;
+use Wikibase\Lib\RepositoryDefinitions;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityStoreWatcher;
 use Wikibase\Lib\Store\PropertyInfoLookup;
@@ -28,14 +29,14 @@
 class DispatchingServiceFactory extends ServiceContainer implements 
EntityDataRetrievalServiceFactory, EntityStoreWatcher {
 
        /**
-        * @var string[]
-        */
-       private $repositoryNames;
-
-       /**
         * @var RepositoryServiceContainerFactory
         */
        private $repositoryServiceContainerFactory;
+
+       /**
+        * @var RepositoryDefinitions
+        */
+       private $repositoryDefinitions;
 
        /**
         * @var RepositoryServiceContainer[]
@@ -43,26 +44,17 @@
        private $repositoryServiceContainers = [];
 
        /**
-        * @var string[] Associative array mapping entity type names to 
repository names which are used to provide
-        *      entities of the given type.
-        */
-       private $entityTypeToRepoMapping;
-
-       /**
         * @param RepositoryServiceContainerFactory 
$repositoryServiceContainerFactory
-        * @param string[] $repositoryNames
-        * @param string[] $entityTypeToRepoMapping
+        * @param RepositoryDefinitions $repositoryDefinitions
         */
        public function __construct(
                RepositoryServiceContainerFactory 
$repositoryServiceContainerFactory,
-               array $repositoryNames,
-               array $entityTypeToRepoMapping
+               RepositoryDefinitions $repositoryDefinitions
        ) {
                parent::__construct();
 
                $this->repositoryServiceContainerFactory = 
$repositoryServiceContainerFactory;
-               $this->repositoryNames = $repositoryNames;
-               $this->entityTypeToRepoMapping = $entityTypeToRepoMapping;
+               $this->repositoryDefinitions = $repositoryDefinitions;
        }
 
        /**
@@ -71,7 +63,7 @@
         */
        public function getServiceMap( $service ) {
                $serviceMap = [];
-               foreach ( $this->repositoryNames as $repositoryName ) {
+               foreach ( $this->repositoryDefinitions->getRepositoryNames() as 
$repositoryName ) {
                        $container = $this->getContainerForRepository( 
$repositoryName );
                        if ( $container !== null ) {
                                $serviceMap[$repositoryName] = 
$container->getService( $service );
@@ -146,7 +138,7 @@
         * @return string[]
         */
        public function getEntityTypeToRepoMapping() {
-               return $this->entityTypeToRepoMapping;
+               return 
$this->repositoryDefinitions->getEntityTypeToRepositoryMapping();
        }
 
        /**
diff --git a/client/includes/WikibaseClient.php 
b/client/includes/WikibaseClient.php
index 90af0ba..cffc067 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -378,8 +378,7 @@
                if ( $this->entityDataRetrievalServiceFactory === null ) {
                        $factory = new DispatchingServiceFactory(
                                $this->getRepositoryServiceContainerFactory(),
-                               
$this->repositoryDefinitions->getRepositoryNames(),
-                               
$this->repositoryDefinitions->getEntityTypeToRepositoryMapping()
+                               $this->repositoryDefinitions
                        );
                        $factory->loadWiringFiles( $this->settings->getSetting( 
'dispatchingServiceWiringFiles' ) );
 
diff --git a/client/tests/phpunit/includes/DispatchingServiceFactoryTest.php 
b/client/tests/phpunit/includes/DispatchingServiceFactoryTest.php
index ad9f4ad..515ebae 100644
--- a/client/tests/phpunit/includes/DispatchingServiceFactoryTest.php
+++ b/client/tests/phpunit/includes/DispatchingServiceFactoryTest.php
@@ -2,16 +2,14 @@
 
 namespace Wikibase\Client\Tests;
 
-use DataValues\Deserializers\DataValueDeserializer;
 use Wikibase\Client\DispatchingServiceFactory;
 use Wikibase\Client\Store\RepositoryServiceContainer;
 use Wikibase\Client\Store\RepositoryServiceContainerFactory;
-use Wikibase\Client\WikibaseClient;
-use Wikibase\DataModel\Entity\BasicEntityIdParser;
 use Wikibase\DataModel\Entity\EntityRedirect;
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\EntityRevision;
+use Wikibase\Lib\RepositoryDefinitions;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 
 /**
@@ -51,6 +49,13 @@
                return $containerFactory;
        }
 
+       private function getRepositoryDefinition( $repositoryName, array 
$customSettings ) {
+               return [ $repositoryName => array_merge(
+                       [ 'database' => '', 'entity-types' => [], 
'prefix-mapping' => [] ],
+                       $customSettings
+               ) ];
+       }
+
        /**
         * @param RepositoryServiceContainerFactory $containerFactory
         *
@@ -59,8 +64,10 @@
        private function getDispatchingServiceFactory( 
RepositoryServiceContainerFactory $containerFactory ) {
                $factory = new DispatchingServiceFactory(
                        $containerFactory,
-                       [ '', 'foo' ],
-                       [ 'item' => '', 'property' => 'foo' ]
+                       new RepositoryDefinitions( array_merge(
+                               $this->getRepositoryDefinition( '', [ 
'entity-types' => [ 'item' ] ] ),
+                               $this->getRepositoryDefinition( 'foo', [ 
'entity-types' => [ 'property' ] ] )
+                       ) )
                );
 
                $factory->defineService( 'EntityRevisionLookup', function() {
@@ -112,22 +119,6 @@
                $this->assertInstanceOf( EntityRevisionLookup::class, 
$serviceOne );
                $this->assertInstanceOf( EntityRevisionLookup::class, 
$serviceTwo );
                $this->assertSame( $serviceOne, $serviceTwo );
-       }
-
-       /**
-        * @param string|false $dbName
-        * @param string $repositoryName
-        *
-        * @return RepositoryServiceContainer
-        */
-       private function getRepositoryServiceContainer( $dbName, 
$repositoryName ) {
-               return new RepositoryServiceContainer(
-                       $dbName,
-                       $repositoryName,
-                       new BasicEntityIdParser(),
-                       new DataValueDeserializer( [] ),
-                       WikibaseClient::getDefaultInstance()
-               );
        }
 
        /**
diff --git a/client/tests/phpunit/includes/DispatchingServiceWiringTest.php 
b/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
index 240e5fc..2dae3c4 100644
--- a/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
+++ b/client/tests/phpunit/includes/DispatchingServiceWiringTest.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Services\Entity\EntityPrefetcher;
 use Wikibase\DataModel\Services\EntityId\PrefixMappingEntityIdParserFactory;
 use Wikibase\DataModel\Services\Term\TermBuffer;
+use Wikibase\Lib\RepositoryDefinitions;
 use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
 use Wikibase\Lib\Interactors\TermSearchInteractorFactory;
 use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -45,8 +46,11 @@
        private function getDispatchingServiceFactory() {
                $factory = new DispatchingServiceFactory(
                        $this->getRepositoryServiceContainerFactory(),
-                       [ '' ],
-                       []
+                       new RepositoryDefinitions( [ '' => [
+                               'database' => false,
+                               'entity-types' => [],
+                               'prefix-mapping' => [],
+                       ] ] )
                );
 
                $factory->loadWiringFiles( [ __DIR__ . 
'/../../../includes/DispatchingServiceWiring.php' ] );
diff --git a/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php 
b/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
index 61e4c65..7a09846 100644
--- a/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
+++ b/client/tests/phpunit/includes/Store/Sql/DirectSqlStoreTest.php
@@ -17,6 +17,7 @@
 use Wikibase\DirectSqlStore;
 use Wikibase\Lib\Changes\EntityChangeFactory;
 use Wikibase\Lib\EntityIdComposer;
+use Wikibase\Lib\RepositoryDefinitions;
 use Wikibase\Lib\Store\EntityChangeLookup;
 use Wikibase\Lib\Store\EntityNamespaceLookup;
 use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -50,7 +51,15 @@
                        ->disableOriginalConstructor()
                        ->getMock();
 
-               $dispatchingServiceFactory = new DispatchingServiceFactory( 
$containerFactory, [ '' ], [] );
+               /** @var RepositoryDefinitions $repositoryDefinitions */
+               $repositoryDefinitions = $this->getMockBuilder( 
RepositoryDefinitions::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $dispatchingServiceFactory = new DispatchingServiceFactory(
+                       $containerFactory,
+                       $repositoryDefinitions
+               );
 
                $dispatchingServiceFactory->defineService( 'EntityPrefetcher', 
function() {
                        return new NullEntityPrefetcher();

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

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

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

Reply via email to