Merge "Convert Special:NewFiles to use OOUI."
[lhc/web/wiklou.git] / tests / phpunit / includes / TestUser.php
index 13bfa46..86f4ae7 100644 (file)
@@ -6,25 +6,19 @@
  */
 class TestUser {
        /**
-        * @deprecated Since 1.25. Use TestUser::getUser()->getName()
-        * @private
         * @var string
         */
-       public $username;
+       private $username;
 
        /**
-        * @deprecated Since 1.25. Use TestUser::getPassword()
-        * @private
         * @var string
         */
-       public $password;
+       private $password;
 
        /**
-        * @deprecated Since 1.25. Use TestUser::getUser()
-        * @private
         * @var User
         */
-       public $user;
+       private $user;
 
        private function assertNotReal() {
                global $wgDBprefix;
@@ -78,6 +72,12 @@ class TestUser {
                        $this->user->removeGroup( $group );
                }
                if ( $change ) {
+                       // Disable CAS check before saving. The User object may have been initialized from cached
+                       // information that may be out of whack with the database during testing. If tests were
+                       // perfectly isolated, this would not happen. But if it does happen, let's just ignore the
+                       // inconsistency, and just write the data we want - during testing, we are not worried
+                       // about data loss.
+                       $this->user->mTouched = '';
                        $this->user->saveSettings();
                }
        }
@@ -129,19 +129,28 @@ class TestUser {
                        throw new MWException( "Passed User has not been added to the database yet!" );
                }
 
-               if ( $user->checkPassword( $password ) === true ) {
-                       return;  // Nothing to do.
-               }
-
-               $passwordFactory = new PasswordFactory();
-               $passwordFactory->init( RequestContext::getMain()->getConfig() );
-               $passwordHash = $passwordFactory->newFromPlaintext( $password );
-               wfGetDB( DB_MASTER )->update(
+               $dbw = wfGetDB( DB_MASTER );
+               $row = $dbw->selectRow(
                        'user',
-                       [ 'user_password' => $passwordHash->toString() ],
+                       [ 'user_password' ],
                        [ 'user_id' => $user->getId() ],
                        __METHOD__
                );
+               if ( !$row ) {
+                       throw new MWException( "Passed User has an ID but is not in the database?" );
+               }
+
+               $passwordFactory = new PasswordFactory();
+               $passwordFactory->init( RequestContext::getMain()->getConfig() );
+               if ( !$passwordFactory->newFromCiphertext( $row->user_password )->equals( $password ) ) {
+                       $passwordHash = $passwordFactory->newFromPlaintext( $password );
+                       $dbw->update(
+                               'user',
+                               [ 'user_password' => $passwordHash->toString() ],
+                               [ 'user_id' => $user->getId() ],
+                               __METHOD__
+                       );
+               }
        }
 
        /**