jenkins-bot has submitted this change and it was merged.

Change subject: Improvements to EntityContentFactory and its tests
......................................................................


Improvements to EntityContentFactory and its tests

Change-Id: I563d902b3d6a5c9b84b4a43652dc8d0f90c7d57b
---
M DataModel/DataModel/Snak/PropertyValueSnak.php
M lib/tests/phpunit/store/WikiPageEntityLookupTest.php
M repo/includes/WikibaseRepo.php
M repo/includes/content/EntityContentFactory.php
M repo/tests/phpunit/includes/content/EntityContentFactoryTest.php
5 files changed, 106 insertions(+), 18 deletions(-)

Approvals:
  Daniel Kinzler: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/DataModel/DataModel/Snak/PropertyValueSnak.php 
b/DataModel/DataModel/Snak/PropertyValueSnak.php
index 2a9e3db..fcc4d7b 100644
--- a/DataModel/DataModel/Snak/PropertyValueSnak.php
+++ b/DataModel/DataModel/Snak/PropertyValueSnak.php
@@ -124,6 +124,7 @@
         * The DataValue
         *
         * @since 0.3
+        * @deprecated since 0.4
         *
         * @param EntityId $propertyId
         * @param mixed $rawDataValue
diff --git a/lib/tests/phpunit/store/WikiPageEntityLookupTest.php 
b/lib/tests/phpunit/store/WikiPageEntityLookupTest.php
index cacbe41..1b9636e 100644
--- a/lib/tests/phpunit/store/WikiPageEntityLookupTest.php
+++ b/lib/tests/phpunit/store/WikiPageEntityLookupTest.php
@@ -111,6 +111,7 @@
                        throw new \MWException( "Can't generate test entities 
in a client database." );
                }
 
+               // FIXME: this is using repo functionality
                $content = 
\Wikibase\EntityContentFactory::singleton()->newFromEntity( $entity );
                $status = $content->save( "storeTestEntity" );
 
diff --git a/repo/includes/WikibaseRepo.php b/repo/includes/WikibaseRepo.php
index d63ec1b..62e40f2 100644
--- a/repo/includes/WikibaseRepo.php
+++ b/repo/includes/WikibaseRepo.php
@@ -5,6 +5,7 @@
 use DataTypes\DataTypeFactory;
 use ValueFormatters\FormatterOptions;
 use ValueParsers\ParserOptions;
+use Wikibase\EntityContentFactory;
 use Wikibase\Lib\EntityIdFormatter;
 use Wikibase\Lib\EntityIdLabelFormatter;
 use Wikibase\Lib\EntityIdParser;
@@ -84,6 +85,20 @@
        /**
         * @since 0.4
         *
+        * @return EntityContentFactory
+        */
+       public function getEntityContentFactory() {
+               $entityNamespaces = $this->settings->getSetting( 
'entityNamespaces' );
+
+               return new EntityContentFactory(
+                       $this->getIdFormatter(),
+                       is_array( $entityNamespaces ) ? array_keys( 
$entityNamespaces ) : array()
+               );
+       }
+
+       /**
+        * @since 0.4
+        *
         * @return EntityIdFormatter
         */
        public function getIdFormatter() {
diff --git a/repo/includes/content/EntityContentFactory.php 
b/repo/includes/content/EntityContentFactory.php
index 6e47e9b..10f71c5 100644
--- a/repo/includes/content/EntityContentFactory.php
+++ b/repo/includes/content/EntityContentFactory.php
@@ -1,7 +1,13 @@
 <?php
 
 namespace Wikibase;
-use MWException, Title, WikiPage, Revision;
+
+use MWException;
+use Title;
+use WikiPage;
+use Revision;
+use Wikibase\Lib\EntityIdFormatter;
+use Wikibase\Repo\WikibaseRepo;
 
 /**
  * Factory for EntityContent objects.
@@ -33,6 +39,7 @@
 
        /**
         * @since 0.2
+        * @deprecated since 0.4
         *
         * @return EntityContentFactory
         */
@@ -40,10 +47,24 @@
                static $instance = false;
 
                if ( $instance === false ) {
-                       $instance = new static();
+                       $instance = 
WikibaseRepo::newInstance()->getEntityContentFactory();
                }
 
                return $instance;
+       }
+
+       // TODO: inject this map and allow extensions to somehow extend it
+       protected static $typeMap = array(
+               Item::ENTITY_TYPE => CONTENT_MODEL_WIKIBASE_ITEM,
+               Property::ENTITY_TYPE => CONTENT_MODEL_WIKIBASE_PROPERTY,
+       );
+
+       protected $idFormatter;
+       protected $contentModelIds;
+
+       public function __construct( EntityIdFormatter $idFormatter, array 
$contentModelIds ) {
+               $this->idFormatter = $idFormatter;
+               $this->contentModelIds = $contentModelIds;
        }
 
        /**
@@ -62,15 +83,13 @@
 
        /**
         * Returns a list of content model IDs that are used to represent 
Wikibase entities.
-        * Configured via $wgWBRepoSettings['entityNamespaces'].
         *
         * @since 0.2
         *
         * @return array An array of string content model IDs.
         */
        public function getEntityContentModels() {
-               $namespaces = Settings::get( 'entityNamespaces' );
-               return is_array( $namespaces ) ? array_keys( $namespaces ) : 
array();
+               return $this->contentModelIds;
        }
 
        /**
@@ -139,7 +158,7 @@
         */
        public function getTitleForId( EntityId $id ) {
                return Title::newFromText(
-                       $id->getPrefixedId(),
+                       $this->idFormatter->format( $id ),
                        NamespaceUtils::getEntityNamespace( 
self::$typeMap[$id->getEntityType()] )
                );
        }
