1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- /**
- * Try to make sure that extensions register all rights in $wgAvailableRights
- * or via the 'UserGetAllRights' hook.
- *
- * @author Marius Hoch < hoo@online.de >
- */
- class AvailableRightsTest extends PHPUnit\Framework\TestCase {
- use MediaWikiCoversValidator;
- /**
- * Returns all rights that should be in $wgAvailableRights + all rights
- * registered via the 'UserGetAllRights' hook + all "core" rights.
- *
- * @return string[]
- */
- private function getAllVisibleRights() {
- global $wgGroupPermissions, $wgRevokePermissions;
- $rights = User::getAllRights();
- foreach ( $wgGroupPermissions as $permissions ) {
- $rights = array_merge( $rights, array_keys( $permissions ) );
- }
- foreach ( $wgRevokePermissions as $permissions ) {
- $rights = array_merge( $rights, array_keys( $permissions ) );
- }
- $rights = array_unique( $rights );
- sort( $rights );
- return $rights;
- }
- /**
- * @coversNothing
- */
- public function testAvailableRights() {
- $missingRights = array_diff(
- $this->getAllVisibleRights(),
- User::getAllRights()
- );
- $this->assertEquals(
- [],
- // Re-index to produce nicer output, keys are meaningless.
- array_values( $missingRights ),
- 'Additional user rights need to be added to $wgAvailableRights or ' .
- 'via the "UserGetAllRights" hook. See the instructions at: ' .
- 'https://www.mediawiki.org/wiki/Manual:User_rights#Adding_new_rights'
- );
- }
- /**
- * Test, if for all rights a right- message exist,
- * which is used on Special:ListGroupRights as help text
- * Extensions and core
- *
- * @coversNothing
- */
- public function testAllRightsWithMessage() {
- // Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
- $allRights = User::getAllRights();
- $allMessageKeys = Language::getMessageKeysFor( 'en' );
- $rightsWithMessage = [];
- foreach ( $allMessageKeys as $message ) {
- // === 0: must be at beginning of string (position 0)
- if ( strpos( $message, 'right-' ) === 0 ) {
- $rightsWithMessage[] = substr( $message, strlen( 'right-' ) );
- }
- }
- $missing = array_diff(
- $allRights,
- $rightsWithMessage
- );
- $this->assertEquals(
- [],
- $missing,
- 'Each user rights (core/extensions) has a corresponding right- message.'
- );
- }
- }
|