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