From 4129c7551ef3d3aa21925f25797314aabe063da8 Mon Sep 17 00:00:00 2001 From: Petr Pchelko Date: Thu, 29 Aug 2019 16:11:04 -0700 Subject: [PATCH] Rework ApiUploadTest Bug: T28169 Change-Id: I923bf82d07db0efce1d0d14cf04e15bb58472f59 --- tests/common/TestsAutoLoader.php | 1 - .../includes/api/ApiTestCaseUpload.php | 7 - tests/phpunit/includes/api/ApiUploadTest.php | 576 +++++------------- .../specials/SpecialWatchlistTest.php | 2 +- 4 files changed, 154 insertions(+), 432 deletions(-) delete mode 100644 tests/phpunit/includes/api/ApiTestCaseUpload.php diff --git a/tests/common/TestsAutoLoader.php b/tests/common/TestsAutoLoader.php index 6cd7811ce0..00ff2c91fd 100644 --- a/tests/common/TestsAutoLoader.php +++ b/tests/common/TestsAutoLoader.php @@ -87,7 +87,6 @@ $wgAutoloadClasses += [ 'ApiQueryTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryTestBase.php", 'ApiQueryContinueTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryContinueTestBase.php", 'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php", - 'ApiTestCaseUpload' => "$testDir/phpunit/includes/api/ApiTestCaseUpload.php", 'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestContext.php", 'ApiUploadTestCase' => "$testDir/phpunit/includes/api/ApiUploadTestCase.php", 'MockApi' => "$testDir/phpunit/includes/api/MockApi.php", diff --git a/tests/phpunit/includes/api/ApiTestCaseUpload.php b/tests/phpunit/includes/api/ApiTestCaseUpload.php deleted file mode 100644 index a4ff1f0e90..0000000000 --- a/tests/phpunit/includes/api/ApiTestCaseUpload.php +++ /dev/null @@ -1,7 +0,0 @@ -getUser()->getName(); - $password = $user->getPassword(); - - $params = [ - 'action' => 'login', - 'lgname' => $userName, - 'lgpassword' => $password - ]; - list( $result, , $session ) = $this->doApiRequest( $params ); - $this->assertArrayHasKey( "login", $result ); - $this->assertArrayHasKey( "result", $result['login'] ); - $this->assertEquals( "NeedToken", $result['login']['result'] ); - $token = $result['login']['token']; - - $params = [ - 'action' => 'login', - 'lgtoken' => $token, - 'lgname' => $userName, - 'lgpassword' => $password - ]; - list( $result, , $session ) = $this->doApiRequest( $params, $session ); - $this->assertArrayHasKey( "login", $result ); - $this->assertArrayHasKey( "result", $result['login'] ); - $this->assertEquals( "Success", $result['login']['result'] ); - - $this->assertNotEmpty( $session, 'API Login must return a session' ); - - return $session; + private function filePath( $fileName ) { + return __DIR__ . '/../../data/media/' . $fileName; } - /** - * @depends testLogin - */ - public function testUploadRequiresToken( $session ) { - $exception = false; - try { - $this->doApiRequest( [ - 'action' => 'upload' - ] ); - } catch ( ApiUsageException $e ) { - $exception = true; - $this->assertContains( 'The "token" parameter must be set', $e->getMessage() ); - } - $this->assertTrue( $exception, "Got exception" ); + public function setUp() { + parent::setUp(); + $this->tablesUsed[] = 'watchlist'; // This test might interfere with watchlists test. + $this->tablesUsed = array_merge( $this->tablesUsed, LocalFile::getQueryInfo()['tables'] ); + $this->setService( 'RepoGroup', new RepoGroup( + [ + 'class' => LocalRepo::class, + 'name' => 'temp', + 'backend' => new FSFileBackend( [ + 'name' => 'temp-backend', + 'wikiId' => wfWikiID(), + 'basePath' => $this->getNewTempDirectory() + ] ) + ], + [], + null + ) ); + $this->resetServices(); } - /** - * @depends testLogin - */ - public function testUploadMissingParams( $session ) { - $exception = false; - try { - $this->doApiRequestWithToken( [ - 'action' => 'upload', - ], $session, self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - $this->assertEquals( - 'One of the parameters "filekey", "file" and "url" is required.', - $e->getMessage() - ); - } - $this->assertTrue( $exception, "Got exception" ); + public function testUploadRequiresToken() { + $this->setExpectedException( + ApiUsageException::class, + 'The "token" parameter must be set' + ); + $this->doApiRequest( [ + 'action' => 'upload' + ] ); } - /** - * @depends testLogin - */ - public function testUpload( $session ) { - $extension = 'png'; - $mimeType = 'image/png'; - - try { - $randomImageGenerator = new RandomImageGenerator(); - $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() ); - } catch ( Exception $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - - /** @var array $filePaths */ - $filePath = $filePaths[0]; - $fileSize = filesize( $filePath ); - $fileName = basename( $filePath ); - - $this->deleteFileByFileName( $fileName ); - $this->deleteFileByContent( $filePath ); + public function testUploadMissingParams() { + $this->setExpectedException( + ApiUsageException::class, + 'One of the parameters "filekey", "file" and "url" is required' + ); + $this->doApiRequestWithToken( [ + 'action' => 'upload', + ], null, self::$users['uploader']->getUser() ); + } - if ( !$this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } + public function testUpload() { + $fileName = 'TestUpload.jpg'; + $mimeType = 'image/jpeg'; + $filePath = $this->filePath( 'yuv420.jpg' ); - $params = [ + $this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ); + list( $result ) = $this->doApiRequestWithToken( [ 'action' => 'upload', 'filename' => $fileName, 'file' => 'dummy content', 'comment' => 'dummy comment', 'text' => "This is the page text for $fileName", - ]; + ], null, self::$users['uploader']->getUser() ); - $exception = false; - try { - list( $result, , ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertEquals( $fileSize, (int)$result['upload']['imageinfo']['size'] ); + $this->assertSame( filesize( $filePath ), (int)$result['upload']['imageinfo']['size'] ); $this->assertEquals( $mimeType, $result['upload']['imageinfo']['mime'] ); - $this->assertFalse( $exception ); - - // clean up - $this->deleteFileByFileName( $fileName ); } - /** - * @depends testLogin - */ - public function testUploadZeroLength( $session ) { - $mimeType = 'image/png'; - + public function testUploadZeroLength() { $filePath = $this->getNewTempFile(); - $fileName = "apiTestUploadZeroLength.png"; - - $this->deleteFileByFileName( $fileName ); + $mimeType = 'image/jpeg'; + $fileName = "ApiTestUploadZeroLength.jpg"; - if ( !$this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } + $this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ); - $params = [ + $this->setExpectedException( + ApiUsageException::class, + 'The file you submitted was empty' + ); + $this->doApiRequestWithToken( [ 'action' => 'upload', 'filename' => $fileName, 'file' => 'dummy content', 'comment' => 'dummy comment', 'text' => "This is the page text for $fileName", - ]; - - $exception = false; - try { - $this->doApiRequestWithToken( $params, $session, self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $this->assertContains( 'The file you submitted was empty', $e->getMessage() ); - $exception = true; - } - $this->assertTrue( $exception ); - - // clean up - $this->deleteFileByFileName( $fileName ); + ], null, self::$users['uploader']->getUser() ); } - /** - * @depends testLogin - */ - public function testUploadSameFileName( $session ) { - $extension = 'png'; - $mimeType = 'image/png'; - - try { - $randomImageGenerator = new RandomImageGenerator(); - $filePaths = $randomImageGenerator->writeImages( 2, $extension, $this->getNewTempDirectory() ); - } catch ( Exception $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - - // we'll reuse this filename - /** @var array $filePaths */ - $fileName = basename( $filePaths[0] ); - - // clear any other files with the same name - $this->deleteFileByFileName( $fileName ); + public function testUploadSameFileName() { + $fileName = 'TestUploadSameFileName.jpg'; + $mimeType = 'image/jpeg'; + $filePaths = [ + $this->filePath( 'yuv420.jpg' ), + $this->filePath( 'yuv444.jpg' ) + ]; // we reuse these params $params = [ @@ -213,176 +111,78 @@ class ApiUploadTest extends ApiUploadTestCase { // first upload .... should succeed - if ( !$this->fakeUploadFile( 'file', $fileName, $mimeType, $filePaths[0] ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } - - $exception = false; - try { - list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + $this->fakeUploadFile( 'file', $fileName, $mimeType, $filePaths[0] ); + list( $result ) = $this->doApiRequestWithToken( $params, null, + self::$users['uploader']->getUser() ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertFalse( $exception ); // second upload with the same name (but different content) - if ( !$this->fakeUploadFile( 'file', $fileName, $mimeType, $filePaths[1] ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } - - $exception = false; - try { - list( $result, , ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + $this->fakeUploadFile( 'file', $fileName, $mimeType, $filePaths[1] ); + list( $result ) = $this->doApiRequestWithToken( $params, null, + self::$users['uploader']->getUser() ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Warning', $result['upload']['result'] ); - $this->assertTrue( isset( $result['upload']['warnings'] ) ); - $this->assertTrue( isset( $result['upload']['warnings']['exists'] ) ); - $this->assertFalse( $exception ); - - // clean up - $this->deleteFileByFileName( $fileName ); + $this->assertArrayHasKey( 'warnings', $result['upload'] ); + $this->assertArrayHasKey( 'exists', $result['upload']['warnings'] ); } - /** - * @depends testLogin - */ - public function testUploadSameContent( $session ) { - $extension = 'png'; - $mimeType = 'image/png'; - - try { - $randomImageGenerator = new RandomImageGenerator(); - $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() ); - } catch ( Exception $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - - /** @var array $filePaths */ - $fileNames[0] = basename( $filePaths[0] ); - $fileNames[1] = "SameContentAs" . $fileNames[0]; - - // clear any other files with the same name or content - $this->deleteFileByContent( $filePaths[0] ); - $this->deleteFileByFileName( $fileNames[0] ); - $this->deleteFileByFileName( $fileNames[1] ); + public function testUploadSameContent() { + $fileNames = [ 'TestUploadSameContent_1.jpg', 'TestUploadSameContent_2.jpg' ]; + $mimeType = 'image/jpeg'; + $filePath = $this->filePath( 'yuv420.jpg' ); // first upload .... should succeed - - $params = [ + $this->fakeUploadFile( 'file', $fileNames[0], $mimeType, $filePath ); + list( $result ) = $this->doApiRequestWithToken( [ 'action' => 'upload', 'filename' => $fileNames[0], 'file' => 'dummy content', 'comment' => 'dummy comment', - 'text' => "This is the page text for " . $fileNames[0], - ]; - - if ( !$this->fakeUploadFile( 'file', $fileNames[0], $mimeType, $filePaths[0] ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } - - $exception = false; - try { - list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + 'text' => "This is the page text for {$fileNames[0]}", + ], null, self::$users['uploader']->getUser() ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertFalse( $exception ); // second upload with the same content (but different name) + $this->fakeUploadFile( 'file', $fileNames[1], $mimeType, $filePath ); + list( $result ) = $this->doApiRequestWithToken( [ + 'action' => 'upload', + 'filename' => $fileNames[1], + 'file' => 'dummy content', + 'comment' => 'dummy comment', + 'text' => "This is the page text for {$fileNames[1]}", + ], null, self::$users['uploader']->getUser() ); - if ( !$this->fakeUploadFile( 'file', $fileNames[1], $mimeType, $filePaths[0] ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } - - $params = [ - 'action' => 'upload', - 'filename' => $fileNames[1], - 'file' => 'dummy content', - 'comment' => 'dummy comment', - 'text' => "This is the page text for " . $fileNames[1], - ]; - - $exception = false; - try { - list( $result ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Warning', $result['upload']['result'] ); - $this->assertTrue( isset( $result['upload']['warnings'] ) ); - $this->assertTrue( isset( $result['upload']['warnings']['duplicate'] ) ); - $this->assertFalse( $exception ); - - // clean up - $this->deleteFileByFileName( $fileNames[0] ); - $this->deleteFileByFileName( $fileNames[1] ); + $this->assertArrayHasKey( 'warnings', $result['upload'] ); + $this->assertArrayHasKey( 'duplicate', $result['upload']['warnings'] ); + $this->assertArrayEquals( [ $fileNames[0] ], $result['upload']['warnings']['duplicate'] ); + $this->assertArrayNotHasKey( 'exists', $result['upload']['warnings'] ); } - /** - * @depends testLogin - */ - public function testUploadStash( $session ) { - $this->setMwGlobals( [ - 'wgUser' => self::$users['uploader']->getUser(), // @todo FIXME: still used somewhere - ] ); - - $extension = 'png'; - $mimeType = 'image/png'; - - try { - $randomImageGenerator = new RandomImageGenerator(); - $filePaths = $randomImageGenerator->writeImages( 1, $extension, $this->getNewTempDirectory() ); - } catch ( Exception $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - - /** @var array $filePaths */ - $filePath = $filePaths[0]; - $fileSize = filesize( $filePath ); - $fileName = basename( $filePath ); - - $this->deleteFileByFileName( $fileName ); - $this->deleteFileByContent( $filePath ); - - if ( !$this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ) ) { - $this->markTestIncomplete( "Couldn't upload file!\n" ); - } + public function testUploadStash() { + $fileName = 'TestUploadStash.jpg'; + $mimeType = 'image/jpeg'; + $filePath = $this->filePath( 'yuv420.jpg' ); - $params = [ + $this->fakeUploadFile( 'file', $fileName, $mimeType, $filePath ); + list( $result ) = $this->doApiRequestWithToken( [ 'action' => 'upload', 'stash' => 1, 'filename' => $fileName, 'file' => 'dummy content', 'comment' => 'dummy comment', 'text' => "This is the page text for $fileName", - ]; + ], null, self::$users['uploader']->getUser() ); - $exception = false; - try { - list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); // FIXME: leaks a temporary file - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertFalse( $exception ); - $this->assertTrue( isset( $result['upload'] ) ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertEquals( $fileSize, (int)$result['upload']['imageinfo']['size'] ); + $this->assertSame( filesize( $filePath ), (int)$result['upload']['imageinfo']['size'] ); $this->assertEquals( $mimeType, $result['upload']['imageinfo']['mime'] ); - $this->assertTrue( isset( $result['upload']['filekey'] ) ); + $this->assertArrayHasKey( 'filekey', $result['upload'] ); $this->assertEquals( $result['upload']['sessionkey'], $result['upload']['filekey'] ); $filekey = $result['upload']['filekey']; @@ -390,58 +190,28 @@ class ApiUploadTest extends ApiUploadTestCase { // XXX ...but how to test this, with a fake WebRequest with the session? // now we should try to release the file from stash - $params = [ + $this->clearFakeUploads(); + list( $result ) = $this->doApiRequestWithToken( [ 'action' => 'upload', 'filekey' => $filekey, 'filename' => $fileName, 'comment' => 'dummy comment', 'text' => "This is the page text for $fileName, altered", - ]; - - $this->clearFakeUploads(); - $exception = false; - try { - list( $result ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + ], null, self::$users['uploader']->getUser() ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertFalse( $exception, "No ApiUsageException exception." ); - - // clean up - $this->deleteFileByFileName( $fileName ); } - /** - * @depends testLogin - */ - public function testUploadChunks( $session ) { - $this->setMwGlobals( [ - // @todo FIXME: still used somewhere - 'wgUser' => self::$users['uploader']->getUser(), - ] ); - - $chunkSize = 1048576; - // Download a large image file - // (using RandomImageGenerator for large files is not stable) - // @todo Don't download files from wikimedia.org + public function testUploadChunks() { + $fileName = 'TestUploadChunks.jpg'; $mimeType = 'image/jpeg'; - $url = 'http://upload.wikimedia.org/wikipedia/commons/' - . 'e/ed/Oberaargletscher_from_Oberaar%2C_2010_07.JPG'; - $filePath = $this->getNewTempDirectory() . '/Oberaargletscher_from_Oberaar.jpg'; - try { - copy( $url, $filePath ); - } catch ( Exception $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - + $filePath = $this->filePath( 'yuv420.jpg' ); $fileSize = filesize( $filePath ); - $fileName = basename( $filePath ); + $chunkSize = 20 * 1024; // The file is ~60kB, use 20kB chunks - $this->deleteFileByFileName( $fileName ); - $this->deleteFileByContent( $filePath ); + $this->setMwGlobals( [ + 'wgMinUploadChunkSize' => $chunkSize + ] ); // Base upload params: $params = [ @@ -453,108 +223,68 @@ class ApiUploadTest extends ApiUploadTestCase { ]; // Upload chunks - $chunkSessionKey = false; - $resultOffset = 0; - // Open the file: - Wikimedia\suppressWarnings(); $handle = fopen( $filePath, "r" ); - Wikimedia\restoreWarnings(); - - if ( $handle === false ) { - $this->markTestIncomplete( "could not open file: $filePath" ); - } - + $resultOffset = 0; + $filekey = false; while ( !feof( $handle ) ) { - // Get the current chunk - Wikimedia\suppressWarnings(); $chunkData = fread( $handle, $chunkSize ); - Wikimedia\restoreWarnings(); // Upload the current chunk into the $_FILE object: $this->fakeUploadChunk( 'chunk', 'blob', $mimeType, $chunkData ); - - // Check for chunkSessionKey - if ( !$chunkSessionKey ) { - // Upload fist chunk ( and get the session key ) - try { - list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } + if ( !$filekey ) { + list( $result ) = $this->doApiRequestWithToken( $params, null, + self::$users['uploader']->getUser() ); // Make sure we got a valid chunk continue: - $this->assertTrue( isset( $result['upload'] ) ); - $this->assertTrue( isset( $result['upload']['filekey'] ) ); - // If we don't get a session key mark test incomplete. - if ( !isset( $result['upload']['filekey'] ) ) { - $this->markTestIncomplete( "no filekey provided" ); - } - $chunkSessionKey = $result['upload']['filekey']; + $this->assertArrayHasKey( 'upload', $result ); + $this->assertArrayHasKey( 'filekey', $result['upload'] ); $this->assertEquals( 'Continue', $result['upload']['result'] ); - // First chunk should have chunkSize == offset $this->assertEquals( $chunkSize, $result['upload']['offset'] ); + + $filekey = $result['upload']['filekey']; $resultOffset = $result['upload']['offset']; - continue; - } - // Filekey set to chunk session - $params['filekey'] = $chunkSessionKey; - // Update the offset ( always add chunkSize for subquent chunks - // should be in-sync with $result['upload']['offset'] ) - $params['offset'] += $chunkSize; - // Make sure param offset is insync with resultOffset: - $this->assertEquals( $resultOffset, $params['offset'] ); - // Upload current chunk - try { - list( $result, , $session ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $this->markTestIncomplete( $e->getMessage() ); - } - // Make sure we got a valid chunk continue: - $this->assertTrue( isset( $result['upload'] ) ); - $this->assertTrue( isset( $result['upload']['filekey'] ) ); - - // Check if we were on the last chunk: - if ( $params['offset'] + $chunkSize >= $fileSize ) { - $this->assertEquals( 'Success', $result['upload']['result'] ); - break; } else { - $this->assertEquals( 'Continue', $result['upload']['result'] ); - // update $resultOffset - $resultOffset = $result['upload']['offset']; + // Filekey set to chunk session + $params['filekey'] = $filekey; + // Update the offset ( always add chunkSize for subquent chunks + // should be in-sync with $result['upload']['offset'] ) + $params['offset'] += $chunkSize; + // Make sure param offset is insync with resultOffset: + $this->assertEquals( $resultOffset, $params['offset'] ); + // Upload current chunk + list( $result ) = $this->doApiRequestWithToken( $params, null, + self::$users['uploader']->getUser() ); + // Make sure we got a valid chunk continue: + $this->assertArrayHasKey( 'upload', $result ); + $this->assertArrayHasKey( 'filekey', $result['upload'] ); + + // Check if we were on the last chunk: + if ( $params['offset'] + $chunkSize >= $fileSize ) { + $this->assertEquals( 'Success', $result['upload']['result'] ); + break; + } else { + $this->assertEquals( 'Continue', $result['upload']['result'] ); + $resultOffset = $result['upload']['offset']; + } } } fclose( $handle ); // Check that we got a valid file result: - wfDebug( __METHOD__ - . " hohoh filesize {$fileSize} info {$result['upload']['imageinfo']['size']}\n\n" ); $this->assertEquals( $fileSize, $result['upload']['imageinfo']['size'] ); $this->assertEquals( $mimeType, $result['upload']['imageinfo']['mime'] ); - $this->assertTrue( isset( $result['upload']['filekey'] ) ); + $this->assertArrayHasKey( 'filekey', $result['upload'] ); $filekey = $result['upload']['filekey']; // Now we should try to release the file from stash - $params = [ + $this->clearFakeUploads(); + list( $result ) = $this->doApiRequestWithToken( [ 'action' => 'upload', 'filekey' => $filekey, 'filename' => $fileName, 'comment' => 'dummy comment', 'text' => "This is the page text for $fileName, altered", - ]; - $this->clearFakeUploads(); - $exception = false; - try { - list( $result ) = $this->doApiRequestWithToken( $params, $session, - self::$users['uploader']->getUser() ); - } catch ( ApiUsageException $e ) { - $exception = true; - } - $this->assertTrue( isset( $result['upload'] ) ); + ], null, self::$users['uploader']->getUser() ); + $this->assertArrayHasKey( 'upload', $result ); $this->assertEquals( 'Success', $result['upload']['result'] ); - $this->assertFalse( $exception ); - - // clean up - $this->deleteFileByFileName( $fileName ); } } diff --git a/tests/phpunit/includes/specials/SpecialWatchlistTest.php b/tests/phpunit/includes/specials/SpecialWatchlistTest.php index 642ae3e2de..28e76993b6 100644 --- a/tests/phpunit/includes/specials/SpecialWatchlistTest.php +++ b/tests/phpunit/includes/specials/SpecialWatchlistTest.php @@ -12,7 +12,7 @@ use Wikimedia\TestingAccessWrapper; class SpecialWatchlistTest extends SpecialPageTestBase { public function setUp() { parent::setUp(); - + $this->tablesUsed = [ 'watchlist' ]; $this->setTemporaryHook( 'ChangesListSpecialPageQuery', null -- 2.20.1