(bug 24593) Native name for Sorani now uses only Arabic script
[lhc/web/wiklou.git] / maintenance / tests / ApiTest.php
index 4b838ce..d8fc49d 100644 (file)
@@ -1,12 +1,10 @@
 <?php
 
-require_once( "ApiSetup.php" );
-
 class MockApi extends ApiBase {
-       public function execute() {}
-       public function getVersion() {}
+       public function execute() { }
+       public function getVersion() { }
 
-       public function __construct() {}
+       public function __construct() { }
 
        public function getAllowedParams() {
                $params = array(
@@ -15,12 +13,9 @@ class MockApi extends ApiBase {
                        'sessionkey' => null,
                );
        }
-
-
 }
 
-
-class ApiTest extends ApiSetup {
+class ApiTest extends ApiTestSetup {
 
        function setup() {
                parent::setup();
@@ -30,8 +25,8 @@ class ApiTest extends ApiSetup {
                $mock = new MockApi();
 
                $this->assertEquals(
-                       null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt",
-                                                                                                          "enablechunks" => false), "filename", "enablechunks"));
+                       null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
+                                                                                                          "enablechunks" => false ), "filename", "enablechunks" ) );
        }
 
        /**
@@ -41,8 +36,8 @@ class ApiTest extends ApiSetup {
                $mock = new MockApi();
 
                $this->assertEquals(
-                       null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt",
-                                                                                                          "enablechunks" => 0), "filename", "enablechunks"));
+                       null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
+                                                                                                          "enablechunks" => 0 ), "filename", "enablechunks" ) );
        }
 
        /**
@@ -52,18 +47,16 @@ class ApiTest extends ApiSetup {
                $mock = new MockApi();
 
                $this->assertEquals(
-                       null, $mock->requireOnlyOneParameter(array("filename" => "foo.txt",
-                                                                                                          "enablechunks" => true), "filename", "enablechunks"));
+                       null, $mock->requireOnlyOneParameter( array( "filename" => "foo.txt",
+                                                                                                          "enablechunks" => true ), "filename", "enablechunks" ) );
        }
 
        function testApi() {
-               global $wgServerName, $wgServer, $wgDBprefix, $wgDBtype;
+               global $wgServerName, $wgServer;
 
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if(!isset($wgServerName) || !isset($wgServer)) {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+               if ( !isset( $wgServerName ) || !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
                /* Haven't thought about test ordering yet -- but this depends on HttpTest.php */
                $resp = Http::get( self::$apiUrl . "?format=xml" );
