Merge "API: Warn when unsupported PHP array syntax is used"
[lhc/web/wiklou.git] / tests / phpunit / includes / UserTest.php
index e777179..a19d035 100644 (file)
@@ -46,8 +46,16 @@ class UserTest extends MediaWikiTestCase {
                $wgRevokePermissions['formertesters'] = array(
                        'runtest' => true,
                );
+
+               # For the options test
+               $wgGroupPermissions['*'] = array(
+                       'editmyoptions' => true,
+               );
        }
 
+       /**
+        * @covers User::getGroupPermissions
+        */
        public function testGroupPermissions() {
                $rights = User::getGroupPermissions( array( 'unittesters' ) );
                $this->assertContains( 'runtest', $rights );
@@ -62,6 +70,9 @@ class UserTest extends MediaWikiTestCase {
                $this->assertNotContains( 'nukeworld', $rights );
        }
 
+       /**
+        * @covers User::getGroupPermissions
+        */
        public function testRevokePermissions() {
                $rights = User::getGroupPermissions( array( 'unittesters', 'formertesters' ) );
                $this->assertNotContains( 'runtest', $rights );
@@ -70,6 +81,9 @@ class UserTest extends MediaWikiTestCase {
                $this->assertNotContains( 'nukeworld', $rights );
        }
 
+       /**
+        * @covers User::getRights
+        */
        public function testUserPermissions() {
                $rights = $this->user->getRights();
                $this->assertContains( 'runtest', $rights );
@@ -80,6 +94,7 @@ class UserTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideGetGroupsWithPermission
+        * @covers User::getGroupsWithPermission
         */
        public function testGetGroupsWithPermission( $expected, $right ) {
                $result = User::getGroupsWithPermission( $right );
@@ -112,6 +127,7 @@ class UserTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideUserNames
+        * @covers User::isValidUserName
         */
        public function testIsValidUserName( $username, $result, $message ) {
                $this->assertEquals( $this->user->isValidUserName( $username ), $result, $message );
@@ -166,6 +182,7 @@ class UserTest extends MediaWikiTestCase {
        /**
         * Test User::editCount
         * @group medium
+        * @covers User::getEditCount
         */
        public function testEditCount() {
                $user = User::newFromName( 'UnitTestUser' );
@@ -179,17 +196,27 @@ class UserTest extends MediaWikiTestCase {
                }
 
                $user->clearInstanceCache();
-               $this->assertEquals( 3, $user->getEditCount(), 'After three edits, the user edit count should be 3' );
+               $this->assertEquals(
+                       3,
+                       $user->getEditCount(),
+                       'After three edits, the user edit count should be 3'
+               );
 
                // increase the edit count and clear the cache
                $user->incEditCount();
 
                $user->clearInstanceCache();
-               $this->assertEquals( 4, $user->getEditCount(), 'After increasing the edit count manually, the user edit count should be 4' );
+               $this->assertEquals(
+                       4,
+                       $user->getEditCount(),
+                       'After increasing the edit count manually, the user edit count should be 4'
+               );
        }
 
        /**
         * Test changing user options.
+        * @covers User::setOption
+        * @covers User::getOption
         */
        public function testOptions() {
                $user = User::newFromName( 'UnitTestUser' );
@@ -207,6 +234,7 @@ class UserTest extends MediaWikiTestCase {
        /**
         * Bug 37963
         * Make sure defaults are loaded when setOption is called.
+        * @covers User::loadOptions
         */
        public function testAnonOptions() {
                global $wgDefaultUserOptions;
@@ -214,4 +242,57 @@ class UserTest extends MediaWikiTestCase {
                $this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
                $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
        }
+
+       /**
+        * Test password expiration.
+        * @covers User::getPasswordExpired()
+        */
+       public function testPasswordExpire() {
+               global $wgPasswordExpireGrace;
+               $wgTemp = $wgPasswordExpireGrace;
+               $wgPasswordExpireGrace = 3600 * 24 * 7; // 7 days
+
+               $user = User::newFromName( 'UnitTestUser' );
+               $user->loadDefaults();
+               $this->assertEquals( false, $user->getPasswordExpired() );
+
+               $ts = time() - ( 3600 * 24 * 1 ); // 1 day ago
+               $user->expirePassword( $ts );
+               $this->assertEquals( 'soft', $user->getPasswordExpired() );
+
+               $ts = time() - ( 3600 * 24 * 10 ); // 10 days ago
+               $user->expirePassword( $ts );
+               $this->assertEquals( 'hard', $user->getPasswordExpired() );
+
+               $wgPasswordExpireGrace = $wgTemp;
+       }
+
+       /**
+        * Test password validity checks. There are 3 checks in core,
+        *      - ensure the password meets the minimal length
+        *      - ensure the password is not the same as the username
+        *      - ensure the username/password combo isn't forbidden
+        * @covers User::checkPasswordValidity()
+        * @covers User::getPasswordValidity()
+        * @covers User::isValidPassword()
+        */
+       public function testCheckPasswordValidity() {
+               $this->setMwGlobals( 'wgMinimalPasswordLength', 6 );
+               $user = User::newFromName( 'Useruser' );
+               // Sanity
+               $this->assertTrue( $user->isValidPassword( 'Password1234' ) );
+
+               // Minimum length
+               $this->assertFalse( $user->isValidPassword( 'a' ) );
+               $this->assertFalse( $user->checkPasswordValidity( 'a' )->isGood() );
+               $this->assertEquals( 'passwordtooshort', $user->getPasswordValidity( 'a' ) );
+
+               // Matches username
+               $this->assertFalse( $user->checkPasswordValidity( 'Useruser' )->isGood() );
+               $this->assertEquals( 'password-name-match', $user->getPasswordValidity( 'Useruser' ) );
+
+               // On the forbidden list
+               $this->assertFalse( $user->checkPasswordValidity( 'Passpass' )->isGood() );
+               $this->assertEquals( 'password-login-forbidden', $user->getPasswordValidity( 'Passpass' ) );
+       }
 }