MediaWiki
REL1_20
|
00001 <?php 00002 00003 abstract class ApiTestCase extends MediaWikiLangTestCase { 00004 protected static $apiUrl; 00005 00009 protected $apiContext; 00010 00011 function setUp() { 00012 global $wgContLang, $wgAuth, $wgMemc, $wgRequest, $wgUser, $wgServer; 00013 00014 parent::setUp(); 00015 self::$apiUrl = $wgServer . wfScript( 'api' ); 00016 $wgMemc = new EmptyBagOStuff(); 00017 $wgContLang = Language::factory( 'en' ); 00018 $wgAuth = new StubObject( 'wgAuth', 'AuthPlugin' ); 00019 $wgRequest = new FauxRequest( array() ); 00020 00021 self::$users = array( 00022 'sysop' => new TestUser( 00023 'Apitestsysop', 00024 'Api Test Sysop', 00025 '[email protected]', 00026 array( 'sysop' ) 00027 ), 00028 'uploader' => new TestUser( 00029 'Apitestuser', 00030 'Api Test User', 00031 '[email protected]', 00032 array() 00033 ) 00034 ); 00035 00036 $wgUser = self::$users['sysop']->user; 00037 00038 $this->apiContext = new ApiTestContext(); 00039 00040 } 00041 00042 protected function doApiRequest( Array $params, Array $session = null, $appendModule = false, User $user = null ) { 00043 global $wgRequest, $wgUser; 00044 00045 if ( is_null( $session ) ) { 00046 # re-use existing global session by default 00047 $session = $wgRequest->getSessionArray(); 00048 } 00049 00050 # set up global environment 00051 if ( $user ) { 00052 $wgUser = $user; 00053 } 00054 00055 $wgRequest = new FauxRequest( $params, true, $session ); 00056 RequestContext::getMain()->setRequest( $wgRequest ); 00057 00058 # set up local environment 00059 $context = $this->apiContext->newTestContext( $wgRequest, $wgUser ); 00060 00061 $module = new ApiMain( $context, true ); 00062 00063 # run it! 00064 $module->execute(); 00065 00066 # construct result 00067 $results = array( 00068 $module->getResultData(), 00069 $context->getRequest(), 00070 $context->getRequest()->getSessionArray() 00071 ); 00072 if( $appendModule ) { 00073 $results[] = $module; 00074 } 00075 00076 return $results; 00077 } 00078 00087 protected function doApiRequestWithToken( Array $params, Array $session = null, User $user = null ) { 00088 global $wgRequest; 00089 00090 if ( $session === null ) { 00091 $session = $wgRequest->getSessionArray(); 00092 } 00093 00094 if ( $session['wsToken'] ) { 00095 // add edit token to fake session 00096 $session['wsEditToken'] = $session['wsToken']; 00097 // add token to request parameters 00098 $params['token'] = md5( $session['wsToken'] ) . User::EDIT_TOKEN_SUFFIX; 00099 return $this->doApiRequest( $params, $session, false, $user ); 00100 } else { 00101 throw new Exception( "request data not in right format" ); 00102 } 00103 } 00104 00105 protected function doLogin() { 00106 $data = $this->doApiRequest( array( 00107 'action' => 'login', 00108 'lgname' => self::$users['sysop']->username, 00109 'lgpassword' => self::$users['sysop']->password ) ); 00110 00111 $token = $data[0]['login']['token']; 00112 00113 $data = $this->doApiRequest( array( 00114 'action' => 'login', 00115 'lgtoken' => $token, 00116 'lgname' => self::$users['sysop']->username, 00117 'lgpassword' => self::$users['sysop']->password 00118 ), $data[2] ); 00119 00120 return $data; 00121 } 00122 00123 protected function getTokenList( $user, $session = null ) { 00124 $data = $this->doApiRequest( array( 00125 'action' => 'query', 00126 'titles' => 'Main Page', 00127 'intoken' => 'edit|delete|protect|move|block|unblock|watch', 00128 'prop' => 'info' ), $session, false, $user->user ); 00129 return $data; 00130 } 00131 } 00132 00133 class UserWrapper { 00134 public $userName, $password, $user; 00135 00136 public function __construct( $userName, $password, $group = '' ) { 00137 $this->userName = $userName; 00138 $this->password = $password; 00139 00140 $this->user = User::newFromName( $this->userName ); 00141 if ( !$this->user->getID() ) { 00142 $this->user = User::createNew( $this->userName, array( 00143 "email" => "[email protected]", 00144 "real_name" => "Test User" ) ); 00145 } 00146 $this->user->setPassword( $this->password ); 00147 00148 if ( $group !== '' ) { 00149 $this->user->addGroup( $group ); 00150 } 00151 $this->user->saveSettings(); 00152 } 00153 } 00154 00155 class MockApi extends ApiBase { 00156 public function execute() { } 00157 public function getVersion() { } 00158 00159 public function __construct() { } 00160 00161 public function getAllowedParams() { 00162 return array( 00163 'filename' => null, 00164 'enablechunks' => false, 00165 'sessionkey' => null, 00166 ); 00167 } 00168 } 00169 00170 class ApiTestContext extends RequestContext { 00171 00179 public function newTestContext( WebRequest $request, User $user = null ) { 00180 $context = new DerivativeContext( $this ); 00181 $context->setRequest( $request ); 00182 if ( $user !== null ) { 00183 $context->setUser( $user ); 00184 } 00185 return $context; 00186 } 00187 }