WMDE-leszek has uploaded a new change for review. ( 
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 lib/includes/RepositoryDefinitions.php
M lib/tests/phpunit/RepositoryDefinitionsTest.php
M repo/includes/WikibaseRepo.php
M repo/tests/phpunit/includes/Content/EntityHandlerTest.php
M repo/tests/phpunit/includes/WikibaseRepoTest.php
8 files changed, 178 insertions(+), 157 deletions(-)


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

diff --git a/client/includes/WikibaseClient.php 
b/client/includes/WikibaseClient.php
index 2981d36..90af0ba 100644
--- a/client/includes/WikibaseClient.php
+++ b/client/includes/WikibaseClient.php
@@ -74,6 +74,7 @@
 use Wikibase\Lib\EntityIdComposer;
 use Wikibase\Lib\EntityTypeDefinitions;
 use Wikibase\Lib\FormatterLabelDescriptionLookupFactory;
+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;
@@ -311,17 +317,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;
        }
 
@@ -369,12 +378,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' ) );
 
@@ -387,75 +392,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;
        }
 
        /**
@@ -706,8 +652,38 @@
                                $settings->getSetting( 'disabledDataTypes' )
                        ),
                        new EntityTypeDefinitions( $entityTypeDefinitions ),
+                       self::getRepositoryDefinitionsFromSettings( $settings ),
                        MediaWikiServices::getInstance()->getSiteLookup()
                );
+       }
+
+       /**
+        * FIXME: This method would not be needed once repository definitions 
have been moved
+        * to a dedicated global variable (similar to $wgWBClientDataTypes, 
$wgWBClientEntityTypes).
+        *
+        * @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 );
        }
 
        /**
@@ -1340,4 +1316,11 @@
                return $setting;
        }
 
+       /**
+        * @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..7704aab 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,22 @@
         * @return WikibaseClient
         */
        private function getWikibaseClient() {
-               $settings = 
WikibaseClient::getDefaultInstance()->getSettings()->getArrayCopy();
-               $settings['foreignRepositories'] = [
-                       'foo' => [ 'repoDatabase' => 'foowiki', 'prefixMapping' 
=> [ 'bar' => 'xyz' ] ]
-               ];
-
                return new WikibaseClient(
-                       new SettingsArray( $settings ),
+                       WikibaseClient::getDefaultInstance()->getSettings(),
                        new DataTypeDefinitions( [] ),
                        new EntityTypeDefinitions( [] ),
+                       new RepositoryDefinitions( [
+                               '' => [
+                                       'database' => false,
+                                       'entity-types' => [],
+                                       'prefix-mapping' => [],
+                               ],
+                               'foo' => [
+                                       'database' => 'foowiki',
+                                       'entity-types' => [],
+                                       'prefix-mapping' => [ 'bar' => 'xyz' ],
+                               ],
+                       ] ),
                        new HashSiteStore()
                );
        }
diff --git a/client/tests/phpunit/includes/WikibaseClientTest.php 
b/client/tests/phpunit/includes/WikibaseClientTest.php
index 70252e6..c7c6fd1 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;
@@ -156,6 +157,7 @@
                        $settings,
                        new DataTypeDefinitions( array() ),
                        new EntityTypeDefinitions( array() ),
+                       $this->getRepositoryDefinitions(),
                        $this->getSiteLookup()
                );
 
@@ -176,6 +178,7 @@
                        $settings,
                        new DataTypeDefinitions( array() ),
                        new EntityTypeDefinitions( array() ),
+                       $this->getRepositoryDefinitions(),
                        $siteLookup
                );
 
@@ -210,6 +213,7 @@
                        $settings,
                        new DataTypeDefinitions( array() ),
                        new EntityTypeDefinitions( array() ),
+                       $this->getRepositoryDefinitions(),
                        $siteLookup
                );
 
@@ -369,6 +373,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
         */
@@ -377,8 +387,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/lib/includes/RepositoryDefinitions.php 
b/lib/includes/RepositoryDefinitions.php
index e7e83a3..cc54ab8 100644
--- a/lib/includes/RepositoryDefinitions.php
+++ b/lib/includes/RepositoryDefinitions.php
@@ -89,6 +89,14 @@
        }
 
        /**
+        * @return array[] Associative array (string => string[]) mapping 
repository names to lists of entity types
+        * provided by each repository.
+        */
+       public function getEntityTypesPerRepository() {
+               return $this->getMapForDefinitionField( 'entity-types' );
+       }
+
+       /**
         * @return string[] Associative array (string => string) mapping entity 
types to repository names which provide
         * entities of the given type.
         */
diff --git a/lib/tests/phpunit/RepositoryDefinitionsTest.php 
b/lib/tests/phpunit/RepositoryDefinitionsTest.php
index 4bb4e14..6a36d19 100644
--- a/lib/tests/phpunit/RepositoryDefinitionsTest.php
+++ b/lib/tests/phpunit/RepositoryDefinitionsTest.php
@@ -81,6 +81,19 @@
                );
        }
 
+       public function testGetEntityTypesPerRepository() {
+               $definitions = new RepositoryDefinitions( 
$this->getCompleteRepositoryDefinitionArray() );
+
+               $this->assertEquals(
+                       [
+                               '' => [ 'item', 'property' ],
+                               'media' => [ 'mediainfo' ],
+                               'lexeme' => [ 'lexeme' ],
+                       ],
+                       $definitions->getEntityTypesPerRepository()
+               );
+       }
+
        public function testGetEntityTypeToRepositoryMapping() {
                $definitions = new RepositoryDefinitions( 
$this->getCompleteRepositoryDefinitionArray() );
 
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index aea5f66..18fac8b 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -77,6 +77,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;
@@ -261,6 +262,11 @@
        private $entityTypeDefinitions;
 
        /**
+        * @var RepositoryDefinitions
+        */
+       private $repositoryDefinitons;
+
+       /**
         * @var ValueSnakRdfBuilderFactory
         */
        private $valueSnakRdfBuilderFactory;
@@ -279,11 +285,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 );
 
