Daniel Kinzler has uploaded a new change for review. https://gerrit.wikimedia.org/r/219152
Change subject: Avoid database access in MergeItemsTest by mocking ChangeOpFactoryProvider ...................................................................... Avoid database access in MergeItemsTest by mocking ChangeOpFactoryProvider Change-Id: Ie7e132283a89d70101511e19197ebc9c0bd739db --- M repo/tests/phpunit/includes/api/MergeItemsTest.php 1 file changed, 72 insertions(+), 20 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/52/219152/1 diff --git a/repo/tests/phpunit/includes/api/MergeItemsTest.php b/repo/tests/phpunit/includes/api/MergeItemsTest.php index 2cc9841..31d1996 100644 --- a/repo/tests/phpunit/includes/api/MergeItemsTest.php +++ b/repo/tests/phpunit/includes/api/MergeItemsTest.php @@ -8,14 +8,20 @@ use User; use Wikibase\Api\ApiErrorReporter; use Wikibase\Api\MergeItems; +use Wikibase\ChangeOp\ChangeOpFactoryProvider; use Wikibase\DataModel\Entity\BasicEntityIdParser; -use Wikibase\DataModel\Entity\EntityId; +use Wikibase\Lib\ClaimGuidGenerator; use Wikibase\Repo\Interactors\ItemMergeInteractor; use Wikibase\Repo\Interactors\RedirectCreationInteractor; use Wikibase\Repo\Hooks\EditFilterHookRunner; +use Wikibase\Repo\Store\EntityPermissionChecker; use Wikibase\Repo\WikibaseRepo; use Wikibase\Test\EntityModificationTestHelper; use Wikibase\Test\MockRepository; +use Wikibase\Test\MockSiteStore; +use Wikibase\Validators\EntityConstraintProvider; +use Wikibase\Validators\SnakValidator; +use Wikibase\Validators\TermValidatorFactory; /** * @covers Wikibase\Api\MergeItems @@ -51,8 +57,6 @@ protected function setUp() { parent::setUp(); - $this->setUpSites(); - $this->entityModificationTestHelper = new EntityModificationTestHelper(); $this->apiModuleTestHelper = new ApiModuleTestHelper(); @@ -71,18 +75,9 @@ ) ); } - private function setUpSites() { - static $isSetup = false; - - if ( !$isSetup ) { - $sitesTable = WikibaseRepo::getDefaultInstance()->getSiteStore(); - $sitesTable->clear(); - $sitesTable->saveSites( TestSites::getSites() ); - - $isSetup = true; - } - } - + /** + * @return EntityPermissionChecker + */ private function getPermissionCheckers() { $permissionChecker = $this->getMock( 'Wikibase\Repo\Store\EntityPermissionChecker' ); @@ -129,25 +124,32 @@ $resultBuilder = WikibaseRepo::getDefaultInstance()->getApiHelperFactory()->getResultBuilder( $module ); $summaryFormatter = WikibaseRepo::getDefaultInstance()->getSummaryFormatter(); - $changeOpsFactory = WikibaseRepo::getDefaultInstance()->getChangeOpFactoryProvider()->getMergeChangeOpFactory(); - $wikibaseRepo = WikibaseRepo::getDefaultInstance(); + $changeOpsFactoryProvider = new ChangeOpFactoryProvider( + $this->getConstraintProvider(), + new ClaimGuidGenerator(), + WikibaseRepo::getDefaultInstance()->getClaimGuidValidator(), + WikibaseRepo::getDefaultInstance()->getClaimGuidParser(), + $this->getSnakValidator(), + $this->getTermValidatorFactory(), + new MockSiteStore( TestSites::getSites() ) + ); $module->setServices( $idParser, $errorReporter, $resultBuilder, new ItemMergeInteractor( - $changeOpsFactory, + $changeOpsFactoryProvider->getMergeChangeOpFactory(), $this->mockRepository, $this->mockRepository, $this->getPermissionCheckers(), - $wikibaseRepo->getSummaryFormatter(), + $summaryFormatter, $module->getUser(), new RedirectCreationInteractor( $this->mockRepository, $this->mockRepository, $this->getPermissionCheckers(), - $wikibaseRepo->getSummaryFormatter(), + $summaryFormatter, $module->getUser(), $this->getMockEditFilterHookRunner(), $this->mockRepository @@ -156,6 +158,56 @@ ); } + /** + * @return EntityConstraintProvider + */ + private function getConstraintProvider() { + $constraintProvider = $this->getMockBuilder( 'Wikibase\Validators\EntityConstraintProvider' ) + ->disableOriginalConstructor() + ->getMock(); + + $constraintProvider->expects( $this->any() ) + ->method( 'getUpdateValidators' ) + ->will( $this->returnValue( array() ) ); + + return $constraintProvider; + } + + /** + * @return SnakValidator + */ + private function getSnakValidator() { + $snakValidator = $this->getMockBuilder( 'Wikibase\Validators\SnakValidator' ) + ->disableOriginalConstructor() + ->getMock(); + + $snakValidator->expects( $this->any() ) + ->method( 'validate' ) + ->will( $this->returnValue( Status::newGood() ) ); + + return $snakValidator; + } + + /** + * @return TermValidatorFactory + */ + private function getTermValidatorFactory() { + $dupeDetector = $this->getMockBuilder( 'Wikibase\LabelDescriptionDuplicateDetector' ) + ->disableOriginalConstructor() + ->getMock(); + + $dupeDetector->expects( $this->any() ) + ->method( 'detectTermConflicts' ) + ->will( $this->returnValue( Status::newGood() ) ); + + return new TermValidatorFactory( + 100, + array( 'en', 'de', 'fr' ), + new BasicEntityIdParser(), + $dupeDetector + ); + } + private function callApiModule( $params, User $user = null ) { $module = $this->apiModuleTestHelper->newApiModule( 'Wikibase\Api\MergeItems', 'wbmergeitems', $params, $user ); $this->overrideServices( $module ); -- To view, visit https://gerrit.wikimedia.org/r/219152 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie7e132283a89d70101511e19197ebc9c0bd739db 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