3 use MediaWiki\MediaWikiServices
;
9 class GenderCacheTest
extends MediaWikiLangTestCase
{
11 /** @var string[] User key => username */
12 private static $nameMap;
14 function addDBDataOnce() {
15 // ensure the correct default gender
16 $this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', [ 'gender' => 'unknown' ] );
18 $male = $this->getMutableTestUser()->getUser();
19 $male->setOption( 'gender', 'male' );
20 $male->saveSettings();
22 $female = $this->getMutableTestUser()->getUser();
23 $female->setOption( 'gender', 'female' );
24 $female->saveSettings();
26 $default = $this->getMutableTestUser()->getUser();
27 $default->setOption( 'gender', null );
28 $default->saveSettings();
31 'UTMale' => $male->getName(),
32 'UTFemale' => $female->getName(),
33 'UTDefaultGender' => $default->getName()
40 * @dataProvider provideUserGenders
41 * @covers GenderCache::getGenderOf
43 public function testUserName( $userKey, $expectedGender ) {
44 $genderCache = MediaWikiServices
::getInstance()->getGenderCache();
45 $username = self
::$nameMap[$userKey] ??
$userKey;
46 $gender = $genderCache->getGenderOf( $username );
47 $this->assertEquals( $gender, $expectedGender, "GenderCache normal" );
51 * genderCache should work with user objects, too
53 * @dataProvider provideUserGenders
54 * @covers GenderCache::getGenderOf
56 public function testUserObjects( $userKey, $expectedGender ) {
57 $username = self
::$nameMap[$userKey] ??
$userKey;
58 $genderCache = MediaWikiServices
::getInstance()->getGenderCache();
59 $gender = $genderCache->getGenderOf( $username );
60 $this->assertEquals( $gender, $expectedGender, "GenderCache normal" );
63 public static function provideUserGenders() {
66 [ 'UTFemale', 'female' ],
67 [ 'UTDefaultGender', 'unknown' ],
68 [ 'UTNotExist', 'unknown' ],
69 // some not valid user
70 [ '127.0.0.1', 'unknown' ],
71 [ 'user@test', 'unknown' ],
76 * test strip of subpages to avoid unnecessary queries
77 * against the never existing username
79 * @dataProvider provideUserGenders
80 * @covers GenderCache::getGenderOf
82 public function testStripSubpages( $userKey, $expectedGender ) {
83 $username = self
::$nameMap[$userKey] ??
$userKey;
84 $genderCache = MediaWikiServices
::getInstance()->getGenderCache();
85 $gender = $genderCache->getGenderOf( "$username/subpage" );
86 $this->assertEquals( $gender, $expectedGender, "GenderCache must strip of subpages" );