@@ -177,12 +196,6 @@
 
                return $revision->getContent();
        }
-
-       // TODO: move to sane place
-       protected static $typeMap = array(
-               Item::ENTITY_TYPE => CONTENT_MODEL_WIKIBASE_ITEM,
-               Property::ENTITY_TYPE => CONTENT_MODEL_WIKIBASE_PROPERTY,
-       );
 
        /**
         * Constructs a new EntityContent from an Entity.
diff --git a/repo/tests/phpunit/includes/content/EntityContentFactoryTest.php 
b/repo/tests/phpunit/includes/content/EntityContentFactoryTest.php
index 14f0787..7935334 100644
--- a/repo/tests/phpunit/includes/content/EntityContentFactoryTest.php
+++ b/repo/tests/phpunit/includes/content/EntityContentFactoryTest.php
@@ -1,10 +1,12 @@
 <?php
 
 namespace Wikibase\Test;
+
 use Wikibase\EntityContentFactory;
+use Wikibase\EntityId;
 
 /**
- * Tests for the Wikibase\EntityContentFactory class.
+ * @covers Wikibase\EntityContentFactory
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,19 +32,48 @@
  * @group Wikibase
  * @group WikibaseEntity
  * @group WikibaseContent
- * @group Database
  *
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroended...@gmail.com >
  */
-class EntityContentFactoryTest extends \MediaWikiTestCase {
+class EntityContentFactoryTest extends \PHPUnit_Framework_TestCase {
 
-       public function testGetEntityContentModels() {
-               $this->assertInternalType( 'array', 
EntityContentFactory::singleton()->getEntityContentModels() );
+       /**
+        * @dataProvider contentModelsProvider
+        */
+       public function testGetEntityContentModels( array $contentModelIds ) {
+               $factory = new EntityContentFactory(
+                       $this->newMockIdFormatter(),
+                       $contentModelIds
+               );
+
+               $this->assertEquals( $contentModelIds, 
$factory->getEntityContentModels() );
+       }
+
+       protected function newMockIdFormatter() {
+               $idFormatter = $this->getMockBuilder( 
'Wikibase\Lib\EntityIdFormatter' )
+                       ->disableOriginalConstructor()->getMock();
+
+               $idFormatter->expects( $this->any() )
+                       ->method( 'format' )
+                       ->will( $this->returnValue( 'Nyan' ) );
+
+               return $idFormatter;
+       }
+
+       public function contentModelsProvider() {
+               $argLists = array();
+
+               $argLists[] = array( array() );
+               $argLists[] = array( array( 0 ) );
+               $argLists[] = array( array( 42, 1337, 9001 ) );
+               $argLists[] = array( array( 0, 1, 2, 3, 4, 5, 6, 7 ) );
+
+               return $argLists;
        }
 
        public function testIsEntityContentModel() {
-               $factory = EntityContentFactory::singleton();
+               $factory = $this->newFactory();
 
                foreach ( $factory->getEntityContentModels() as $type ) {
                        $this->assertTrue( $factory->isEntityContentModel( 
$type ) );
@@ -51,4 +82,31 @@
                $this->assertFalse( $factory->isEntityContentModel( 
'this-does-not-exist' ) );
        }
 
+       protected function newFactory() {
+               return $factory = new EntityContentFactory(
+                       $this->newMockIdFormatter(),
+                       array( 42, 1337, 9001 )
+               );
+       }
+
+       public function testGetTitleForId() {
+               $factory = $this->newFactory();
+
+               $title = $factory->getTitleForId( new EntityId( 'item', 42 ) );
+
+               $this->assertEquals( 'Nyan', $title->getText() );
+       }
+
+       public function testGetWikiPageForId() {
+               $entityId = new EntityId( 'item', 42 );
+
+               $factory = $this->newFactory();
+
+               $expectedTitle = $factory->getTitleForId( $entityId );
+
+               $wikiPage = $factory->getWikiPageForId( $entityId );
+
+               $this->assertEquals( $expectedTitle, $wikiPage->getTitle() );
+       }
+
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I563d902b3d6a5c9b84b4a43652dc8d0f90c7d57b
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: Anja Jentzsch <a...@anjeve.de>
Gerrit-Reviewer: Ataherivand <abraham.taheriv...@wikimedia.de>
Gerrit-Reviewer: Aude <aude.w...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Daniel Werner <daniel.wer...@wikimedia.de>
Gerrit-Reviewer: Denny Vrandecic <denny.vrande...@wikimedia.de>
Gerrit-Reviewer: Henning Snater <henning.sna...@wikimedia.de>
Gerrit-Reviewer: Jens Ohlig <jens.oh...@wikimedia.de>
Gerrit-Reviewer: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: John Erling Blad <jeb...@gmail.com>
Gerrit-Reviewer: Lydia Pintscher <lydia.pintsc...@wikimedia.de>
Gerrit-Reviewer: Markus Kroetzsch <mar...@semantic-mediawiki.org>
Gerrit-Reviewer: Nikola Smolenski <smole...@eunet.rs>
Gerrit-Reviewer: Silke Meyer <silke.me...@wikimedia.de>
Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to