Daniel Kinzler has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/303585

Change subject: Make EntitySavingHelper extend EntityLoadingHelper.
......................................................................

Make EntitySavingHelper extend EntityLoadingHelper.

Rationale: The idea is that the logic for on-the-fly auto-creation of entities 
should be
encapsulated in the EntitySavingHelper. However, with the current code 
structure,
this needs soem kind of intervention during loading as well as during saving.
To keep this knowledge local, loading and saving must be handled by the same 
class.
It may even become necessary to maintain state in the helper (e.g. the base 
revision
id to avoid conflicts).

Justification: Subclassing seems ok here, since saving makes no sense without 
loading.
Per the above argument, loading and saving should be done via the same object, 
so the
saving helper actually IS A loading helper.

Also, EntitySavingHelper and EntityLoadingHelper come from the same factory, 
which
knows all relevant services to be injected.

Bug: T140760
Change-Id: I3a019f558effd411bef165fbcbdc824aa958b447
---
M repo/includes/Api/ApiHelperFactory.php
M repo/includes/Api/CreateClaim.php
M repo/includes/Api/EntityLoadingHelper.php
M repo/includes/Api/EntitySavingHelper.php
M repo/includes/Api/ModifyEntity.php
M repo/includes/Api/RemoveClaims.php
M repo/includes/Api/RemoveQualifiers.php
M repo/includes/Api/RemoveReferences.php
M repo/includes/Api/SetClaim.php
M repo/includes/Api/SetClaimValue.php
M repo/includes/Api/SetQualifier.php
M repo/includes/Api/SetReference.php
M repo/tests/phpunit/includes/Api/EntityLoadingHelperTest.php
M repo/tests/phpunit/includes/Api/EntitySavingHelperTest.php
14 files changed, 102 insertions(+), 114 deletions(-)


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

