jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/336815 )
Change subject: Use RepositoryDefinitions in top-level factories
......................................................................
Use RepositoryDefinitions in top-level factories
RepositoryDefinitions object is used instead of directly
accessing arbitrary settings.
As currently foreign repositories are defined as a part of
Client settings, WikibaseClient's static constructor
instantiates a RepositoryDefinitions object based on
the settings.
This might change once the way of defining foreign repositories
changes.
When Client is enabled Repo uses RepositoryDefinitions
passed from Client to figure out all available entity types
(including foreign entity types apart from repo's own entity
types).
When Client is not enabled, WikibaseRepo's static
constructor instantiates RepositoryDefinitions for
a single repository.
Bug: T157570
Change-Id: Icb0ead35bafb8d580de49c9ec662688791cbf16a
---
M client/includes/WikibaseClient.php
M client/tests/phpunit/includes/Store/RepositoryServiceContainerTest.php
M client/tests/phpunit/includes/WikibaseClientTest.php
M repo/includes/WikibaseRepo.php
M repo/tests/phpunit/includes/Content/EntityHandlerTest.php
M repo/tests/phpunit/includes/WikibaseRepoTest.php
6 files changed, 166 insertions(+), 158 deletions(-)
Approvals:
Daniel Kinzler: Looks good to me, approved
jenkins-bot: Verified
diff --git a/client/includes/WikibaseClient.php
b/client/includes/WikibaseClient.php
index 053f231..710e15e 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -75,6 +75,7 @@
use Wikibase\Lib\EntityTypeDefinitions;
use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
use Wikibase\Lib\Interactors\TermSearchInteractor;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Lib\Serialization\RepositorySpecificDataValueDeserializerFactory;
use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
use Wikibase\Lib\LanguageNameLookup;
@@ -217,6 +218,11 @@
private $entityTypeDefinitions;
/**
+ * @var RepositoryDefinitions
+ */
+ private $repositoryDefinitions;
+
+ /**
* @var PrefetchingTermLookup|null
*/
private $termLookup = null;
@@ -313,17 +319,20 @@
* @param SettingsArray $settings
* @param DataTypeDefinitions $dataTypeDefinitions
* @param EntityTypeDefinitions $entityTypeDefinitions
+ * @param RepositoryDefinitions $repositoryDefinitions
* @param SiteLookup $siteLookup
*/
public function __construct(
SettingsArray $settings,
DataTypeDefinitions $dataTypeDefinitions,
EntityTypeDefinitions $entityTypeDefinitions,
+ RepositoryDefinitions $repositoryDefinitions,
SiteLookup $siteLookup
) {
$this->settings = $settings;
$this->dataTypeDefinitions = $dataTypeDefinitions;
$this->entityTypeDefinitions = $entityTypeDefinitions;
+ $this->repositoryDefinitions = $repositoryDefinitions;
$this->siteLookup = $siteLookup;
}
@@ -371,12 +380,8 @@
if ( $this->entityDataRetrievalServiceFactory === null ) {
$factory = new DispatchingServiceFactory(
$this->getRepositoryServiceContainerFactory(),
- // FIXME: array_merge trick will no longer be
needed once repositry settings are unified, see: T153767.
- array_merge(
- [ '' ],
- array_keys(
$this->getSettings()->getSetting( 'foreignRepositories' ) )
- ),
- $this->buildEntityTypeToRepoMapping()
+
$this->repositoryDefinitions->getRepositoryNames(),
+
$this->repositoryDefinitions->getEntityTypeToRepositoryMapping()
);
$factory->loadWiringFiles( $this->settings->getSetting(
'dispatchingServiceWiringFiles' ) );
@@ -389,75 +394,16 @@
private function getRepositoryServiceContainerFactory() {
$idParserFactory = new PrefixMappingEntityIdParserFactory(
$this->getEntityIdParser(),
- $this->getIdPrefixMaps()
+ $this->repositoryDefinitions->getPrefixMappings()
);
return new RepositoryServiceContainerFactory(
$idParserFactory,
new RepositorySpecificDataValueDeserializerFactory(
$idParserFactory ),
- $this->getRepositoryDatabaseNames(),
+ $this->repositoryDefinitions->getDatabaseNames(),
$this->getSettings()->getSetting(
'repositoryServiceWiringFiles' ),
$this
);
- }
-
- /**
- * Returns an associative array mapping names of configured
repositories to respective database names
- * (either strings or false for local wiki's database).
- * Returned map contains an empty string key for a local repository.
- *
- * @return array
- */
- private function getRepositoryDatabaseNames() {
- // FIXME: t no longer be needed to check different settings
(repoDatabase vs foreignRepositories
- // once repositry settings are unified, see: T153767.
- $databaseNames = [ '' => $this->getSettings()->getSetting(
'repoDatabase' ) ];
-
- foreach ( $this->getSettings()->getSetting(
'foreignRepositories' )
- as $repositoryName => $repositorySettings
- ) {
- $databaseNames[$repositoryName] =
$repositorySettings['repoDatabase'];
- }
-
- return $databaseNames;
- }
-
- /**
- * Returns a map of id prefix mappings defined for configured foreign
repositories.
- *
- * @return array[] Associative array mapping repository names to
repository-specific prefix mapping.
- */
- private function getIdPrefixMaps() {
- $mappings = [];
- foreach ( $this->getSettings()->getSetting(
'foreignRepositories' )
- as $repositoryName => $repositorySettings
- ) {
- if ( array_key_exists( 'prefixMapping',
$repositorySettings ) ) {
- $mappings[$repositoryName] =
$repositorySettings['prefixMapping'];
- }
- }
- return $mappings;
- }
-
- /**
- * @return string[] Associative array mapping entity type names to
repository names which are used to provide
- * entities of the given type.
- * Note: currently single entity type is mapped to a single
repository. This might change in the future
- * and a particular entity type might be provide by multitple
repositories.
- */
- private function buildEntityTypeToRepoMapping() {
- $localRepoEntityTypes = array_keys(
$this->getSettings()->getSetting( 'repoNamespaces' ) );
- $entityTypeToRepoMap = array_fill_keys( $localRepoEntityTypes,
'' );
- foreach ( $this->getSettings()->getSetting(
'foreignRepositories' ) as $repositoryName => $repoSettings ) {
- foreach ( $repoSettings['supportedEntityTypes'] as
$entityType ) {
- if ( array_key_exists( $entityType,
$entityTypeToRepoMap ) ) {
- wfWarn( 'Using same entity types on
multiple repositories is not supported yet.' );
- continue;
- }
- $entityTypeToRepoMap[$entityType] =
$repositoryName;
- }
- }
- return $entityTypeToRepoMap;
}
/**
@@ -717,8 +663,34 @@
$settings->getSetting( 'disabledDataTypes' )
),
new EntityTypeDefinitions( $entityTypeDefinitions ),
+ self::getRepositoryDefinitionsFromSettings( $settings ),
MediaWikiServices::getInstance()->getSiteLookup()
);
+ }
+
+ /**
+ * @param SettingsArray $settings
+ *
+ * @return RepositoryDefinitions
+ */
+ private static function getRepositoryDefinitionsFromSettings(
SettingsArray $settings ) {
+ // FIXME: It might no longer be needed to check different
settings (repoDatabase vs foreignRepositories)
+ // once repository settings are unified, see: T153767.
+ $definitions = [ '' => [
+ 'database' => $settings->getSetting( 'repoDatabase' ),
+ 'prefix-mapping' => [ '' => '' ],
+ 'entity-types' => array_keys( $settings->getSetting(
'repoNamespaces' ) ),
+ ] ];
+
+ foreach ( $settings->getSetting( 'foreignRepositories' ) as
$repository => $repositorySettings ) {
+ $definitions[$repository] = [
+ 'database' =>
$repositorySettings['repoDatabase'],
+ 'entity-types' =>
$repositorySettings['supportedEntityTypes'],
+ 'prefix-mapping' =>
$repositorySettings['prefixMapping'],
+ ];
+ }
+
+ return new RepositoryDefinitions( $definitions );
}
/**
@@ -1306,4 +1278,11 @@
);
}
+ /**
+ * @return RepositoryDefinitions
+ */
+ public function getRepositoryDefinitions() {
+ return $this->repositoryDefinitions;
+ }
+
}
diff --git
a/client/tests/phpunit/includes/Store/RepositoryServiceContainerTest.php
b/client/tests/phpunit/includes/Store/RepositoryServiceContainerTest.php
index 47d6bc2..0732763 100644
--- a/client/tests/phpunit/includes/Store/RepositoryServiceContainerTest.php
+++ b/client/tests/phpunit/includes/Store/RepositoryServiceContainerTest.php
@@ -15,9 +15,9 @@
use Wikibase\EntityRevision;
use Wikibase\Lib\DataTypeDefinitions;
use Wikibase\Lib\EntityTypeDefinitions;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Lib\Store\EntityRevisionLookup;
use Wikibase\Lib\Store\EntityStoreWatcher;
-use Wikibase\SettingsArray;
/**
* @covers Wikibase\Client\Store\RepositoryServiceContainer
@@ -33,15 +33,16 @@
* @return WikibaseClient
*/
private function getWikibaseClient() {
- $settings =
WikibaseClient::getDefaultInstance()->getSettings()->getArrayCopy();
- $settings['foreignRepositories'] = [
- 'foo' => [ 'repoDatabase' => 'foowiki', 'prefixMapping'
=> [ 'bar' => 'xyz' ] ]
- ];
+ /** @var RepositoryDefinitions $repositoryDefinitions */
+ $repositoryDefinitions = $this->getMockBuilder(
RepositoryDefinitions::class )
+ ->disableOriginalConstructor()
+ ->getMock();
return new WikibaseClient(
- new SettingsArray( $settings ),
+ WikibaseClient::getDefaultInstance()->getSettings(),
new DataTypeDefinitions( [] ),
new EntityTypeDefinitions( [] ),
+ $repositoryDefinitions,
new HashSiteStore()
);
}
diff --git a/client/tests/phpunit/includes/WikibaseClientTest.php
b/client/tests/phpunit/includes/WikibaseClientTest.php
index 1ec8cb5..7737124 100644
--- a/client/tests/phpunit/includes/WikibaseClientTest.php
+++ b/client/tests/phpunit/includes/WikibaseClientTest.php
@@ -36,6 +36,7 @@
use Wikibase\Lib\Interactors\TermSearchInteractor;
use Wikibase\Lib\OutputFormatSnakFormatterFactory;
use Wikibase\Lib\OutputFormatValueFormatterFactory;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Lib\Store\EntityContentDataCodec;
use Wikibase\Lib\Store\LanguageFallbackLabelDescriptionLookupFactory;
use Wikibase\Lib\Store\PropertyOrderProvider;
@@ -152,6 +153,7 @@
$settings,
new DataTypeDefinitions( array() ),
new EntityTypeDefinitions( array() ),
+ $this->getRepositoryDefinitions(),
$this->getSiteLookup()
);
@@ -172,6 +174,7 @@
$settings,
new DataTypeDefinitions( array() ),
new EntityTypeDefinitions( array() ),
+ $this->getRepositoryDefinitions(),
$siteLookup
);
@@ -206,6 +209,7 @@
$settings,
new DataTypeDefinitions( array() ),
new EntityTypeDefinitions( array() ),
+ $this->getRepositoryDefinitions(),
$siteLookup
);
@@ -365,6 +369,12 @@
$this->assertInstanceOf( DataAccessSnakFormatterFactory::class,
$instance );
}
+ public function testGetRepositoryDefinitions() {
+ $repositoryDefinitions =
$this->getWikibaseClient()->getRepositoryDefinitions();
+ $this->assertInstanceOf( RepositoryDefinitions::class,
$repositoryDefinitions );
+ $this->assertEquals( $this->getRepositoryDefinitions(),
$repositoryDefinitions );
+ }
+
/**
* @return WikibaseClient
*/
@@ -373,8 +383,18 @@
new SettingsArray(
WikibaseClient::getDefaultInstance()->getSettings()->getArrayCopy() ),
new DataTypeDefinitions( array() ),
new EntityTypeDefinitions( array() ),
+ $this->getRepositoryDefinitions(),
new HashSiteStore()
);
}
+ /**
+ * @return RepositoryDefinitions
+ */
+ private function getRepositoryDefinitions() {
+ return new RepositoryDefinitions(
+ [ '' => [ 'database' => '', 'entity-types' => [],
'prefix-mapping' => [] ] ]
+ );
+ }
+
}
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index da724a6..55a29e8 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -76,6 +76,7 @@
use Wikibase\Lib\OutputFormatSnakFormatterFactory;
use Wikibase\Lib\OutputFormatValueFormatterFactory;
use Wikibase\Lib\PropertyInfoDataTypeLookup;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Lib\SnakFormatter;
use Wikibase\Lib\StaticContentLanguages;
use Wikibase\Lib\Store\CachingPropertyOrderProvider;
@@ -260,6 +261,11 @@
private $entityTypeDefinitions;
/**
+ * @var RepositoryDefinitions
+ */
+ private $repositoryDefinitons;
+
+ /**
* @var ValueSnakRdfBuilderFactory
*/
private $valueSnakRdfBuilderFactory;
@@ -278,11 +284,6 @@
* @var EntityDataRetrievalServiceFactory|null
*/
private $entityDataRetrievalServiceFactory = null;
-
- /**
- * @var SettingsArray|null
- */
- private $clientSettings = null;
/**
* IMPORTANT: Use only when it is not feasible to inject an instance
properly.
@@ -307,13 +308,14 @@
$settings = new SettingsArray( $wgWBRepoSettings );
$settings->setSetting( 'entityNamespaces',
self::buildEntityNamespaceConfigurations() );
+ $repositoryDefinitions =
self::getRepositoryDefinitionsFromSettings( $settings );
+
$dataRetrievalServices = null;
- $clientSettings = null;
// If client functionality is enabled, use it to enable
federation.
if ( defined( 'WBC_VERSION' ) ) {
$dataRetrievalServices =
WikibaseClient::getDefaultInstance()->getEntityDataRetrievalServiceFactory();
- $clientSettings =
WikibaseClient::getDefaultInstance()->getSettings();
+ $repositoryDefinitions =
WikibaseClient::getDefaultInstance()->getRepositoryDefinitions();
}
return new self(
@@ -323,9 +325,22 @@
$settings->getSetting( 'disabledDataTypes' )
),
new EntityTypeDefinitions( $entityTypeDefinitions ),
- $dataRetrievalServices,
- $clientSettings
+ $repositoryDefinitions,
+ $dataRetrievalServices
);
+ }
+
+ /**
+ * @param SettingsArray $settings
+ *
+ * @return RepositoryDefinitions
+ */
+ private static function getRepositoryDefinitionsFromSettings(
SettingsArray $settings ) {
+ return new RepositoryDefinitions( [ '' => [
+ 'database' => $settings->getSetting( 'changesDatabase'
),
+ 'prefix-mapping' => [ '' => '' ],
+ 'entity-types' => array_keys( $settings->getSetting(
'entityNamespaces' ) ),
+ ] ] );
}
/**
@@ -370,22 +385,6 @@
*/
public function newValidatorBuilders() {
$urlSchemes = $this->settings->getSetting( 'urlSchemes' );
- $entityTypesPerRepo = [];
-
- if ( $this->clientSettings ) {
- $foreignRepoConfig = $this->clientSettings->getSetting(
'foreignRepositories' );
- $entityTypesPerRepo = array_map(
- function( $repoSettings ) {
- return $repoSettings[
'supportedEntityTypes' ];
- },
- $foreignRepoConfig
- );
- }
-
- $entityTypesPerRepo = array_merge(
- $entityTypesPerRepo,
- [ '' => $this->getLocalEntityTypes(), ]
- );
return new ValidatorBuilders(
$this->getEntityLookup(),
@@ -394,7 +393,7 @@
$this->getVocabularyBaseUri(),
$this->getMonolingualTextLanguages(),
$this->getCachingCommonsMediaFileNameLookup(),
- $entityTypesPerRepo,
+
$this->repositoryDefinitons->getEntityTypesPerRepository(),
new MediaWikiPageNameNormalizer()
);
}
@@ -480,39 +479,34 @@
}
/**
- * FIXME: Optional $entityDataRetrievalServiceFactory and
$clientSettings make it possible to access
+ * FIXME: Optional $entityDataRetrievalServiceFactory makes it possible
to access
* entities from foreign repositories from Repo component but they also
introduce the optional
* dependency on the Client component. Such dependency is bad and in
the long run it should be removed
* by making EntityDataRetrievalServiceFactory implementation provided
to WikibaseRepo not be
- * bound to WikibaseClient. Foreign repository settings should also
moved out of Client's settings,
- * so WikibaseRepo could be aware of entity types introduced in foreign
repositories without needing
- * to rely on $clientSettings.
+ * bound to WikibaseClient.
*
* @param SettingsArray $settings
* @param DataTypeDefinitions $dataTypeDefinitions
* @param EntityTypeDefinitions $entityTypeDefinitions
+ * @param RepositoryDefinitions $repositoryDefinitions
* @param EntityDataRetrievalServiceFactory|null
$entityDataRetrievalServiceFactory optional factory
* of entity data retrieval services that will be used by the
Repo instead of it creating
* instances of those services itself.
* This factory could be provided in order to allow Repo make
use of Dispatching services
* and access data of entities from foreign repositories.
- * @param SettingsArray|null $clientSettings Settings of WikibaseClient
related
- * to the $entityDataRetrievalServiceFactory. Should be provided
when
- * foreign repositories configured in the WikibaseClient
instance introduce custom
- * entity types.
*/
public function __construct(
SettingsArray $settings,
DataTypeDefinitions $dataTypeDefinitions,
EntityTypeDefinitions $entityTypeDefinitions,
- EntityDataRetrievalServiceFactory
$entityDataRetrievalServiceFactory = null,
- SettingsArray $clientSettings = null
+ RepositoryDefinitions $repositoryDefinitions,
+ EntityDataRetrievalServiceFactory
$entityDataRetrievalServiceFactory = null
) {
$this->settings = $settings;
$this->dataTypeDefinitions = $dataTypeDefinitions;
$this->entityTypeDefinitions = $entityTypeDefinitions;
+ $this->repositoryDefinitons = $repositoryDefinitions;
$this->entityDataRetrievalServiceFactory =
$entityDataRetrievalServiceFactory;
- $this->clientSettings = $clientSettings;
}
/**
@@ -1259,25 +1253,7 @@
* entity types from the configured foreign repositories.
*/
public function getEnabledEntityTypes() {
- if ( $this->clientSettings ) {
- $foreignRepoConfig = $this->clientSettings->getSetting(
'foreignRepositories' );
- $foreignRepoEntityTypes = array_reduce(
- $foreignRepoConfig,
- function( $types, $repoSettings ) {
- return array_merge( $types,
$repoSettings['supportedEntityTypes'] );
- },
- []
- );
- } else {
- $foreignRepoEntityTypes = [];
- }
-
- $enabledTypes = array_unique( array_merge(
- $this->getLocalEntityTypes(),
- $foreignRepoEntityTypes
- ) );
-
- return $enabledTypes;
+ return $this->repositoryDefinitons->getAllEntityTypes();
}
/**
diff --git a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
index 26a4cc6..1882772 100644
--- a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
+++ b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
@@ -21,6 +21,7 @@
use Wikibase\EntityContent;
use Wikibase\Lib\DataTypeDefinitions;
use Wikibase\Lib\EntityTypeDefinitions;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Repo\Content\EntityHandler;
use Wikibase\Repo\Validators\EntityValidator;
use Wikibase\Repo\Validators\ValidatorErrorLocalizer;
@@ -55,10 +56,16 @@
$repoSettings = array_merge( $repoSettings,
$settings->getArrayCopy() );
}
+ /** @var RepositoryDefinitions $repositoryDefinitions */
+ $repositoryDefinitions = $this->getMockBuilder(
RepositoryDefinitions::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
return new WikibaseRepo(
new SettingsArray( $repoSettings ),
new DataTypeDefinitions( array() ),
- new EntityTypeDefinitions( require __DIR__ .
'/../../../../../lib/WikibaseLib.entitytypes.php' )
+ new EntityTypeDefinitions( require __DIR__ .
'/../../../../../lib/WikibaseLib.entitytypes.php' ),
+ $repositoryDefinitions
);
}
diff --git a/repo/tests/phpunit/includes/WikibaseRepoTest.php
b/repo/tests/phpunit/includes/WikibaseRepoTest.php
index 62c885d..cf8be2b 100644
--- a/repo/tests/phpunit/includes/WikibaseRepoTest.php
+++ b/repo/tests/phpunit/includes/WikibaseRepoTest.php
@@ -19,8 +19,8 @@
use Serializers\Serializer;
use User;
use Wikibase\ChangeOp\ChangeOpFactoryProvider;
-use Wikibase\Client\WikibaseClient;
use Wikibase\DataModel\DeserializerFactory;
+use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\EntityIdParser;
use Wikibase\DataModel\Entity\EntityIdValue;
use Wikibase\DataModel\Entity\ItemId;
@@ -42,6 +42,7 @@
use Wikibase\Lib\Interactors\TermIndexSearchInteractor;
use Wikibase\Lib\OutputFormatSnakFormatterFactory;
use Wikibase\Lib\OutputFormatValueFormatterFactory;
+use Wikibase\Lib\RepositoryDefinitions;
use Wikibase\Lib\Store\EntityContentDataCodec;
use Wikibase\Lib\Store\EntityNamespaceLookup;
use Wikibase\Lib\Store\EntityRevisionLookup;
@@ -99,15 +100,28 @@
}
public function testNewValidatorBuilders() {
- $entityId = new ItemId( 'other:Q9' );
- $repo = $this->getWikibaseRepoWithClientSettings( new
SettingsArray( [
- 'foreignRepositories' => [
- 'other' => [
- 'supportedEntityTypes' => [
$entityId->getEntityType() ],
- ]
- ]
- ] ) );
- $valueToValidate = new EntityIdValue( $entityId );
+ $kittenId = $this->getMockBuilder( EntityId::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $kittenId->expects( $this->any() )
+ ->method( 'getEntityType' )
+ ->will( $this->returnValue( 'kitten' ) );
+ $kittenId->expects( $this->any() )
+ ->method( 'getSerialization' )
+ ->will( $this->returnValue( 'other:K9' ) );
+ $kittenId->expects( $this->any() )
+ ->method( 'getLocalPart' )
+ ->will( $this->returnValue( 'K9' ) );
+ $kittenId->expects( $this->any() )
+ ->method( 'getRepositoryName' )
+ ->will( $this->returnValue( 'other' ) );
+
+ $valueToValidate = new EntityIdValue( $kittenId );
+
+ $repo = $this->getWikibaseRepoWithCustomRepositoryDefinitions(
array_merge(
+ $this->getRepositoryDefinition( '', [ 'entity-types' =>
[ 'item', 'property' ] ] ),
+ $this->getRepositoryDefinition( 'other', [
'entity-types' => [ 'kitten' ] ] )
+ ) );
$builders = $repo->newValidatorBuilders();
$this->assertInstanceOf( ValidatorBuilders::class, $builders );
@@ -349,18 +363,29 @@
}
/**
- * @param SettingsArray $clientSettings
+ * @param $repositoryName
+ * @param array $customSettings
+ *
+ * @return array
+ */
+ private function getRepositoryDefinition( $repositoryName, array
$customSettings = [] ) {
+ return [ $repositoryName => array_merge(
+ [ 'database' => '', 'entity-types' => [ 'item',
'property' ], 'prefix-mapping' => [] ],
+ $customSettings
+ ) ];
+ }
+
+ /**
+ * @param array $repoDefinitions
*
* @return WikibaseRepo
*/
- private function getWikibaseRepoWithClientSettings( SettingsArray
$clientSettings ) {
- $settings = new SettingsArray(
WikibaseRepo::getDefaultInstance()->getSettings()->getArrayCopy() );
+ private function getWikibaseRepoWithCustomRepositoryDefinitions( array
$repoDefinitions ) {
return new WikibaseRepo(
- $settings,
+ WikibaseRepo::getDefaultInstance()->getSettings(),
new DataTypeDefinitions( [] ),
new EntityTypeDefinitions( [] ),
- null, // FIXME: providing no
DataRetrievalServiceFactory but client settings does not make much sense
- $clientSettings
+ new RepositoryDefinitions( $repoDefinitions )
);
}
@@ -369,17 +394,11 @@
$this->markTestSkipped( 'WikibaseClient must be enabled
to run this test' );
}
- $clientSettings =
WikibaseClient::getDefaultInstance()->getSettings()->getArrayCopy();
- $clientSettings['foreignRepositories'] = [
- 'repo1' => [ 'supportedEntityTypes' => [ 'foo', 'baz' ]
],
- 'repo2' => [ 'supportedEntityTypes' => [ 'foobar' ] ],
- ];
-
- $wikibaseRepo = $this->getWikibaseRepoWithClientSettings( new
SettingsArray( $clientSettings ) );
- $wikibaseRepo->getSettings()->setSetting(
- 'entityNamespaces',
- [ 'foo' => 100, 'bar' => 102 ]
- );
+ $wikibaseRepo =
$this->getWikibaseRepoWithCustomRepositoryDefinitions( array_merge(
+ $this->getRepositoryDefinition( '', [ 'entity-types' =>
[ 'foo', 'bar' ] ] ),
+ $this->getRepositoryDefinition( 'repo1', [
'entity-types' => [ 'baz' ] ] ),
+ $this->getRepositoryDefinition( 'repo2', [
'entity-types' => [ 'foobar' ] ] )
+ ) );
$enabled = $wikibaseRepo->getEnabledEntityTypes();
$this->assertContains( 'foo', $enabled );
@@ -496,11 +515,17 @@
* @return WikibaseRepo
*/
private function getWikibaseRepo( $entityTypeDefinitions = array() ) {
+ /** @var RepositoryDefinitions $repositoryDefinitions */
+ $repositoryDefinitions = $this->getMockBuilder(
RepositoryDefinitions::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
$settings = new SettingsArray(
WikibaseRepo::getDefaultInstance()->getSettings()->getArrayCopy() );
return new WikibaseRepo(
$settings,
new DataTypeDefinitions( array() ),
- new EntityTypeDefinitions( $entityTypeDefinitions )
+ new EntityTypeDefinitions( $entityTypeDefinitions ),
+ $repositoryDefinitions
);
}
--
To view, visit https://gerrit.wikimedia.org/r/336815
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Icb0ead35bafb8d580de49c9ec662688791cbf16a
Gerrit-PatchSet: 12
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <[email protected]>
Gerrit-Reviewer: Aleksey Bekh-Ivanov (WMDE) <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <[email protected]>
Gerrit-Reviewer: WMDE-leszek <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits