1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
<?php
use MediaWiki\Cache\GenderCache;
/**
* @group Database
* @group Cache
*/
class GenderCacheTest extends MediaWikiLangTestCase {
/** @var string[] User key => username */
private static $nameMap;
public function addDBDataOnce() {
// ensure the correct default gender
$this->mergeMwGlobalArrayValue( 'wgDefaultUserOptions', [ 'gender' => 'unknown' ] );
$userOptionsManager = $this->getServiceContainer()->getUserOptionsManager();
$male = $this->getMutableTestUser()->getUser();
$userOptionsManager->setOption( $male, 'gender', 'male' );
$male->saveSettings();
$female = $this->getMutableTestUser()->getUser();
$userOptionsManager->setOption( $female, 'gender', 'female' );
$female->saveSettings();
$default = $this->getMutableTestUser()->getUser();
$userOptionsManager->setOption( $default, 'gender', null );
$default->saveSettings();
self::$nameMap = [
'UTMale' => $male->getName(),
'UTFemale' => $female->getName(),
'UTDefaultGender' => $default->getName()
];
}
/**
* test usernames
*
* @dataProvider provideUserGenders
* @covers \MediaWiki\Cache\GenderCache::getGenderOf
*/
public function testUserName( $userKey, $expectedGender ) {
$genderCache = $this->getServiceContainer()->getGenderCache();
$username = self::$nameMap[$userKey] ?? $userKey;
$gender = $genderCache->getGenderOf( $username );
$this->assertEquals( $expectedGender, $gender, "GenderCache normal" );
}
/**
* genderCache should work with user objects, too
*
* @dataProvider provideUserGenders
* @covers \MediaWiki\Cache\GenderCache::getGenderOf
*/
public function testUserObjects( $userKey, $expectedGender ) {
$username = self::$nameMap[$userKey] ?? $userKey;
$genderCache = $this->getServiceContainer()->getGenderCache();
$gender = $genderCache->getGenderOf( $username );
$this->assertEquals( $expectedGender, $gender, "GenderCache normal" );
}
public static function provideUserGenders() {
return [
[ 'UTMale', 'male' ],
[ 'UTFemale', 'female' ],
[ 'UTDefaultGender', 'unknown' ],
[ 'UTNotExist', 'unknown' ],
// some not valid user
[ '127.0.0.1', 'unknown' ],
[ 'user@test', 'unknown' ],
];
}
/**
* test strip of subpages to avoid unnecessary queries
* against the never existing username
*
* @dataProvider provideUserGenders
* @covers \MediaWiki\Cache\GenderCache::getGenderOf
*/
public function testStripSubpages( $userKey, $expectedGender ) {
$username = self::$nameMap[$userKey] ?? $userKey;
$genderCache = $this->getServiceContainer()->getGenderCache();
$gender = $genderCache->getGenderOf( "$username/subpage" );
$this->assertEquals( $expectedGender, $gender, "GenderCache must strip of subpages" );
}
/**
* GenderCache must work without database (like Installer)
* @coversNothing
*/
public function testWithoutDB() {
$this->overrideMwServices();
$services = $this->getServiceContainer();
$services->disableService( 'DBLoadBalancer' );
$services->disableService( 'DBLoadBalancerFactory' );
// Make sure the disable works
$this->assertTrue( $services->isServiceDisabled( 'DBLoadBalancer' ) );
// Test, if it is possible to create the gender cache
$genderCache = $services->getGenderCache();
$this->assertInstanceOf( GenderCache::class, $genderCache );
}
}
|