diff --git a/repo/includes/Api/ApiHelperFactory.php 
b/repo/includes/Api/ApiHelperFactory.php
index 1c988a1..7e565eb 100644
--- a/repo/includes/Api/ApiHelperFactory.php
+++ b/repo/includes/Api/ApiHelperFactory.php
@@ -142,6 +142,7 @@
        public function getEntitySavingHelper( ApiBase $apiBase ) {
                return new EntitySavingHelper(
                        $apiBase,
+                       $this->entityRevisionLookup,
                        $this->getErrorReporter( $apiBase ),
                        $this->summaryFormatter,
                        $this->editEntityFactory
diff --git a/repo/includes/Api/CreateClaim.php 
b/repo/includes/Api/CreateClaim.php
index 6ddc532..4e27490 100644
--- a/repo/includes/Api/CreateClaim.php
+++ b/repo/includes/Api/CreateClaim.php
@@ -42,11 +42,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -74,7 +69,6 @@
                );
 
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -89,12 +83,12 @@
 
                $entityId = $this->modificationHelper->getEntityIdFromString( 
$params['entity'] );
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/includes/Api/EntityLoadingHelper.php 
b/repo/includes/Api/EntityLoadingHelper.php
index d86f8bd..bf239f1 100644
--- a/repo/includes/Api/EntityLoadingHelper.php
+++ b/repo/includes/Api/EntityLoadingHelper.php
@@ -24,12 +24,12 @@
        /**
         * @var EntityRevisionLookup
         */
-       private $entityRevisionLookup;
+       protected $entityRevisionLookup;
 
        /**
         * @var ApiErrorReporter
         */
-       private $errorReporter;
+       protected $errorReporter;
 
        public function __construct(
                EntityRevisionLookup $entityRevisionLookup,
diff --git a/repo/includes/Api/EntitySavingHelper.php 
b/repo/includes/Api/EntitySavingHelper.php
index 9a9fc0f..1d4eaea 100644
--- a/repo/includes/Api/EntitySavingHelper.php
+++ b/repo/includes/Api/EntitySavingHelper.php
@@ -9,6 +9,7 @@
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\EditEntity as EditEntityHandler;
 use Wikibase\EditEntityFactory;
+use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
 
@@ -20,17 +21,12 @@
  * @license GPL-2.0+
  * @author Addshore
  */
-class EntitySavingHelper {
+class EntitySavingHelper extends EntityLoadingHelper {
 
        /**
         * @var ApiBase
         */
        private $apiBase;
-
-       /**
-        * @var ApiErrorReporter
-        */
-       private $errorReporter;
 
        /**
         * @var SummaryFormatter
@@ -44,12 +40,13 @@
 
        public function __construct(
                ApiBase $apiBase,
+               EntityRevisionLookup $entityRevisionLookup,
                ApiErrorReporter $errorReporter,
                SummaryFormatter $summaryFormatter,
                EditEntityFactory $editEntityFactory
        ) {
+               parent::__construct( $entityRevisionLookup, $errorReporter );
                $this->apiBase = $apiBase;
-               $this->errorReporter = $errorReporter;
                $this->summaryFormatter = $summaryFormatter;
                $this->editEntityFactory = $editEntityFactory;
        }
diff --git a/repo/includes/Api/ModifyEntity.php 
b/repo/includes/Api/ModifyEntity.php
index d3f925f..b9b3759 100644
--- a/repo/includes/Api/ModifyEntity.php
+++ b/repo/includes/Api/ModifyEntity.php
@@ -158,6 +158,7 @@
                        $settings->getSetting( 'specialSiteLinkGroups' )
                ) );
 
+               // TODO: use the EntitySavingHelper to load the entity, instead 
of an EntityRevisionLookup.
                $this->revisionLookup = $wikibaseRepo->getEntityRevisionLookup( 
'uncached' );
                $this->permissionChecker = 
$wikibaseRepo->getEntityPermissionChecker();
                $this->entityStore = $wikibaseRepo->getEntityStore();
diff --git a/repo/includes/Api/RemoveClaims.php 
b/repo/includes/Api/RemoveClaims.php
index bc50e04..305f447 100644
--- a/repo/includes/Api/RemoveClaims.php
+++ b/repo/includes/Api/RemoveClaims.php
@@ -52,11 +52,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -85,7 +80,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -98,12 +92,12 @@
                $params = $this->extractRequestParams();
                $entityId = $this->getEntityId( $params );
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/includes/Api/RemoveQualifiers.php 
b/repo/includes/Api/RemoveQualifiers.php
index b93e0d4..9b89e1c 100644
--- a/repo/includes/Api/RemoveQualifiers.php
+++ b/repo/includes/Api/RemoveQualifiers.php
@@ -49,11 +49,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -82,7 +77,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -98,12 +92,12 @@
                $guid = $params['claim'];
                $entityId = $this->guidParser->parse( $guid )->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
                $summary = $this->modificationHelper->createSummary( $params, 
$this );
diff --git a/repo/includes/Api/RemoveReferences.php 
b/repo/includes/Api/RemoveReferences.php
index b1fa477..c3685b2 100644
--- a/repo/includes/Api/RemoveReferences.php
+++ b/repo/includes/Api/RemoveReferences.php
@@ -49,11 +49,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -82,7 +77,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -98,12 +92,12 @@
                $guid = $params['statement'];
                $entityId = $this->guidParser->parse( $guid )->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
                $summary = $this->modificationHelper->createSummary( $params, 
$this );
diff --git a/repo/includes/Api/SetClaim.php b/repo/includes/Api/SetClaim.php
index 66bdc49..85b38f8 100644
--- a/repo/includes/Api/SetClaim.php
+++ b/repo/includes/Api/SetClaim.php
@@ -67,11 +67,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -101,7 +96,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -128,12 +122,12 @@
 
                $entityId = $statementGuid->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/includes/Api/SetClaimValue.php 
b/repo/includes/Api/SetClaimValue.php
index bc72b79..73d9859 100644
--- a/repo/includes/Api/SetClaimValue.php
+++ b/repo/includes/Api/SetClaimValue.php
@@ -45,11 +45,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -78,7 +73,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -96,12 +90,12 @@
                $guid = $params['claim'];
                $entityId = $this->guidParser->parse( $guid )->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/includes/Api/SetQualifier.php 
b/repo/includes/Api/SetQualifier.php
index 6c6fec9..c786e0f 100644
--- a/repo/includes/Api/SetQualifier.php
+++ b/repo/includes/Api/SetQualifier.php
@@ -49,11 +49,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -82,7 +77,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -97,12 +91,12 @@
 
                $entityId = $this->guidParser->parse( $params['claim'] 
)->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/includes/Api/SetReference.php 
b/repo/includes/Api/SetReference.php
index f3239ef..bdb9657 100644
--- a/repo/includes/Api/SetReference.php
+++ b/repo/includes/Api/SetReference.php
@@ -56,11 +56,6 @@
        private $resultBuilder;
 
        /**
-        * @var EntityLoadingHelper
-        */
-       private $entityLoadingHelper;
-
-       /**
         * @var EntitySavingHelper
         */
        private $entitySavingHelper;
@@ -90,7 +85,6 @@
 
                $this->guidParser = $wikibaseRepo->getStatementGuidParser();
                $this->resultBuilder = $apiHelperFactory->getResultBuilder( 
$this );
-               $this->entityLoadingHelper = 
$apiHelperFactory->getEntityLoadingHelper( $this );
                $this->entitySavingHelper = 
$apiHelperFactory->getEntitySavingHelper( $this );
        }
 
@@ -105,12 +99,12 @@
 
                $entityId = $this->guidParser->parse( $params['statement'] 
)->getEntityId();
                if ( isset( $params['baserevid'] ) ) {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision(
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision(
                                $entityId,
                                (int)$params['baserevid']
                        );
                } else {
-                       $entityRevision = 
$this->entityLoadingHelper->loadEntityRevision( $entityId );
+                       $entityRevision = 
$this->entitySavingHelper->loadEntityRevision( $entityId );
                }
                $entity = $entityRevision->getEntity();
 
diff --git a/repo/tests/phpunit/includes/Api/EntityLoadingHelperTest.php 
b/repo/tests/phpunit/includes/Api/EntityLoadingHelperTest.php
index 8663060..aa19333 100644
--- a/repo/tests/phpunit/includes/Api/EntityLoadingHelperTest.php
+++ b/repo/tests/phpunit/includes/Api/EntityLoadingHelperTest.php
@@ -6,6 +6,7 @@
 use Revision;
 use UsageException;
 use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\EntityRevision;
 use Wikibase\Lib\Store\BadRevisionException;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\StorageException;
@@ -26,13 +27,19 @@
 class EntityLoadingHelperTest extends \MediaWikiTestCase {
 
        /**
-        * @param mixed $entityRevisionReturn if value is instance of Exception 
it will be thrown
+        * @param mixed $entityRevisionReturn if value is instance of Exception 
it will be thrown;
+        * If it is false, 0 calls will be expected. Instances of 
EntityRevision (and null) will be
+        * returned as is.
         *
         * @return EntityRevisionLookup
         */
-       public function getMockEntityRevisionLookup( $entityRevisionReturn ) {
+       protected function getMockEntityRevisionLookup( $entityRevisionReturn ) 
{
                $mock = $this->getMock( EntityRevisionLookup::class );
-               if ( $entityRevisionReturn instanceof Exception ) {
+
+               if ( $entityRevisionReturn === false ) {
+                       $mock->expects( $this->never() )
+                               ->method( 'getEntityRevision' );
+               } elseif ( $entityRevisionReturn instanceof Exception ) {
                        $mock->expects( $this->once() )
                                ->method( 'getEntityRevision' )
                                ->will( $this->throwException( 
$entityRevisionReturn ) );
@@ -49,7 +56,7 @@
         * @param string|null $expectedErrorCode
         * @return ApiErrorReporter
         */
-       private function getMockErrorReporter( $expectedExceptionCode = null, 
$expectedErrorCode = null ) {
+       protected function getMockErrorReporter( $expectedExceptionCode = null, 
$expectedErrorCode = null ) {
                $mock = $this->getMockBuilder( ApiErrorReporter::class )
                        ->disableOriginalConstructor()
                        ->getMock();
@@ -71,18 +78,31 @@
        /**
         * @return Revision
         */
-       public function getMockRevision() {
+       protected function getMockRevision() {
                return $this->getMockBuilder( Revision::class )
                        ->disableOriginalConstructor()
                        ->getMock();
        }
 
+       /**
+        * @param EntityRevision|Exception|null $lookupResult
+        * @param string|null $expectedError
+        * @return EntityLoadingHelper
+        */
+       protected function newEntityLoadingHelper(
+               $lookupResult = null,
+               $expectedExceptionCode = null,
+               $expectedErrorCode = null
+       ) {
+               return new EntityLoadingHelper(
+                       $this->getMockEntityRevisionLookup( $lookupResult ),
+                       $this->getMockErrorReporter( $expectedExceptionCode, 
$expectedErrorCode )
+               );
+       }
+
        public function testRevision_returnsRevision() {
                $revision = $this->getMockRevision();
-               $helper = new EntityLoadingHelper(
-                       $this->getMockEntityRevisionLookup( $revision ),
-                       $this->getMockErrorReporter()
-               );
+               $helper = $this->newEntityLoadingHelper( $revision );
 
                $return = $helper->loadEntityRevision( new ItemId( 'Q1' ) );
 
@@ -90,22 +110,19 @@
        }
 
        public function testNullRevision_callsErrorReporter() {
-               $helper = new EntityLoadingHelper(
-                       $this->getMockEntityRevisionLookup( null ),
-                       $this->getMockErrorReporter( null, 
'cant-load-entity-content' )
-               );
+               $helper = $this->newEntityLoadingHelper( null, null, 
'cant-load-entity-content' );
 
                $this->setExpectedException( UsageException::class );
                $helper->loadEntityRevision( new ItemId( 'Q1' ) );
        }
 
        public function testUnresolvedRedirectException_callsErrorReporter() {
-               $helper = new EntityLoadingHelper(
-                       $this->getMockEntityRevisionLookup( new 
RevisionedUnresolvedRedirectException(
+               $helper = $this->newEntityLoadingHelper(
+                       new RevisionedUnresolvedRedirectException(
                                new ItemId( 'Q1' ),
                                new ItemId( 'Q1' )
-                       ) ),
-                       $this->getMockErrorReporter( 'unresolved-redirect' )
+                       ),
+                       'unresolved-redirect'
                );
 
                $this->setExpectedException( UsageException::class );
@@ -113,20 +130,14 @@
        }
 
        public function testBadRevisionException_callsErrorReporter() {
-               $helper = new EntityLoadingHelper(
-                       $this->getMockEntityRevisionLookup( new 
BadRevisionException() ),
-                       $this->getMockErrorReporter( 'nosuchrevid' )
-               );
+               $helper = $this->newEntityLoadingHelper( new 
BadRevisionException(), 'nosuchrevid' );
 
                $this->setExpectedException( UsageException::class );
                $helper->loadEntityRevision( new ItemId( 'Q1' ) );
        }
 
        public function testStorageException_callsErrorReporter() {
-               $helper = new EntityLoadingHelper(
-                       $this->getMockEntityRevisionLookup( new 
StorageException() ),
-                       $this->getMockErrorReporter( 'cant-load-entity-content' 
)
-               );
+               $helper = $this->newEntityLoadingHelper( new 
StorageException(), 'cant-load-entity-content' );
 
                $this->setExpectedException( UsageException::class );
                $helper->loadEntityRevision( new ItemId( 'Q1' ) );
diff --git a/repo/tests/phpunit/includes/Api/EntitySavingHelperTest.php 
b/repo/tests/phpunit/includes/Api/EntitySavingHelperTest.php
index fe5b44c..7115a9a 100644
--- a/repo/tests/phpunit/includes/Api/EntitySavingHelperTest.php
+++ b/repo/tests/phpunit/includes/Api/EntitySavingHelperTest.php
@@ -3,6 +3,7 @@
 namespace Wikibase\Test\Repo\Api;
 
 use ApiBase;
+use Exception;
 use LogicException;
 use PHPUnit_Framework_MockObject_MockObject;
 use RequestContext;
@@ -14,7 +15,9 @@
 use Wikibase\DataModel\Snak\PropertyNoValueSnak;
 use Wikibase\EditEntity;
 use Wikibase\EditEntityFactory;
+use Wikibase\EntityRevision;
 use Wikibase\Repo\Api\ApiErrorReporter;
+use Wikibase\Repo\Api\EntityLoadingHelper;
 use Wikibase\Repo\Api\EntitySavingHelper;
 use Wikibase\SummaryFormatter;
 
@@ -29,22 +32,13 @@
  * @license GPL-2.0+
  * @author Addshore
  */
-class EntitySavingHelperTest extends \PHPUnit_Framework_TestCase {
+class EntitySavingHelperTest extends EntityLoadingHelperTest {
 
        /**
         * @return ApiBase|PHPUnit_Framework_MockObject_MockObject
         */
        private function getMockApiBase() {
                return $this->getMockBuilder( ApiBase::class )
-                       ->disableOriginalConstructor()
-                       ->getMock();
-       }
-
-       /**
-        * @return ApiErrorReporter
-        */
-       private function getMockErrorReporter() {
-               return $this->getMockBuilder( ApiErrorReporter::class )
                        ->disableOriginalConstructor()
                        ->getMock();
        }
@@ -59,30 +53,30 @@
        }
 
        /**
-        * @param int $calls
+        * @param int|null $calls
         *
         * @return EditEntity
         */
-       private function getMockEditEntity( $calls ) {
+       private function getMockEditEntity( $calls = null ) {
                $mock = $this->getMockBuilder( EditEntity::class )
                        ->disableOriginalConstructor()
                        ->getMock();
-               $mock->expects( $this->exactly( $calls ) )
+               $mock->expects( $calls === null ? $this->any() : 
$this->exactly( $calls ) )
                        ->method( 'attemptSave' )
                        ->will( $this->returnValue( Status::newGood() ) );
                return $mock;
        }
 
        /**
-        * @param int $calls
+        * @param int|null $calls
         *
         * @return EditEntityFactory
         */
-       private function getMockEditEntityFactory( $calls ) {
+       private function getMockEditEntityFactory( $calls = null ) {
                $mock = $this->getMockBuilder( EditEntityFactory::class )
                        ->disableOriginalConstructor()
                        ->getMock();
-               $mock->expects( $this->exactly( $calls ) )
+               $mock->expects( $calls === null ? $this->any() : 
$this->exactly( $calls ) )
                        ->method( 'newEditEntity' )
                        ->will( $this->returnValue( $this->getMockEditEntity( 
$calls ) ) );
                return $mock;
@@ -112,6 +106,7 @@
 
                $helper = new EntitySavingHelper(
                        $mockApiBase,
+                       $this->getMockEntityRevisionLookup( false ),
                        $this->getMockErrorReporter(),
                        $this->getMockSummaryFormatter(),
                        $this->getMockEditEntityFactory( 1 )
@@ -139,6 +134,7 @@
 
                $helper = new EntitySavingHelper(
                        $mockApiBase,
+                       $this->getMockEntityRevisionLookup( false ),
                        $this->getMockErrorReporter(),
                        $this->getMockSummaryFormatter(),
                        $this->getMockEditEntityFactory( 0 )
@@ -148,4 +144,34 @@
                $helper->attemptSaveEntity( new Item(), '' );
        }
 
+       /**
+        * @param EntityRevision|Exception|null $lookupResult
+        * @param string|null $expectedError
+        * @return EntityLoadingHelper
+        */
+       protected function newEntityLoadingHelper(
+               $lookupResult = null,
+               $expectedExceptionCode = null,
+               $expectedErrorCode = null
+       ) {
+               $mockApiBase = $this->getMockApiBase();
+               $mockApiBase->expects( $this->any() )
+                       ->method( 'isWriteMode' )
+                       ->will( $this->returnValue( true ) );
+               $mockApiBase->expects( $this->any() )
+                       ->method( 'getContext' )
+                       ->will( $this->returnValue( $this->newContext() ) );
+               $mockApiBase->expects( $this->any() )
+                       ->method( 'extractRequestParams' )
+                       ->will( $this->returnValue( array() ) );
+
+               return new EntitySavingHelper(
+                       $mockApiBase,
+                       $this->getMockEntityRevisionLookup( $lookupResult ),
+                       $this->getMockErrorReporter( $expectedExceptionCode, 
$expectedErrorCode ),
+                       $this->getMockSummaryFormatter(),
+                       $this->getMockEditEntityFactory()
+               );
+       }
+
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3a019f558effd411bef165fbcbdc824aa958b447
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <daniel.kinz...@wikimedia.de>

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

Reply via email to