WMDE-leszek has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/363303 )
Change subject: Remove user permission logic from RedirectCreationInteractor ...................................................................... Remove user permission logic from RedirectCreationInteractor Just ask for redirect permission and let EntityPermissionChecker figure out what MW permissions are actually required. Bug: T166586 Change-Id: Id75ea5934edc94aa5e371c824319b0cf5cb26369 --- M repo/includes/Interactors/RedirectCreationInteractor.php M repo/tests/phpunit/includes/Api/CreateRedirectTest.php M repo/tests/phpunit/includes/Interactors/RedirectCreationInteractorTest.php M repo/tests/phpunit/includes/Specials/SpecialRedirectEntityTest.php 4 files changed, 19 insertions(+), 58 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase refs/changes/03/363303/1 diff --git a/repo/includes/Interactors/RedirectCreationInteractor.php b/repo/includes/Interactors/RedirectCreationInteractor.php index 3fe8528..cde809f 100644 --- a/repo/includes/Interactors/RedirectCreationInteractor.php +++ b/repo/includes/Interactors/RedirectCreationInteractor.php @@ -117,33 +117,18 @@ } /** - * Check all applicable permissions for redirecting the given $entityId. + * Check user's permissions for the given entity ID. * * @param EntityId $entityId - * - * @throws RedirectCreationException if a permission check fails - */ - private function checkPermissions( EntityId $entityId ) { - $permissions = [ - 'edit', - $entityId->getEntityType() . '-redirect' - ]; - - foreach ( $permissions as $permission ) { - $this->checkPermission( $entityId, $permission ); - } - } - - /** - * Check the given permissions for the given $entityId. - * - * @param EntityId $entityId - * @param string $permission * * @throws RedirectCreationException if the permission check fails */ - private function checkPermission( EntityId $entityId, $permission ) { - $status = $this->permissionChecker->getPermissionStatusForEntityId( $this->user, $permission, $entityId ); + private function checkPermissions( EntityId $entityId ) { + $status = $this->permissionChecker->getPermissionStatusForEntityId( + $this->user, + EntityPermissionChecker::PERMISSION_REDIRECT, + $entityId + ); if ( !$status->isOK() ) { // XXX: This is silly, we really want to pass the Status object to the API error handler. diff --git a/repo/tests/phpunit/includes/Api/CreateRedirectTest.php b/repo/tests/phpunit/includes/Api/CreateRedirectTest.php index 688e532..2430ada 100644 --- a/repo/tests/phpunit/includes/Api/CreateRedirectTest.php +++ b/repo/tests/phpunit/includes/Api/CreateRedirectTest.php @@ -80,8 +80,8 @@ $permissionChecker->expects( $this->any() ) ->method( 'getPermissionStatusForEntityId' ) - ->will( $this->returnCallback( function( User $user, $permission ) { - if ( $user->getName() === 'UserWithoutPermission' && $permission === 'edit' ) { + ->will( $this->returnCallback( function( User $user ) { + if ( $user->getName() === 'UserWithoutPermission' ) { return Status::newFatal( 'permissiondenied' ); } else { return Status::newGood(); diff --git a/repo/tests/phpunit/includes/Interactors/RedirectCreationInteractorTest.php b/repo/tests/phpunit/includes/Interactors/RedirectCreationInteractorTest.php index 5bc21e6..0b9edc3 100644 --- a/repo/tests/phpunit/includes/Interactors/RedirectCreationInteractorTest.php +++ b/repo/tests/phpunit/includes/Interactors/RedirectCreationInteractorTest.php @@ -69,13 +69,13 @@ /** * @return EntityPermissionChecker */ - private function getPermissionCheckers() { + private function getPermissionChecker() { $permissionChecker = $this->getMock( EntityPermissionChecker::class ); $permissionChecker->expects( $this->any() ) ->method( 'getPermissionStatusForEntityId' ) - ->will( $this->returnCallback( function( User $user, $permission, EntityId $id ) { - $userWithoutPermissionName = 'UserWithoutPermission-' . $permission; + ->will( $this->returnCallback( function( User $user ) { + $userWithoutPermissionName = 'UserWithoutPermission'; if ( $user->getName() === $userWithoutPermissionName ) { return Status::newFatal( 'permissiondenied' ); @@ -137,7 +137,7 @@ $interactor = new RedirectCreationInteractor( $this->mockRepository, $this->mockRepository, - $this->getPermissionCheckers(), + $this->getPermissionChecker(), $summaryFormatter, $user, $this->getMockEditFilterHookRunner( $efHookCalls, $efHookStatus ), @@ -218,20 +218,10 @@ } } - public function permissionProvider() { - return [ - 'edit' => [ 'edit' ], - 'item-redirect' => [ 'item-redirect' ], - ]; - } - - /** - * @dataProvider permissionProvider - */ - public function testSetRedirect_noPermission( $permission ) { + public function testSetRedirect_noPermission() { $this->setExpectedException( RedirectCreationException::class ); - $user = User::newFromName( 'UserWithoutPermission-' . $permission ); + $user = User::newFromName( 'UserWithoutPermission' ); $interactor = $this->newInteractor( null, null, $user ); $interactor->createRedirect( new ItemId( 'Q11' ), new ItemId( 'Q12' ), false ); diff --git a/repo/tests/phpunit/includes/Specials/SpecialRedirectEntityTest.php b/repo/tests/phpunit/includes/Specials/SpecialRedirectEntityTest.php index e8e5328..aa6a167 100644 --- a/repo/tests/phpunit/includes/Specials/SpecialRedirectEntityTest.php +++ b/repo/tests/phpunit/includes/Specials/SpecialRedirectEntityTest.php @@ -189,8 +189,8 @@ $permissionChecker->expects( $this->any() ) ->method( 'getPermissionStatusForEntityId' ) - ->will( $this->returnCallback( function( User $user, $permission, EntityId $id ) { - $name = 'UserWithoutPermission-' . $permission; + ->will( $this->returnCallback( function( User $user ) { + $name = 'UserWithoutPermission'; if ( $user->getName() === $name ) { return Status::newFatal( 'permissiondenied' ); } else { @@ -283,27 +283,13 @@ $this->assertError( 'Wikibase\Repo\Interactors\RedirectCreationException:no-such-entity', $html ); } - public function permissionProvider() { - return [ - 'edit' => [ 'edit' ], - 'item-redirect' => [ 'item-redirect' ], - ]; - } - - /** - * @dataProvider permissionProvider - */ - public function testNoPermission( $permission ) { + public function testNoPermission() { $params = [ 'fromid' => 'Q1', 'toid' => 'Q2' ]; - $this->setMwGlobals( 'wgGroupPermissions', [ '*' => [ - 'item-redirect' => $permission !== 'item-redirect', - 'edit' => $permission !== 'edit' - ] ] ); - $user = User::newFromName( 'UserWithoutPermission-' . $permission ); + $user = User::newFromName( 'UserWithoutPermission' ); $html = $this->executeSpecialEntityRedirect( $params, $user ); $this->assertError( 'Wikibase\Repo\Interactors\RedirectCreationException:permissiondenied', $html ); -- To view, visit https://gerrit.wikimedia.org/r/363303 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id75ea5934edc94aa5e371c824319b0cf5cb26369 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Wikibase Gerrit-Branch: master Gerrit-Owner: WMDE-leszek <leszek.mani...@wikimedia.de> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits