29 $user = self::$users[
'uploader'];
30 $userName = $user->getUser()->getName();
31 $password = $user->getPassword();
35 'lgname' => $userName,
36 'lgpassword' => $password
39 $this->assertArrayHasKey(
"login", $result );
40 $this->assertArrayHasKey(
"result", $result[
'login'] );
41 $this->assertEquals(
"NeedToken", $result[
'login'][
'result'] );
42 $token = $result[
'login'][
'token'];
47 'lgname' => $userName,
48 'lgpassword' => $password
51 $this->assertArrayHasKey(
"login", $result );
52 $this->assertArrayHasKey(
"result", $result[
'login'] );
53 $this->assertEquals(
"Success", $result[
'login'][
'result'] );
54 $this->assertArrayHasKey(
'lgtoken', $result[
'login'] );
56 $this->assertNotEmpty( $session,
'API Login must return a session' );
72 $this->assertEquals(
'The "token" parameter must be set',
$e->getMessage() );
74 $this->assertTrue( $exception,
"Got exception" );
85 ], $session, self::$users[
'uploader']->getUser() );
88 $this->assertEquals(
"One of the parameters filekey, file, url is required",
91 $this->assertTrue( $exception,
"Got exception" );
99 $mimeType =
'image/png';
103 $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->
getNewTempDirectory() );
104 }
catch ( Exception
$e ) {
105 $this->markTestIncomplete(
$e->getMessage() );
109 $filePath = $filePaths[0];
110 $fileSize = filesize( $filePath );
111 $fileName = basename( $filePath );
116 if ( !$this->
fakeUploadFile(
'file', $fileName, $mimeType, $filePath ) ) {
117 $this->markTestIncomplete(
"Couldn't upload file!\n" );
121 'action' =>
'upload',
122 'filename' => $fileName,
123 'file' =>
'dummy content',
124 'comment' =>
'dummy comment',
125 'text' =>
"This is the page text for $fileName",
131 self::$users[
'uploader']->getUser() );
135 $this->assertTrue( isset( $result[
'upload'] ) );
136 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
137 $this->assertEquals( $fileSize, (
int)$result[
'upload'][
'imageinfo'][
'size'] );
138 $this->assertEquals( $mimeType, $result[
'upload'][
'imageinfo'][
'mime'] );
139 $this->assertFalse( $exception );
149 $mimeType =
'image/png';
152 $fileName =
"apiTestUploadZeroLength.png";
156 if ( !$this->
fakeUploadFile(
'file', $fileName, $mimeType, $filePath ) ) {
157 $this->markTestIncomplete(
"Couldn't upload file!\n" );
161 'action' =>
'upload',
162 'filename' => $fileName,
163 'file' =>
'dummy content',
164 'comment' =>
'dummy comment',
165 'text' =>
"This is the page text for $fileName",
172 $this->assertContains(
'The file you submitted was empty',
$e->getMessage() );
175 $this->assertTrue( $exception );
186 $mimeType =
'image/png';
190 $filePaths = $randomImageGenerator->writeImages( 2, $extension, $this->
getNewTempDirectory() );
191 }
catch ( Exception
$e ) {
192 $this->markTestIncomplete(
$e->getMessage() );
197 $fileName = basename( $filePaths[0] );
204 'action' =>
'upload',
205 'filename' => $fileName,
206 'file' =>
'dummy content',
207 'comment' =>
'dummy comment',
208 'text' =>
"This is the page text for $fileName",
213 if ( !$this->
fakeUploadFile(
'file', $fileName, $mimeType, $filePaths[0] ) ) {
214 $this->markTestIncomplete(
"Couldn't upload file!\n" );
220 self::$users[
'uploader']->getUser() );
224 $this->assertTrue( isset( $result[
'upload'] ) );
225 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
226 $this->assertFalse( $exception );
230 if ( !$this->
fakeUploadFile(
'file', $fileName, $mimeType, $filePaths[1] ) ) {
231 $this->markTestIncomplete(
"Couldn't upload file!\n" );
237 self::$users[
'uploader']->getUser() );
241 $this->assertTrue( isset( $result[
'upload'] ) );
242 $this->assertEquals(
'Warning', $result[
'upload'][
'result'] );
243 $this->assertTrue( isset( $result[
'upload'][
'warnings'] ) );
244 $this->assertTrue( isset( $result[
'upload'][
'warnings'][
'exists'] ) );
245 $this->assertFalse( $exception );
256 $mimeType =
'image/png';
260 $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->
getNewTempDirectory() );
261 }
catch ( Exception
$e ) {
262 $this->markTestIncomplete(
$e->getMessage() );
266 $fileNames[0] = basename( $filePaths[0] );
267 $fileNames[1] =
"SameContentAs" . $fileNames[0];
277 'action' =>
'upload',
278 'filename' => $fileNames[0],
279 'file' =>
'dummy content',
280 'comment' =>
'dummy comment',
281 'text' =>
"This is the page text for " . $fileNames[0],
284 if ( !$this->
fakeUploadFile(
'file', $fileNames[0], $mimeType, $filePaths[0] ) ) {
285 $this->markTestIncomplete(
"Couldn't upload file!\n" );
291 self::$users[
'uploader']->getUser() );
295 $this->assertTrue( isset( $result[
'upload'] ) );
296 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
297 $this->assertFalse( $exception );
301 if ( !$this->
fakeUploadFile(
'file', $fileNames[1], $mimeType, $filePaths[0] ) ) {
302 $this->markTestIncomplete(
"Couldn't upload file!\n" );
306 'action' =>
'upload',
307 'filename' => $fileNames[1],
308 'file' =>
'dummy content',
309 'comment' =>
'dummy comment',
310 'text' =>
"This is the page text for " . $fileNames[1],
316 self::$users[
'uploader']->getUser() );
320 $this->assertTrue( isset( $result[
'upload'] ) );
321 $this->assertEquals(
'Warning', $result[
'upload'][
'result'] );
322 $this->assertTrue( isset( $result[
'upload'][
'warnings'] ) );
323 $this->assertTrue( isset( $result[
'upload'][
'warnings'][
'duplicate'] ) );
324 $this->assertFalse( $exception );
336 'wgUser' => self::$users[
'uploader']->getUser(),
340 $mimeType =
'image/png';
344 $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->
getNewTempDirectory() );
345 }
catch ( Exception
$e ) {
346 $this->markTestIncomplete(
$e->getMessage() );
350 $filePath = $filePaths[0];
351 $fileSize = filesize( $filePath );
352 $fileName = basename( $filePath );
357 if ( !$this->
fakeUploadFile(
'file', $fileName, $mimeType, $filePath ) ) {
358 $this->markTestIncomplete(
"Couldn't upload file!\n" );
362 'action' =>
'upload',
364 'filename' => $fileName,
365 'file' =>
'dummy content',
366 'comment' =>
'dummy comment',
367 'text' =>
"This is the page text for $fileName",
373 self::$users[
'uploader']->getUser() );
377 $this->assertFalse( $exception );
378 $this->assertTrue( isset( $result[
'upload'] ) );
379 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
380 $this->assertEquals( $fileSize, (
int)$result[
'upload'][
'imageinfo'][
'size'] );
381 $this->assertEquals( $mimeType, $result[
'upload'][
'imageinfo'][
'mime'] );
382 $this->assertTrue( isset( $result[
'upload'][
'filekey'] ) );
383 $this->assertEquals( $result[
'upload'][
'sessionkey'], $result[
'upload'][
'filekey'] );
384 $filekey = $result[
'upload'][
'filekey'];
391 'action' =>
'upload',
392 'filekey' => $filekey,
393 'filename' => $fileName,
394 'comment' =>
'dummy comment',
395 'text' =>
"This is the page text for $fileName, altered",
402 self::$users[
'uploader']->getUser() );
406 $this->assertTrue( isset( $result[
'upload'] ) );
407 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
408 $this->assertFalse( $exception,
"No ApiUsageException exception." );
420 'wgUser' => self::$users[
'uploader']->getUser(),
423 $chunkSize = 1048576;
427 $mimeType =
'image/jpeg';
428 $url =
'http://upload.wikimedia.org/wikipedia/commons/'
429 .
'e/ed/Oberaargletscher_from_Oberaar%2C_2010_07.JPG';
432 copy( $url, $filePath );
433 }
catch ( Exception
$e ) {
434 $this->markTestIncomplete(
$e->getMessage() );
437 $fileSize = filesize( $filePath );
438 $fileName = basename( $filePath );
445 'action' =>
'upload',
447 'filename' => $fileName,
448 'filesize' => $fileSize,
453 $chunkSessionKey =
false;
456 MediaWiki\suppressWarnings();
457 $handle = fopen( $filePath,
"r" );
458 MediaWiki\restoreWarnings();
460 if ( $handle ===
false ) {
461 $this->markTestIncomplete(
"could not open file: $filePath" );
464 while ( !feof( $handle ) ) {
466 MediaWiki\suppressWarnings();
467 $chunkData = fread( $handle, $chunkSize );
468 MediaWiki\restoreWarnings();
474 if ( !$chunkSessionKey ) {
478 self::$users[
'uploader']->getUser() );
480 $this->markTestIncomplete(
$e->getMessage() );
483 $this->assertTrue( isset( $result[
'upload'] ) );
484 $this->assertTrue( isset( $result[
'upload'][
'filekey'] ) );
486 if ( !isset( $result[
'upload'][
'filekey'] ) ) {
487 $this->markTestIncomplete(
"no filekey provided" );
489 $chunkSessionKey = $result[
'upload'][
'filekey'];
490 $this->assertEquals(
'Continue', $result[
'upload'][
'result'] );
492 $this->assertEquals( $chunkSize, $result[
'upload'][
'offset'] );
493 $resultOffset = $result[
'upload'][
'offset'];
497 $params[
'filekey'] = $chunkSessionKey;
500 $params[
'offset'] += $chunkSize;
502 $this->assertEquals( $resultOffset,
$params[
'offset'] );
506 self::$users[
'uploader']->getUser() );
508 $this->markTestIncomplete(
$e->getMessage() );
511 $this->assertTrue( isset( $result[
'upload'] ) );
512 $this->assertTrue( isset( $result[
'upload'][
'filekey'] ) );
515 if (
$params[
'offset'] + $chunkSize >= $fileSize ) {
516 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
519 $this->assertEquals(
'Continue', $result[
'upload'][
'result'] );
521 $resultOffset = $result[
'upload'][
'offset'];
528 .
" hohoh filesize {$fileSize} info {$result['upload']['imageinfo']['size']}\n\n" );
529 $this->assertEquals( $fileSize, $result[
'upload'][
'imageinfo'][
'size'] );
530 $this->assertEquals( $mimeType, $result[
'upload'][
'imageinfo'][
'mime'] );
531 $this->assertTrue( isset( $result[
'upload'][
'filekey'] ) );
532 $filekey = $result[
'upload'][
'filekey'];
536 'action' =>
'upload',
537 'filekey' => $filekey,
538 'filename' => $fileName,
539 'comment' =>
'dummy comment',
540 'text' =>
"This is the page text for $fileName, altered",
546 self::$users[
'uploader']->getUser() );
550 $this->assertTrue( isset( $result[
'upload'] ) );
551 $this->assertEquals(
'Success', $result[
'upload'][
'result'] );
552 $this->assertFalse( $exception );
and give any other recipients of the Program a copy of this License along with the Program You may charge a fee for the physical act of transferring a copy
wfDebug( $text, $dest='all', array $context=[])
Sends a line to the debug log if enabled or, optionally, to a comment in output.
Abstract class to support upload tests.
clearFakeUploads()
Remove traces of previous fake uploads.
deleteFileByFileName( $fileName)
Helper function – remove files and associated articles with a particular filename.
fakeUploadFile( $fieldName, $fileName, $type, $filePath)
Fake an upload by dumping the file into temp space, and adding info to $_FILES.
fakeUploadChunk( $fieldName, $fileName, $type, & $chunkData)
deleteFileByContent( $filePath)
Helper function – given a file on the filesystem, find matching content in the db (and associated art...
doApiRequestWithToken(array $params, array $session=null, User $user=null)
Add an edit token to the API request This is cheating a bit – we grab a token in the correct format a...
doApiRequest(array $params, array $session=null, $appendModule=false, User $user=null)
Does the API request and returns the result.
testUploadZeroLength( $session)
@depends testLogin
testUploadStash( $session)
@depends testLogin
testLogin()
Testing login XXX this is a funny way of getting session context.
testUploadSameContent( $session)
@depends testLogin
testUploadRequiresToken( $session)
@depends testLogin
testUploadMissingParams( $session)
@depends testLogin
testUploadSameFileName( $session)
@depends testLogin
testUpload( $session)
@depends testLogin
testUploadChunks( $session)
@depends testLogin
Exception used to abort API execution with an error.
RandomImageGenerator: does what it says on the tin.
deferred txt A few of the database updates required by various functions here can be deferred until after the result page is displayed to the user For updating the view updating the linked to tables after a etc PHP does not yet have any way to tell the server to actually return and disconnect while still running these but it might have such a feature in the future We handle these by creating a deferred update object and putting those objects on a global list
returning false will NOT prevent logging $e