+               $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,30 @@
                                $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' => [ '' => '' ],
+                       // FIXME: this does not include custom entity types 
registered by extensions using
+                       // 'WikibaseEntityNamespaces' hook. Ideally 
getLocalEntityTypes or getEntityNamespaceSetting
+                       // would be called here.
+                       'entity-types' => array_keys(
+                               self::fixLegacyContentModelSetting(
+                                       $settings->getSetting( 
'entityNamespaces' ),
+                                       'entityNamespaces'
+                               )
+                       ),
+               ] ] );
        }
 
        /**
@@ -370,22 +393,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 +401,7 @@
                        $this->getVocabularyBaseUri(),
                        $this->getMonolingualTextLanguages(),
                        $this->getCachingCommonsMediaFileNameLookup(),
-                       $entityTypesPerRepo
+                       
$this->repositoryDefinitons->getEntityTypesPerRepository()
                );
        }
 
@@ -478,39 +485,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;
        }
 
        /**
@@ -1255,25 +1257,9 @@
         *  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;
+               // TODO: RepositoryDefinitions should get a public method 
returning full list
+               // of enabled entity types.
+               return array_keys( 
$this->repositoryDefinitons->getEntityTypeToRepositoryMapping() );
        }
 
        /**
diff --git a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php 
b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
index 8c7fe87..dde11df 100644
--- a/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
+++ b/repo/tests/phpunit/includes/Content/EntityHandlerTest.php
@@ -21,6 +21,7 @@
 use Wikibase\InternalSerialization\SerializerFactory;
 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;
@@ -58,7 +59,8 @@
                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' ),
+                       new RepositoryDefinitions( [ '' => [ 'database' => 
false, 'entity-types' => [], 'prefix-mapping' => [] ] ] )
                );
        }
 
diff --git a/repo/tests/phpunit/includes/WikibaseRepoTest.php 
b/repo/tests/phpunit/includes/WikibaseRepoTest.php
index 7bedb67..c164a4d 100644
--- a/repo/tests/phpunit/includes/WikibaseRepoTest.php
+++ b/repo/tests/phpunit/includes/WikibaseRepoTest.php
@@ -14,13 +14,11 @@
 use DataValues\UnboundedQuantityValue;
 use DataValues\UnknownValue;
 use Deserializers\Deserializer;
-use Language;
 use MediaWikiTestCase;
 use RequestContext;
 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;
@@ -44,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;
@@ -100,13 +99,13 @@
        }
 
        public function testNewValidatorBuilders() {
-               $repo = $this->getWikibaseRepoWithClientSettings( new 
SettingsArray( [
-                       'foreignRepositories' => [
-                               'other' => [
-                                       'supportedEntityTypes' => [ 'kitten' ],
-                               ]
+               $repo = $this->getWikibaseRepoWithCustomRepositoryDefinitions( [
+                       'other' => [
+                               'entity-types' => [ 'kitten' ],
+                               'database' => 'irrelevant',
+                               'prefix-mapping' => [],
                        ]
-               ] ) );
+               ] );
 
                $kittenId = $this->getMockBuilder( EntityId::class )
                        ->disableOriginalConstructor()
@@ -361,18 +360,19 @@
        }
 
        /**
-        * @param SettingsArray $clientSettings
+        * @param array $customDefinitions
         *
         * @return WikibaseRepo
         */
-       private function getWikibaseRepoWithClientSettings( SettingsArray 
$clientSettings ) {
-               $settings = new SettingsArray( 
WikibaseRepo::getDefaultInstance()->getSettings()->getArrayCopy() );
+       private function getWikibaseRepoWithCustomRepositoryDefinitions( array 
$customDefinitions ) {
                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( array_merge(
+                               $this->getLocalRepositoryDefinition(),
+                               $customDefinitions
+                       ) )
                );
        }
 
@@ -381,17 +381,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( [
+                       '' => [ 'entity-types' => [ 'foo', 'bar' ], 'database' 
=> 'irrelevant', 'prefix-mapping' => [] ],
+                       'repo1' => [ 'entity-types' => [ 'baz' ], 'database' => 
'irrelevant', 'prefix-mapping' => [] ],
+                       'repo2' => [ 'entity-types' => [ 'foobar' ], 'database' 
=> 'irrelevant', 'prefix-mapping' => [] ],
+               ] );
 
                $enabled = $wikibaseRepo->getEnabledEntityTypes();
                $this->assertContains( 'foo', $enabled );
@@ -512,10 +506,18 @@
                return new WikibaseRepo(
                        $settings,
                        new DataTypeDefinitions( array() ),
-                       new EntityTypeDefinitions( $entityTypeDefinitions )
+                       new EntityTypeDefinitions( $entityTypeDefinitions ),
+                       new RepositoryDefinitions( 
$this->getLocalRepositoryDefinition() )
                );
        }
 
+       /**
+        * @return array
+        */
+       private function getLocalRepositoryDefinition() {
+               return [ '' => [ 'database' => '', 'entity-types' => [], 
'prefix-mapping' => [] ] ];
+       }
+
        public function testGetApiHelperFactory() {
                $factory = $this->getWikibaseRepo()->getApiHelperFactory( new 
RequestContext() );
                $this->assertInstanceOf( ApiHelperFactory::class, $factory );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb0ead35bafb8d580de49c9ec662688791cbf16a
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