MediaWiki REL1_31
TestUserRegistry.php
Go to the documentation of this file.
1<?php
2
7
9 private static $testUsers = [];
10
12 private static $counter = 0;
13
15 private static $randInt;
16
17 public static function getNextId() {
18 if ( !self::$randInt ) {
19 self::$randInt = mt_rand( 1, 0xFFFFFF );
20 }
21 return sprintf( '%06x.%03x', self::$randInt, ++self::$counter );
22 }
23
34 public static function getMutableTestUser( $testName, $groups = [] ) {
35 $id = self::getNextId();
36 $password = wfRandomString( 20 );
37 $testUser = new TestUser(
38 "TestUser $testName $id", // username
39 "Name $id", // real name
40 "$id@mediawiki.test", // e-mail
41 $groups, // groups
42 $password // password
43 );
44 $testUser->getUser()->clearInstanceCache();
45 return $testUser;
46 }
47
60 public static function getImmutableTestUser( $groups = [] ) {
61 $groups = array_unique( $groups );
62 sort( $groups );
63 $key = implode( ',', $groups );
64
65 $testUser = isset( self::$testUsers[$key] )
66 ? self::$testUsers[$key]
67 : false;
68
69 if ( !$testUser || !$testUser->getUser()->isLoggedIn() ) {
70 $id = self::getNextId();
71 // Hack! If this is the primary sysop account, make the username
72 // be 'UTSysop', for back-compat, and for the sake of PHPUnit data
73 // provider methods, which are executed before the test database
74 // is set up. See T136348.
75 if ( $groups === [ 'bureaucrat', 'sysop' ] ) {
76 $username = 'UTSysop';
77 $password = 'UTSysopPassword';
78 } else {
79 $username = "TestUser $id";
80 $password = wfRandomString( 20 );
81 }
82 self::$testUsers[$key] = $testUser = new TestUser(
83 $username, // username
84 "Name $id", // real name
85 "$id@mediawiki.test", // e-mail
86 $groups, // groups
87 $password // password
88 );
89 }
90
91 $testUser->getUser()->clearInstanceCache();
92 return self::$testUsers[$key];
93 }
94
107 public static function clear() {
108 self::$testUsers = [];
109 }
110
117 public static function isMutable( User $user ) {
118 foreach ( self::$testUsers as $key => $testUser ) {
119 if ( $user === $testUser->getUser() ) {
120 return false;
121 }
122 }
123 return true;
124 }
125}
wfRandomString( $length=32)
Get a random string containing a number of pseudo-random hex characters.
static int $randInt
Random int, included in IDs.
static clear()
Clear the registry.
static getMutableTestUser( $testName, $groups=[])
Get a TestUser object that the caller may modify.
static isMutable(User $user)
static getImmutableTestUser( $groups=[])
Get a TestUser object that the caller may not modify.
static TestUser[] $testUsers
(group key => TestUser)
static int $counter
Count of users that have been generated.
Wraps the user object, so we can also retain full access to properties like password if we log in via...
Definition TestUser.php:7
The User object encapsulates all of the user-specific settings (user_id, name, rights,...
Definition User.php:53
this hook is for auditing only or null if authentication failed before getting that far $username
Definition hooks.txt:785