Merge "Add missing @throws in Importers"
[lhc/web/wiklou.git] / tests / phpunit / includes / api / ApiOptionsTest.php
index fff05c7..7e45f4d 100644 (file)
@@ -17,7 +17,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        /** @var DerivativeContext */
        private $mContext;
 
-       private static $Success = array( 'options' => 'success' );
+       private static $Success = [ 'options' => 'success' ];
 
        protected function setUp() {
                parent::setUp();
@@ -28,13 +28,13 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
 
                // Set up groups and rights
                $this->mUserMock->expects( $this->any() )
-                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( array( '*', 'user' ) ) );
+                       ->method( 'getEffectiveGroups' )->will( $this->returnValue( [ '*', 'user' ] ) );
                $this->mUserMock->expects( $this->any() )
-                       ->method( 'isAllowed' )->will( $this->returnValue( true ) );
+                       ->method( 'isAllowedAny' )->will( $this->returnValue( true ) );
 
                // Set up callback for User::getOptionKinds
                $this->mUserMock->expects( $this->any() )
-                       ->method( 'getOptionKinds' )->will( $this->returnCallback( array( $this, 'getOptionKinds' ) ) );
+                       ->method( 'getOptionKinds' )->will( $this->returnCallback( [ $this, 'getOptionKinds' ] ) );
 
                // No actual DB data
                $this->mUserMock->expects( $this->any() )
@@ -48,43 +48,43 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $main = new ApiMain( $this->mContext );
 
                // Empty session
-               $this->mSession = array();
+               $this->mSession = [];
 
                $this->mTested = new ApiOptions( $main, 'options' );
 
-               $this->mergeMwGlobalArrayValue( 'wgHooks', array(
-                       'GetPreferences' => array(
-                               array( $this, 'hookGetPreferences' )
-                       )
-               ) );
+               $this->mergeMwGlobalArrayValue( 'wgHooks', [
+                       'GetPreferences' => [
+                               [ $this, 'hookGetPreferences' ]
+                       ]
+               ] );
        }
 
        public function hookGetPreferences( $user, &$preferences ) {
-               $preferences = array();
+               $preferences = [];
 
-               foreach ( array( 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ) as $k ) {
-                       $preferences[$k] = array(
+               foreach ( [ 'name', 'willBeNull', 'willBeEmpty', 'willBeHappy' ] as $k ) {
+                       $preferences[$k] = [
                                'type' => 'text',
                                'section' => 'test',
                                'label' => ' ',
-                       );
+                       ];
                }
 
-               $preferences['testmultiselect'] = array(
+               $preferences['testmultiselect'] = [
                        'type' => 'multiselect',
-                       'options' => array(
-                               'Test' => array(
+                       'options' => [
+                               'Test' => [
                                        '<span dir="auto">Some HTML here for option 1</span>' => 'opt1',
                                        '<span dir="auto">Some HTML here for option 2</span>' => 'opt2',
                                        '<span dir="auto">Some HTML here for option 3</span>' => 'opt3',
                                        '<span dir="auto">Some HTML here for option 4</span>' => 'opt4',
-                               ),
-                       ),
+                               ],
+                       ],
                        'section' => 'test',
                        'label' => '&#160;',
                        'prefix' => 'testmultiselect-',
-                       'default' => array(),
-               );
+                       'default' => [],
+               ];
 
                return true;
        }
@@ -97,7 +97,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
         */
        public function getOptionKinds( IContextSource $context, $options = null ) {
                // Match with above.
-               $kinds = array(
+               $kinds = [
                        'name' => 'registered',
                        'willBeNull' => 'registered',
                        'willBeEmpty' => 'registered',
@@ -107,13 +107,13 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                        'testmultiselect-opt3' => 'registered-multiselect',
                        'testmultiselect-opt4' => 'registered-multiselect',
                        'special' => 'special',
-               );
+               ];
 
                if ( $options === null ) {
                        return $kinds;
                }
 
-               $mapping = array();
+               $mapping = [];
                foreach ( $options as $key => $value ) {
                        if ( isset( $kinds[$key] ) ) {
                                $mapping[$key] = $kinds[$key];
@@ -127,13 +127,13 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                return $mapping;
        }
 
-       private function getSampleRequest( $custom = array() ) {
-               $request = array(
+       private function getSampleRequest( $custom = [] ) {
+               $request = [
                        'token' => '123ABC',
                        'change' => null,
                        'optionname' => null,
                        'optionvalue' => null,
-               );
+               ];
 
                return array_merge( $request, $custom );
        }
@@ -142,14 +142,14 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mContext->setRequest( new FauxRequest( $request, true, $this->mSession ) );
                $this->mTested->execute();
 
-               return $this->mTested->getResult()->getResultData( null, array( 'Strip' => 'all' ) );
+               return $this->mTested->getResult()->getResultData( null, [ 'Strip' => 'all' ] );
        }
 
        /**
-        * @expectedException UsageException
+        * @expectedException ApiUsageException
         */
        public function testNoToken() {
-               $request = $this->getSampleRequest( array( 'token' => null ) );
+               $request = $this->getSampleRequest( [ 'token' => null ] );
 
                $this->executeQuery( $request );
        }
@@ -163,27 +163,23 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                        $request = $this->getSampleRequest();
 
                        $this->executeQuery( $request );
-               } catch ( UsageException $e ) {
-                       $this->assertEquals( 'notloggedin', $e->getCodeString() );
-                       $this->assertEquals( 'Anonymous users cannot change preferences', $e->getMessage() );
-
+               } catch ( ApiUsageException $e ) {
+                       $this->assertTrue( ApiTestCase::apiExceptionHasCode( $e, 'notloggedin' ) );
                        return;
                }
-               $this->fail( "UsageException was not thrown" );
+               $this->fail( "ApiUsageException was not thrown" );
        }
 
        public function testNoOptionname() {
                try {
-                       $request = $this->getSampleRequest( array( 'optionvalue' => '1' ) );
+                       $request = $this->getSampleRequest( [ 'optionvalue' => '1' ] );
 
                        $this->executeQuery( $request );
-               } catch ( UsageException $e ) {
-                       $this->assertEquals( 'nooptionname', $e->getCodeString() );
-                       $this->assertEquals( 'The optionname parameter must be set', $e->getMessage() );
-
+               } catch ( ApiUsageException $e ) {
+                       $this->assertTrue( ApiTestCase::apiExceptionHasCode( $e, 'nooptionname' ) );
                        return;
                }
-               $this->fail( "UsageException was not thrown" );
+               $this->fail( "ApiUsageException was not thrown" );
        }
 
        public function testNoChanges() {
@@ -200,19 +196,17 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                        $request = $this->getSampleRequest();
 
                        $this->executeQuery( $request );
-               } catch ( UsageException $e ) {
-                       $this->assertEquals( 'nochanges', $e->getCodeString() );
-                       $this->assertEquals( 'No changes were requested', $e->getMessage() );
-
+               } catch ( ApiUsageException $e ) {
+                       $this->assertTrue( ApiTestCase::apiExceptionHasCode( $e, 'nochanges' ) );
                        return;
                }
-               $this->fail( "UsageException was not thrown" );
+               $this->fail( "ApiUsageException was not thrown" );
        }
 
        public function testReset() {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'resetOptions' )
