blob: 610a6acdc8ad9f5437a67bce5f0078ac73d7a90b (
plain)
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
|
<?php
/**
* Wraps the user object, so we can also retain full access to properties
* like password if we log in via the API.
*/
class TestUser {
public $username;
public $password;
public $email;
public $groups;
public $user;
public function __construct( $username, $realname = 'Real Name',
$email = 'sample@example.com', $groups = array()
) {
$this->username = $username;
$this->realname = $realname;
$this->email = $email;
$this->groups = $groups;
// don't allow user to hardcode or select passwords -- people sometimes run tests
// on live wikis. Sometimes we create sysop users in these tests. A sysop user with
// a known password would be a Bad Thing.
$this->password = User::randomPassword();
$this->user = User::newFromName( $this->username );
$this->user->load();
// In an ideal world we'd have a new wiki (or mock data store) for every single test.
// But for now, we just need to create or update the user with the desired properties.
// we particularly need the new password, since we just generated it randomly.
// In core MediaWiki, there is no functionality to delete users, so this is the best we can do.
if ( !$this->user->getID() ) {
// create the user
$this->user = User::createNew(
$this->username, array(
"email" => $this->email,
"real_name" => $this->realname
)
);
if ( !$this->user ) {
throw new Exception( "error creating user" );
}
}
// update the user to use the new random password and other details
$this->user->setPassword( $this->password );
$this->user->setEmail( $this->email );
$this->user->setRealName( $this->realname );
// Adjust groups by adding any missing ones and removing any extras
$currentGroups = $this->user->getGroups();
foreach ( array_diff( $this->groups, $currentGroups ) as $group ) {
$this->user->addGroup( $group );
}
foreach ( array_diff( $currentGroups, $this->groups ) as $group ) {
$this->user->removeGroup( $group );
}
$this->user->saveSettings();
}
}
|