From 6e40cc93fac39c02b1c2a30ef4a6526510d2ce0f Mon Sep 17 00:00:00 2001 From: "Mark A. Hershberger" Date: Wed, 3 Feb 2010 07:45:05 +0000 Subject: [PATCH] Add preliminary API tests. Next step: UploadChunks API testing. --- includes/HttpFunctions.php | 10 ++++- tests/MediaWikiAPITest.php | 74 +++++++++++++++++++++++++++++++++ tests/MediaWikiAPI_TestCase.php | 42 +++++++++++++++++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 tests/MediaWikiAPITest.php create mode 100644 tests/MediaWikiAPI_TestCase.php diff --git a/includes/HttpFunctions.php b/includes/HttpFunctions.php index a0c1a90d4a..551206efa3 100644 --- a/includes/HttpFunctions.php +++ b/includes/HttpFunctions.php @@ -257,7 +257,9 @@ class HttpRequest { $list = array(); if( $this->cookieJar ) { - $this->reqHeaders['Cookie'] = $this->cookieJar->serializeToHttpRequest(); + $this->reqHeaders['Cookie'] = + $this->cookieJar->serializeToHttpRequest($this->parsedURL['path'], + $this->parsedURL['host']); } foreach($this->reqHeaders as $name => $value) { $list[] = "$name: $value"; @@ -553,6 +555,12 @@ class CookieJar { $attr[strtolower( $parts[0] )] = true; } } + + if( !isset( $attr['domain'] ) ) { + $attr['domain'] = $domain; + } else { + /* FIXME: Check that domain is valid */ + } $this->setCookie( $name, $value, $attr ); } } diff --git a/tests/MediaWikiAPITest.php b/tests/MediaWikiAPITest.php new file mode 100644 index 0000000000..95ca074d5e --- /dev/null +++ b/tests/MediaWikiAPITest.php @@ -0,0 +1,74 @@ +assertNotType("bool", $sxe); + $this->assertThat($sxe, $this->isInstanceOf("SimpleXMLElement")); + } + + function testApiLoginNoName() { + $resp = Http::post(self::$apiUrl."?action=login&format=xml", + array("postData" => array( + "lgname" => "", + "lgpassword" => self::$passWord))); + libxml_use_internal_errors(true); + $sxe = simplexml_load_string($resp); + $this->assertNotType("bool", $sxe); + $this->assertThat($sxe, $this->isInstanceOf("SimpleXMLElement")); + $a = $sxe->login[0]->attributes()->result; + $this->assertEquals( ' result="NoName"', $a->asXML() ); + } + + function testApiLoginBadPass() { + $resp = Http::post(self::$apiUrl."?action=login&format=xml", + array("postData" => array( + "lgname" => self::$userName, + "lgpassword" => "bad"))); + libxml_use_internal_errors(true); + $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() ); + } + + function testApiLoginGoodPass() { + $resp = Http::post(self::$apiUrl."?action=login&format=xml", + array("postData" => array( + "lgname" => self::$userName, + "lgpassword" => self::$passWord))); + libxml_use_internal_errors(true); + $sxe = simplexml_load_string($resp); + $this->assertNotType("bool", $sxe); + $this->assertThat($sxe, $this->isInstanceOf("SimpleXMLElement")); + $a = $sxe->login[0]->attributes()->result; + $this->assertEquals( ' result="Success"', $a->asXML() ); + } + + function testApiGotCookie() { + global $wgScriptPath, $wgServerName; + + $req = HttpRequest::factory(self::$apiUrl."?action=login&format=xml", + array("method" => "POST", + "postData" => array( + "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) ); + } +} diff --git a/tests/MediaWikiAPI_TestCase.php b/tests/MediaWikiAPI_TestCase.php new file mode 100644 index 0000000000..e00e79b17a --- /dev/null +++ b/tests/MediaWikiAPI_TestCase.php @@ -0,0 +1,42 @@ +markTestIncomplete('This test needs $wgServerName and $wgServer to '. + 'be set in LocalSettings.php'); + } + self::$apiUrl = $wgServer.$wgScriptPath."/api".$wgScriptExtension; + + $wgMemc = new FakeMemCachedClient; + $wgContLang = Language::factory( 'en' ); + $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' ); + self::setupUser(); + } + + static function setupUser() { + if ( self::$user == NULL ) { + self::$userName = "Useruser"; + self::$passWord = User::randomPassword(); + + self::$user = User::newFromName(self::$userName); + if ( !self::$user->getID() ) { + self::$user = User::createNew(self::$userName, array( + "password" => self::$passWord, + "email" => "test@example.com", + "real_name" => "Test User")); + } else { + self::$user->setPassword(self::$passWord); + } + self::$user->saveSettings(); + } + } +} -- 2.20.1