-                       ->with( $this->equalTo( array( 'all' ) ) );
+                       ->with( $this->equalTo( [ 'all' ] ) );
 
                $this->mUserMock->expects( $this->never() )
                        ->method( 'setOption' );
@@ -220,7 +214,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array( 'reset' => '' ) );
+               $request = $this->getSampleRequest( [ 'reset' => '' ] );
 
                $response = $this->executeQuery( $request );
 
@@ -230,7 +224,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
        public function testResetKinds() {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'resetOptions' )
-                       ->with( $this->equalTo( array( 'registered' ) ) );
+                       ->with( $this->equalTo( [ 'registered' ] ) );
 
                $this->mUserMock->expects( $this->never() )
                        ->method( 'setOption' );
@@ -238,7 +232,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array( 'reset' => '', 'resetkinds' => 'registered' ) );
+               $request = $this->getSampleRequest( [ 'reset' => '', 'resetkinds' => 'registered' ] );
 
                $response = $this->executeQuery( $request );
 
@@ -256,7 +250,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array( 'optionname' => 'name', 'optionvalue' => 'value' ) );
+               $request = $this->getSampleRequest( [ 'optionname' => 'name', 'optionvalue' => 'value' ] );
 
                $response = $this->executeQuery( $request );
 
@@ -274,7 +268,7 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array( 'optionname' => 'name' ) );
+               $request = $this->getSampleRequest( [ 'optionname' => 'name' ] );
                $response = $this->executeQuery( $request );
 
                $this->assertEquals( self::$Success, $response );
