From d3074848e1cd8a5e97dd0b48e31bb4d50609754f Mon Sep 17 00:00:00 2001 From: Amir Sarabadani Date: Tue, 4 Sep 2018 21:50:46 +0200 Subject: [PATCH] Update API tests to comply with the new backend for change tags Bug: T194162 Change-Id: I35f6e36f988a9483dcb624c39e3f0cc969724fdf --- tests/phpunit/includes/api/ApiBlockTest.php | 25 +++++++++++ tests/phpunit/includes/api/ApiDeleteTest.php | 43 +++++++++++++++++++ .../phpunit/includes/api/ApiEditPageTest.php | 29 +++++++++++++ .../includes/api/ApiUserrightsTest.php | 35 +++++++++++++++ 4 files changed, 132 insertions(+) diff --git a/tests/phpunit/includes/api/ApiBlockTest.php b/tests/phpunit/includes/api/ApiBlockTest.php index 65adedcff8..9980f3a259 100644 --- a/tests/phpunit/includes/api/ApiBlockTest.php +++ b/tests/phpunit/includes/api/ApiBlockTest.php @@ -12,6 +12,10 @@ class ApiBlockTest extends ApiTestCase { protected function setUp() { parent::setUp(); + $this->tablesUsed = array_merge( + $this->tablesUsed, + [ 'change_tag', 'change_tag_def', 'logging' ] + ); $this->mUser = $this->getMutableTestUser()->getUser(); } @@ -120,6 +124,7 @@ class ApiBlockTest extends ApiTestCase { } public function testBlockWithTag() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH ); ChangeTags::defineTag( 'custom tag' ); $this->doBlock( [ 'tags' => 'custom tag' ] ); @@ -135,6 +140,26 @@ class ApiBlockTest extends ApiTestCase { ) ); } + public function testBlockWithTagNewBackend() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW ); + ChangeTags::defineTag( 'custom tag' ); + + $this->doBlock( [ 'tags' => 'custom tag' ] ); + + $dbw = wfGetDB( DB_MASTER ); + $this->assertSame( 1, (int)$dbw->selectField( + [ 'change_tag', 'logging', 'change_tag_def' ], + 'COUNT(*)', + [ 'log_type' => 'block', 'ctd_name' => 'custom tag' ], + __METHOD__, + [], + [ + 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ], + 'change_tag_def' => [ 'INNER JOIN', 'ctd_id = ct_tag_id' ], + ] + ) ); + } + public function testBlockWithProhibitedTag() { $this->setExpectedException( ApiUsageException::class, 'You do not have permission to apply change tags along with your changes.' ); diff --git a/tests/phpunit/includes/api/ApiDeleteTest.php b/tests/phpunit/includes/api/ApiDeleteTest.php index 0f2bcc6145..f2db1b2a86 100644 --- a/tests/phpunit/includes/api/ApiDeleteTest.php +++ b/tests/phpunit/includes/api/ApiDeleteTest.php @@ -12,6 +12,15 @@ * @covers ApiDelete */ class ApiDeleteTest extends ApiTestCase { + + protected function setUp() { + parent::setUp(); + $this->tablesUsed = array_merge( + $this->tablesUsed, + [ 'change_tag', 'change_tag_def', 'logging' ] + ); + } + public function testDelete() { $name = 'Help:' . ucfirst( __FUNCTION__ ); @@ -65,6 +74,7 @@ class ApiDeleteTest extends ApiTestCase { } public function testDeleteWithTag() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH ); $name = 'Help:' . ucfirst( __FUNCTION__ ); ChangeTags::defineTag( 'custom tag' ); @@ -93,6 +103,39 @@ class ApiDeleteTest extends ApiTestCase { ) ); } + public function testDeleteWithTagNewBackend() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW ); + $name = 'Help:' . ucfirst( __FUNCTION__ ); + + ChangeTags::defineTag( 'custom tag' ); + + $this->editPage( $name, 'Some text' ); + + $this->doApiRequestWithToken( [ + 'action' => 'delete', + 'title' => $name, + 'tags' => 'custom tag', + ] ); + + $this->assertFalse( Title::newFromText( $name )->exists() ); + + $dbw = wfGetDB( DB_MASTER ); + $this->assertSame( 'custom tag', $dbw->selectField( + [ 'change_tag', 'logging', 'change_tag_def' ], + 'ctd_name', + [ + 'log_namespace' => NS_HELP, + 'log_title' => ucfirst( __FUNCTION__ ), + ], + __METHOD__, + [], + [ + 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ], + 'change_tag_def' => [ 'INNER JOIN', 'ctd_id = ct_tag_id' ] + ] + ) ); + } + public function testDeleteWithoutTagPermission() { $this->setExpectedException( ApiUsageException::class, 'You do not have permission to apply change tags along with your changes.' ); diff --git a/tests/phpunit/includes/api/ApiEditPageTest.php b/tests/phpunit/includes/api/ApiEditPageTest.php index 852812bef5..847316a236 100644 --- a/tests/phpunit/includes/api/ApiEditPageTest.php +++ b/tests/phpunit/includes/api/ApiEditPageTest.php @@ -33,6 +33,10 @@ class ApiEditPageTest extends ApiTestCase { 'testing-nontext' => 'DummyNonTextContentHandler', 'testing-serialize-error' => 'DummySerializeErrorContentHandler', ] ); + $this->tablesUsed = array_merge( + $this->tablesUsed, + [ 'change_tag', 'change_tag_def', 'logging' ] + ); } public function testEdit() { @@ -1328,6 +1332,7 @@ class ApiEditPageTest extends ApiTestCase { } public function testEditWithTag() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH ); $name = 'Help:' . ucfirst( __FUNCTION__ ); ChangeTags::defineTag( 'custom tag' ); @@ -1344,6 +1349,30 @@ class ApiEditPageTest extends ApiTestCase { 'change_tag', 'ct_tag', [ 'ct_rev_id' => $revId ], __METHOD__ ) ); } + public function testEditWithTagNewBackend() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW ); + $name = 'Help:' . ucfirst( __FUNCTION__ ); + + ChangeTags::defineTag( 'custom tag' ); + + $revId = $this->doApiRequestWithToken( [ + 'action' => 'edit', + 'title' => $name, + 'text' => 'Some text', + 'tags' => 'custom tag', + ] )[0]['edit']['newrevid']; + + $dbw = wfGetDB( DB_MASTER ); + $this->assertSame( 'custom tag', $dbw->selectField( + [ 'change_tag', 'change_tag_def' ], + 'ctd_name', + [ 'ct_rev_id' => $revId ], + __METHOD__, + [ 'change_tag_def' => [ 'INNER JOIN', 'ctd_id = ct_tag_id' ] ] + ) + ); + } + public function testEditWithoutTagPermission() { $name = 'Help:' . ucfirst( __FUNCTION__ ); diff --git a/tests/phpunit/includes/api/ApiUserrightsTest.php b/tests/phpunit/includes/api/ApiUserrightsTest.php index 0229e7678a..c8ecda2173 100644 --- a/tests/phpunit/includes/api/ApiUserrightsTest.php +++ b/tests/phpunit/includes/api/ApiUserrightsTest.php @@ -8,6 +8,15 @@ * @covers ApiUserrights */ class ApiUserrightsTest extends ApiTestCase { + + protected function setUp() { + parent::setUp(); + $this->tablesUsed = array_merge( + $this->tablesUsed, + [ 'change_tag', 'change_tag_def', 'logging' ] + ); + } + /** * Unsets $wgGroupPermissions['bureaucrat']['userrights'], and sets * $wgAddGroups['bureaucrat'] and $wgRemoveGroups['bureaucrat'] to the @@ -183,6 +192,7 @@ class ApiUserrightsTest extends ApiTestCase { } public function testWithTag() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH ); ChangeTags::defineTag( 'custom tag' ); $user = $this->getMutableTestUser()->getUser(); @@ -205,6 +215,31 @@ class ApiUserrightsTest extends ApiTestCase { ); } + public function testWithTagNewBackend() { + $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW ); + ChangeTags::defineTag( 'custom tag' ); + + $user = $this->getMutableTestUser()->getUser(); + + $this->doSuccessfulRightsChange( 'sysop', [ 'tags' => 'custom tag' ], $user ); + + $dbr = wfGetDB( DB_REPLICA ); + $this->assertSame( + 'custom tag', + $dbr->selectField( + [ 'change_tag', 'logging', 'change_tag_def' ], + 'ctd_name', + [ + 'ct_log_id = log_id', + 'log_namespace' => NS_USER, + 'log_title' => strtr( $user->getName(), ' ', '_' ) + ], + __METHOD__, + [ 'change_tag_def' => [ 'INNER JOIN', 'ctd_id = ct_tag_id' ] ] + ) + ); + } + public function testWithoutTagPermission() { global $wgGroupPermissions; -- 2.20.1