Merge "maintenance: Script to rename titles for Unicode uppercasing changes"
[lhc/web/wiklou.git] / tests / phpunit / includes / cache / GenderCacheTest.php
1 <?php
2
3 use MediaWiki\MediaWikiServices;
4
5 /**
6 * @group Database
7 * @group Cache
8 */
9 class GenderCacheTest extends MediaWikiLangTestCase {
10
11 /** @var string[] User key => username */
12 private static $nameMap;
13
14 function addDBDataOnce() {
15 // ensure the correct default gender
16 $this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', [ 'gender' => 'unknown' ] );
17
18 $male = $this->getMutableTestUser()->getUser();
19 $male->setOption( 'gender', 'male' );
20 $male->saveSettings();
21
22 $female = $this->getMutableTestUser()->getUser();
23 $female->setOption( 'gender', 'female' );
24 $female->saveSettings();
25
26 $default = $this->getMutableTestUser()->getUser();
27 $default->setOption( 'gender', null );
28 $default->saveSettings();
29
30 self::$nameMap = [
31 'UTMale' => $male->getName(),
32 'UTFemale' => $female->getName(),
33 'UTDefaultGender' => $default->getName()
34 ];
35 }
36
37 /**
38 * test usernames
39 *
40 * @dataProvider provideUserGenders
41 * @covers GenderCache::getGenderOf
42 */
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" );
48 }
49
50 /**
51 * genderCache should work with user objects, too
52 *
53 * @dataProvider provideUserGenders
54 * @covers GenderCache::getGenderOf
55 */
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" );
61 }
62
63 public static function provideUserGenders() {
64 return [
65 [ 'UTMale', 'male' ],
66 [ 'UTFemale', 'female' ],
67 [ 'UTDefaultGender', 'unknown' ],
68 [ 'UTNotExist', 'unknown' ],
69 // some not valid user
70 [ '127.0.0.1', 'unknown' ],
71 [ 'user@test', 'unknown' ],
72 ];
73 }
74
75 /**
76 * test strip of subpages to avoid unnecessary queries
77 * against the never existing username
78 *
79 * @dataProvider provideUserGenders
80 * @covers GenderCache::getGenderOf
81 */
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" );
87 }
88 }