@@ -75,13 +68,11 @@ class ApiTest extends ApiSetup {
        }
 
        function testApiLoginNoName() {
-               global $wgServerName, $wgServer, $wgDBprefix, $wgDBtype;
+               global $wgServerName, $wgServer;
 
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if(!isset($wgServerName) || !isset($wgServer)) {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+               if ( !isset( $wgServerName ) || !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
                $resp = Http::post( self::$apiUrl . "?action=login&format=xml",
                                                   array( "postData" => array(
@@ -96,13 +87,11 @@ class ApiTest extends ApiSetup {
        }
 
        function testApiLoginBadPass() {
-               global $wgServerName, $wgServer, $wgDBprefix, $wgDBtype;
+               global $wgServerName, $wgServer;
 
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if(!isset($wgServerName) || !isset($wgServer)) {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+               if ( !isset( $wgServerName ) || !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
                $resp = Http::post( self::$apiUrl . "?action=login&format=xml",
                                                   array( "postData" => array(
@@ -112,45 +101,93 @@ class ApiTest extends ApiSetup {
                $sxe = simplexml_load_string( $resp );
                $this->assertNotType( "bool", $sxe );
                $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
-               $a = $sxe->login[0]->attributes()->result;
-               $this->assertEquals( ' result="WrongPass"', $a->asXML() );
+               $a = $sxe->login[0]->attributes()->result[0];
+               $this->assertEquals( ' result="NeedToken"', $a->asXML() );
+
+               $token = (string)$sxe->login[0]->attributes()->token;
+
+               $resp = Http::post( self::$apiUrl . "?action=login&format=xml",
+                                                  array( "postData" => array(
+                                                                       "lgtoken" => $token,
+                                                                       "lgname" => self::$userName,
+                                                                       "lgpassword" => "bad" ) ) );
+
+
+               $sxe = simplexml_load_string( $resp );
+               $this->assertNotType( "bool", $sxe );
+               $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+               $a = $sxe->login[0]->attributes()->result[0];
+
+               $this->assertEquals( ' result="NeedToken"', $a->asXML() );
        }
 
        function testApiLoginGoodPass() {
-               global $wgServerName, $wgServer, $wgDBprefix, $wgDBtype;
+               global $wgServerName, $wgServer;
 
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if(!isset($wgServerName) || !isset($wgServer)) {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+               if ( !isset( $wgServerName ) || !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
-               $resp = Http::post( self::$apiUrl . "?action=login&format=xml",
-                                                  array( "postData" => array(
-                                                                        "lgname" => self::$userName,
-                                                                        "lgpassword" => self::$passWord ) ) );
+               $req = HttpRequest::factory( self::$apiUrl . "?action=login&format=xml",
+                       array( "method" => "POST",
+                               "postData" => array(
+                               "lgname" => self::$userName,
+                               "lgpassword" => self::$passWord ) ) );
+               $req->execute();
+
                libxml_use_internal_errors( true );
-               $sxe = simplexml_load_string( $resp );
+               $sxe = simplexml_load_string( $req->getContent() );
                $this->assertNotType( "bool", $sxe );
                $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
-               $a = $sxe->login[0]->attributes()->result;
+
+               $a = $sxe->login[0]->attributes()->result[0];
+               $this->assertEquals( ' result="NeedToken"', $a->asXML() );
+               $token = (string)$sxe->login[0]->attributes()->token;
+
+               $req->setData( array(
+                       "lgtoken" => $token,
+                       "lgname" => self::$userName,
+                       "lgpassword" => self::$passWord ) );
+               $req->execute();
+
+               $sxe = simplexml_load_string( $req->getContent() );
+
+               $this->assertNotType( "bool", $sxe );
+               $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+               $a = $sxe->login[0]->attributes()->result[0];
+
                $this->assertEquals( ' result="Success"', $a->asXML() );
        }
 
        function testApiGotCookie() {
-               global $wgServerName, $wgServer, $wgScriptPath, $wgDBprefix, $wgDBtype;
+               global $wgServerName, $wgServer, $wgScriptPath;
 
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if(!isset($wgServerName) || !isset($wgServer)) {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+               if ( !isset( $wgServerName ) || !isset( $wgServer ) ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
                $req = HttpRequest::factory( self::$apiUrl . "?action=login&format=xml",
-                                                                        array( "method" => "POST",
-                                                                                       "postData" => array( "lgname" => self::$userName,
-                                                                                                                                "lgpassword" => self::$passWord ) ) );
+                       array( "method" => "POST",
+                               "postData" => array(
+                               "lgname" => self::$userName,
+                               "lgpassword" => self::$passWord ) ) );
                $req->execute();
+
+               libxml_use_internal_errors( true );
+               $sxe = simplexml_load_string( $req->getContent() );
+               $this->assertNotType( "bool", $sxe );
+               $this->assertThat( $sxe, $this->isInstanceOf( "SimpleXMLElement" ) );
+
+               $a = $sxe->login[0]->attributes()->result[0];
+               $this->assertEquals( ' result="NeedToken"', $a->asXML() );
+               $token = (string)$sxe->login[0]->attributes()->token;
+
+               $req->setData( array(
+                       "lgtoken" => $token,
+                       "lgname" => self::$userName,
+                       "lgpassword" => self::$passWord ) );
+               $req->execute();
+
                $cj = $req->getCookieJar();
                $this->assertRegexp( '/_session=[^;]*; .*UserID=[0-9]*; .*UserName=' . self::$userName . '; .*Token=/',
                                                         $cj->serializeToHttpRequest( $wgScriptPath, $wgServerName ) );
@@ -162,19 +199,17 @@ class ApiTest extends ApiSetup {
        /**
         * @depends testApiGotCookie
         */
-       function testApiListPages(CookieJar $cj) {
-               $this->markTestIncomplete("Not done with this yet");
-               global $wgServerName, $wgServer, $wgDBprefix, $wgDBtype;
-
-               if($wgDBprefix === "parsertest_" || ($wgDBtype == 'oracle' && $wgDBprefix === 'pt_'))
-                       $this->markTestSkipped("This test can't (yet?) be run with the parser tests");
-               if($wgServerName == "localhost" || $wgServer == "http://localhost") {
-                       $this->markTestIncomplete('This test needs $wgServerName and $wgServer to '.
-                                                                         'be set in LocalSettings.php');
+       function testApiListPages( CookieJar $cj ) {
+               $this->markTestIncomplete( "Not done with this yet" );
+               global $wgServerName, $wgServer;
+
+               if ( $wgServerName == "localhost" || $wgServer == "http://localhost" ) {
+                       $this->markTestIncomplete( 'This test needs $wgServerName and $wgServer to ' .
+                                                                         'be set in LocalSettings.php' );
                }
-               $req = HttpRequest::factory( self::$apiUrl . "?action=query&format=xml&prop=revisions&".
+               $req = HttpRequest::factory( self::$apiUrl . "?action=query&format=xml&prop=revisions&" .
                                                                         "titles=Main%20Page&rvprop=timestamp|user|comment|content" );
-               $req->setCookieJar($cj);
+               $req->setCookieJar( $cj );
                $req->execute();
                libxml_use_internal_errors( true );
                $sxe = simplexml_load_string( $req->getContent() );