@@ -284,33 +278,20 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 2 ) )
-                       ->method( 'getOptions' );
-
-               $this->mUserMock->expects( $this->at( 5 ) )
+               $this->mUserMock->expects( $this->exactly( 3 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeNull' ), $this->identicalTo( null ) );
-
-               $this->mUserMock->expects( $this->at( 6 ) )
-                       ->method( 'getOptions' );
-
-               $this->mUserMock->expects( $this->at( 7 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) );
-
-               $this->mUserMock->expects( $this->at( 8 ) )
-                       ->method( 'getOptions' );
-
-               $this->mUserMock->expects( $this->at( 9 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
+                       ->withConsecutive(
+                               [ $this->equalTo( 'willBeNull' ), $this->identicalTo( null ) ],
+                               [ $this->equalTo( 'willBeEmpty' ), $this->equalTo( '' ) ],
+                               [ $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) ]
+                       );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array(
+               $request = $this->getSampleRequest( [
                        'change' => 'willBeNull|willBeEmpty=|willBeHappy=Happy'
-               ) );
+               ] );
 
                $response = $this->executeQuery( $request );
 
@@ -321,29 +302,22 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 5 ) )
-                       ->method( 'getOptions' );
-
-               $this->mUserMock->expects( $this->at( 6 ) )
+               $this->mUserMock->expects( $this->exactly( 2 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) );
-
-               $this->mUserMock->expects( $this->at( 7 ) )
-                       ->method( 'getOptions' );
-
-               $this->mUserMock->expects( $this->at( 8 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'name' ), $this->equalTo( 'value' ) );
+                       ->withConsecutive(
+                               [ $this->equalTo( 'willBeHappy' ), $this->equalTo( 'Happy' ) ],
+                               [ $this->equalTo( 'name' ), $this->equalTo( 'value' ) ]
+                       );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $args = array(
+               $args = [
                        'reset' => '',
                        'change' => 'willBeHappy=Happy',
                        'optionname' => 'name',
                        'optionvalue' => 'value'
-               );
+               ];
 
                $response = $this->executeQuery( $this->getSampleRequest( $args ) );
 
@@ -354,29 +328,22 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'resetOptions' );
 
-               $this->mUserMock->expects( $this->at( 4 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt1' ), $this->identicalTo( true ) );
-
-               $this->mUserMock->expects( $this->at( 5 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt2' ), $this->identicalTo( null ) );
-
-               $this->mUserMock->expects( $this->at( 6 ) )
+               $this->mUserMock->expects( $this->exactly( 4 ) )
                        ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt3' ), $this->identicalTo( false ) );
-
-               $this->mUserMock->expects( $this->at( 7 ) )
-                       ->method( 'setOption' )
-                       ->with( $this->equalTo( 'testmultiselect-opt4' ), $this->identicalTo( false ) );
+                       ->withConsecutive(
+                               [ $this->equalTo( 'testmultiselect-opt1' ), $this->identicalTo( true ) ],
+                               [ $this->equalTo( 'testmultiselect-opt2' ), $this->identicalTo( null ) ],
+                               [ $this->equalTo( 'testmultiselect-opt3' ), $this->identicalTo( false ) ],
+                               [ $this->equalTo( 'testmultiselect-opt4' ), $this->identicalTo( false ) ]
+                       );
 
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array(
+               $request = $this->getSampleRequest( [
                        'change' => 'testmultiselect-opt1=1|testmultiselect-opt2|'
                                . 'testmultiselect-opt3=|testmultiselect-opt4=0'
-               ) );
+               ] );
 
                $response = $this->executeQuery( $request );
 
@@ -390,20 +357,20 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array(
+               $request = $this->getSampleRequest( [
                        'change' => 'special=1'
-               ) );
+               ] );
 
                $response = $this->executeQuery( $request );
 
-               $this->assertEquals( array(
+               $this->assertEquals( [
                        'options' => 'success',
-                       'warnings' => array(
-                               'options' => array(
-                                       'warnings' => "Validation error for 'special': cannot be set by this module"
-                               )
-                       )
-               ), $response );
+                       'warnings' => [
+                               'options' => [
+                                       'warnings' => "Validation error for \"special\": cannot be set by this module."
+                               ]
+                       ]
+               ], $response );
        }
 
        public function testUnknownOption() {
@@ -413,20 +380,20 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->never() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array(
+               $request = $this->getSampleRequest( [
                        'change' => 'unknownOption=1'
-               ) );
+               ] );
 
                $response = $this->executeQuery( $request );
 
-               $this->assertEquals( array(
+               $this->assertEquals( [
                        'options' => 'success',
-                       'warnings' => array(
-                               'options' => array(
-                                       'warnings' => "Validation error for 'unknownOption': not a valid preference"
-                               )
-                       )
-               ), $response );
+                       'warnings' => [
+                               'options' => [
+                                       'warnings' => "Validation error for \"unknownOption\": not a valid preference."
+                               ]
+                       ]
+               ], $response );
        }
 
        public function testUserjsOption() {
@@ -440,9 +407,9 @@ class ApiOptionsTest extends MediaWikiLangTestCase {
                $this->mUserMock->expects( $this->once() )
                        ->method( 'saveSettings' );
 
-               $request = $this->getSampleRequest( array(
+               $request = $this->getSampleRequest( [
                        'change' => 'userjs-option=1'
-               ) );
+               ] );
 
                $response = $this->executeQuery( $request );