Why: - PermissionManager::getUserPermissions() checks whether the user is blocked if $wgBlockDisablesLogin = true, so that it can then limit user's permissions to the set of permissions assigned to unregistered users if so. - This causes the GetUserBlock hook to run, which may itself check permissions on the user (e.g. in the GlobalBlocking extension), causing an infinite loop. - Since the decision whether the user is blocked isn't yet final by the time GetUserBlock runs, any permission checks triggered by GetUserBlock handlers should see the user's full set of permissions. What: - Stash the user's permissions in PermissionManager's in-memory cache before running block checks if BlockDisablesLogin = true. - Add tests. Bug: T384197 Change-Id: I3e3804fe518627e9edc2b574cce88f533fd93fe4 (cherry picked from commit 27062b9f8752cc853a65e8a46c9d7d1a9af32c48) |
||
|---|---|---|
| .. | ||
| data | ||
| docs | ||
| includes | ||
| integration/includes | ||
| maintenance | ||
| mocks | ||
| structure | ||
| suites | ||
| tests | ||
| unit | ||
| bootstrap.common.php | ||
| bootstrap.integration.php | ||
| bootstrap.maintenance.php | ||
| bootstrap.php | ||
| DynamicPropertyTestHelper.php | ||
| getPHPUnitExtensionsAndSkins.php | ||
| HamcrestPHPUnitIntegration.php | ||
| JsonSchemaAssertionTrait.php | ||
| MediaWikiCoversValidator.php | ||
| MediaWikiDeprecatedConfigPHPUnitExtension.php | ||
| MediaWikiGroupValidator.php | ||
| MediaWikiIntegrationTestCase.php | ||
| MediaWikiLangTestCase.php | ||
| MediaWikiLoggerPHPUnitExtension.php | ||
| MediaWikiPHPUnitResultPrinter.php | ||
| MediaWikiTeardownPHPUnitExtension.php | ||
| MediaWikiTestCaseTrait.php | ||
| MediaWikiUnitTestCase.php | ||
| MWTestDox.php | ||
| phpunit.php | ||
| README.md | ||
| ResourceLoaderTestCase.php | ||
| suite.xml | ||
| TestSelectQueryBuilder.php | ||
MediaWiki PHPUnit tests
WARNING: Integration tests may be destructive and alter or remove parts of your local database. We try to use temporary tables where possible, but you must never run tests on a production server or on a wiki where you don't want to lose data.
Running tests
If you haven't already, run composer update (specifically without --no-dev) in the MediaWiki core directory. This will install PHPUnit.
To read about how to run specific tests, refer to:
https://www.mediawiki.org/wiki/Manual:PHP_unit_testing/Running_the_tests
Writing tests
A guide to writing PHPUnit tests for MediaWiki can be found at: