mediawiki-skins-Vector/tests/phpunit/unit/FeatureManagement/Requirements/UserPreferenceRequirementTest.php
Jon Robson 411f9ce69a Allow user preferences to be overriden by query string parameter
Currently only features that are associated with LocalSettings configuration
can be overriden by query string. Going forward we'd like to expand this to apply
to user preference too.

A generic OverrideableRequirement is created.
The existing OverridableConfigRequirement is refactored to extend OverrideableRequirement
The /UserPreferenceRequirement now extends it

This allows http://localhost:8888/wiki/Spain?vectortypographysurvey=1
to work

Bug: T347900
Change-Id: I11efd6b07192d5d2333f4506e9d87a8c0638d657
2023-10-12 19:05:10 +00:00

106 lines
2.1 KiB
PHP

<?php
namespace MediaWiki\Skins\Vector\Tests\Unit\FeatureManagement\Requirements;
use FauxRequest;
use MediaWiki\Skins\Vector\FeatureManagement\Requirements\UserPreferenceRequirement;
use MediaWiki\Title\Title;
use MediaWiki\User\UserOptionsLookup;
use User;
/**
* @group Vector
* @group FeatureManagement
* @coversDefaultClass \MediaWiki\Skins\Vector\FeatureManagement\Requirements\UserPreferenceRequirement
*/
final class UserPreferenceRequirementTest extends \MediaWikiUnitTestCase {
public static function providerTestIsMetRequirement() {
return [
[
// Is option enabled?
1,
// Is title present?
true,
// Expected
true,
'If enabled, returns true'
],
[
// Is option enabled?
0,
// Is title present?
true,
// Expected
false,
'If disabled, returns false'
],
[
// Is option enabled?
'enabled',
// Is title present?
false,
// Expected
false,
'If enabled but title null, returns false'
],
[
'disabled',
// Is title present?
true,
// Expected
false,
'If disabled, returns false'
],
[
'0',
// Is title present?
true,
// Expected
false,
'If disabled, returns false'
],
[
'medium',
// Is title present?
true,
// Expected
true,
'If unrecognized string returns true'
],
];
}
/**
* @covers ::isMet
* @dataProvider providerTestIsMetRequirement
* @param bool $isEnabled
* @param bool $isTitlePresent
* @param bool $expected
* @param string $msg
*/
public function testIsMetRequirement(
$isEnabled,
$isTitlePresent,
$expected,
$msg
) {
$user = $this->createMock( User::class );
$title = $isTitlePresent ? $this->createMock( Title::class ) : null;
$request = new FauxRequest();
$userOptionsLookup = $this->createMock( UserOptionsLookup::class );
$userOptionsLookup->method( 'getOption' )->willReturn( $isEnabled );
$requirement = new UserPreferenceRequirement(
$user,
$userOptionsLookup,
'userOption',
'userRequirement',
$request,
$title
);
$this->assertSame( $expected, $requirement->isMet(), $msg );
}
}