Replace use of assertType with assertInternalType and assertInstanceOf
[lhc/web/wiklou.git] / tests / phpunit / includes / TestUser.php
index 7a61cfd..754568d 100644 (file)
@@ -28,7 +28,7 @@ class TestUser {
 
        private function assertNotReal() {
                global $wgDBprefix;
-               if( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
+               if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX && $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX ) {
                        throw new MWException( "Can't create user on real database" );
                }
        }
@@ -63,9 +63,9 @@ class TestUser {
                }
 
                // Update the user to use the password and other details
-               $this->user->setPassword( $this->password );
-               $this->user->setEmail( $email );
-               $this->user->setRealName( $realname );
+               $change = $this->setPassword( $this->password ) ||
+                       $this->setEmail( $email ) ||
+                       $this->setRealName( $realname );
 
                // Adjust groups by adding any missing ones and removing any extras
                $currentGroups = $this->user->getGroups();
@@ -75,7 +75,59 @@ class TestUser {
                foreach ( array_diff( $currentGroups, $groups ) as $group ) {
                        $this->user->removeGroup( $group );
                }
-               $this->user->saveSettings();
+               if ( $change ) {
+                       $this->user->saveSettings();
+               }
+       }
+
+       /**
+        * @param string $realname
+        * @return bool
+        */
+       private function setRealName( $realname ) {
+               if ( $this->user->getRealName() !== $realname ) {
+                       $this->user->setRealName( $realname );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $email
+        * @return bool
+        */
+       private function setEmail( $email ) {
+               if ( $this->user->getEmail() !== $email ) {
+                       $this->user->setEmail( $email );
+                       return true;
+               }
+
+               return false;
+       }
+
+       /**
+        * @param string $password
+        * @return bool
+        */
+       private function setPassword( $password ) {
+               $passwordFactory = $this->user->getPasswordFactory();
+               $oldDefaultType = $passwordFactory->getDefaultType();
+
+               // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only
+               $passwordFactory->setDefaultType( 'A' );
+               $newPassword = $passwordFactory->newFromPlaintext( $password, $this->user->getPassword() );
+
+               $change = false;
+               if ( !$this->user->getPassword()->equals( $newPassword ) ) {
+                       // Password changed
+                       $this->user->setPassword( $password );
+                       $change = true;
+               }
+
+               $passwordFactory->setDefaultType( $oldDefaultType );
+
+               return $change;
        }
 
        /**