diff options
Diffstat (limited to 'tests/phpunit')
4 files changed, 106 insertions, 13 deletions
diff --git a/tests/phpunit/includes/Storage/PageUpdaterTest.php b/tests/phpunit/includes/Storage/PageUpdaterTest.php index 8ebdea1b7902..3079274e6e1d 100644 --- a/tests/phpunit/includes/Storage/PageUpdaterTest.php +++ b/tests/phpunit/includes/Storage/PageUpdaterTest.php @@ -1043,4 +1043,77 @@ class PageUpdaterTest extends MediaWikiIntegrationTestCase { $this->assertSame( $page->getCurrentUpdate(), $updater->prepareUpdate() ); } + + /** + * @covers \MediaWiki\Storage\PageUpdater::preventChange + * @covers \MediaWiki\Storage\PageUpdater::doModify + * @covers \MediaWiki\Storage\PageUpdater::isChange + */ + public function testPreventChange_modify() { + $user = $this->getTestUser()->getUser(); + $title = $this->getDummyTitle( __METHOD__ ); + $page = WikiPage::factory( $title ); + $updater = $page->newPageUpdater( $user ); + + // Creation + $summary = CommentStoreComment::newUnsavedComment( 'one' ); + $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) ); + $updater->prepareUpdate(); + $rev = $updater->saveRevision( $summary, EDIT_NEW ); + $this->assertInstanceOf( RevisionRecord::class, $rev ); + + // Null edit + $updater = $page->newPageUpdater( $user ); + $summary = CommentStoreComment::newUnsavedComment( 'one' ); + $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) ); + $updater->prepareUpdate(); + $updater->preventChange(); + $this->assertFalse( $updater->isChange() ); + $rev = $updater->saveRevision( $summary ); + $this->assertNull( $rev ); + + // Prevented edit + $updater = $page->newPageUpdater( $user ); + $summary = CommentStoreComment::newUnsavedComment( 'one' ); + $updater->setContent( SlotRecord::MAIN, new TextContent( 'dolor sit amet' ) ); + $updater->prepareUpdate(); + $updater->preventChange(); + $this->expectException( LogicException::class ); + $updater->saveRevision( $summary ); + } + + /** + * @covers \MediaWiki\Storage\PageUpdater::preventChange + * @covers \MediaWiki\Storage\PageUpdater::doCreate + * @covers \MediaWiki\Storage\PageUpdater::isChange + */ + public function testPreventChange_create() { + $user = $this->getTestUser()->getUser(); + $title = $this->getDummyTitle( __METHOD__ ); + $page = WikiPage::factory( $title ); + + $updater = $page->newPageUpdater( $user ); + $summary = CommentStoreComment::newUnsavedComment( 'one' ); + $updater->setContent( SlotRecord::MAIN, new TextContent( 'Lorem ipsum' ) ); + $updater->prepareUpdate(); + $updater->preventChange(); + $this->assertTrue( $updater->isChange() ); + $this->expectException( LogicException::class ); + $updater->saveRevision( $summary, EDIT_NEW ); + } + + public function testUpdateAuthor() { + $title = $this->getDummyTitle( __METHOD__ ); + $page = WikiPage::factory( $title ); + $user = new User; + $user->setName( 'PageUpdaterTest' ); + $updater = $page->newPageUpdater( $user ); + $summary = CommentStoreComment::newUnsavedComment( 'one' ); + $updater->setContent( SlotRecord::MAIN, new TextContent( '~~~~' ) ); + + $user = User::createNew( $user->getName() ); + $updater->updateAuthor( $user ); + $rev = $updater->saveRevision( $summary, EDIT_NEW ); + $this->assertGreaterThan( 0, $rev->getUser()->getId() ); + } } diff --git a/tests/phpunit/includes/parser/ParserTest.php b/tests/phpunit/includes/parser/ParserTest.php index 50c450f81ba3..3c699ebb3cfa 100644 --- a/tests/phpunit/includes/parser/ParserTest.php +++ b/tests/phpunit/includes/parser/ParserTest.php @@ -5,6 +5,7 @@ use MediaWiki\Http\HttpRequestFactory; use MediaWiki\Page\PageReference; use MediaWiki\Page\PageReferenceValue; use MediaWiki\Preferences\SignatureValidatorFactory; +use MediaWiki\User\UserNameUtils; /** * @covers Parser::__construct @@ -61,7 +62,8 @@ class ParserTest extends MediaWikiIntegrationTestCase { $this->createMock( TitleFormatter::class ), $this->createMock( HttpRequestFactory::class ), $this->createMock( TrackingCategories::class ), - $this->createMock( SignatureValidatorFactory::class ) + $this->createMock( SignatureValidatorFactory::class ), + $this->createMock( UserNameUtils::class ) ]; } diff --git a/tests/phpunit/includes/user/UserGroupManagerTest.php b/tests/phpunit/includes/user/UserGroupManagerTest.php index 2c3905529ff6..ad6be16fbc48 100644 --- a/tests/phpunit/includes/user/UserGroupManagerTest.php +++ b/tests/phpunit/includes/user/UserGroupManagerTest.php @@ -27,6 +27,7 @@ use MediaWiki\Config\ServiceOptions; use MediaWiki\Permissions\SimpleAuthority; use MediaWiki\Session\PHPSessionHandler; use MediaWiki\Session\SessionManager; +use MediaWiki\User\TempUser\RealTempUserConfig; use MediaWiki\User\UserEditTracker; use MediaWiki\User\UserGroupManager; use MediaWiki\User\UserIdentity; @@ -94,6 +95,14 @@ class UserGroupManagerTest extends MediaWikiIntegrationTestCase { $services->getGroupPermissionsLookup(), $services->getJobQueueGroup(), new TestLogger(), + new RealTempUserConfig( [ + 'enabled' => true, + 'actions' => [ 'edit' ], + 'serialProvider' => [ 'type' => 'local' ], + 'serialMapping' => [ 'type' => 'plain-numeric' ], + 'matchPattern' => '*Unregistered $1', + 'genPattern' => '*Unregistered $1' + ] ), $callback ? [ $callback ] : [] ); } @@ -163,13 +172,13 @@ class UserGroupManagerTest extends MediaWikiIntegrationTestCase { $manager = $this->getManager(); $user = $this->getTestUser( 'unittesters' )->getUser(); $this->assertArrayEquals( - [ '*', 'user', 'autoconfirmed' ], + [ '*', 'user', 'named', 'autoconfirmed' ], $manager->getUserImplicitGroups( $user ) ); $user = $this->getTestUser( [ 'bureaucrat', 'test' ] )->getUser(); $this->assertArrayEquals( - [ '*', 'user', 'autoconfirmed' ], + [ '*', 'user', 'named', 'autoconfirmed' ], $manager->getUserImplicitGroups( $user ) ); @@ -178,7 +187,7 @@ class UserGroupManagerTest extends MediaWikiIntegrationTestCase { 'added user to group' ); $this->assertArrayEquals( - [ '*', 'user', 'autoconfirmed' ], + [ '*', 'user', 'named', 'autoconfirmed' ], $manager->getUserImplicitGroups( $user ) ); @@ -190,35 +199,42 @@ class UserGroupManagerTest extends MediaWikiIntegrationTestCase { ] ] ); $user = $this->getTestUser()->getUser(); $this->assertArrayEquals( - [ '*', 'user' ], + [ '*', 'user', 'named' ], $manager->getUserImplicitGroups( $user ) ); $this->assertArrayEquals( - [ '*', 'user' ], + [ '*', 'user', 'named' ], $manager->getUserEffectiveGroups( $user ) ); $user->confirmEmail(); $this->assertArrayEquals( - [ '*', 'user', 'dummy' ], + [ '*', 'user', 'named', 'dummy' ], $manager->getUserImplicitGroups( $user, UserGroupManager::READ_NORMAL, true ) ); $this->assertArrayEquals( - [ '*', 'user', 'dummy' ], + [ '*', 'user', 'named', 'dummy' ], $manager->getUserEffectiveGroups( $user ) ); $user = $this->getTestUser( [ 'dummy' ] )->getUser(); $user->confirmEmail(); $this->assertArrayEquals( - [ '*', 'user', 'dummy' ], + [ '*', 'user', 'named', 'dummy' ], + $manager->getUserImplicitGroups( $user ) + ); + + $user = new User; + $user->setName( '*Unregistered 1234' ); + $this->assertArrayEquals( + [ '*', 'user' ], $manager->getUserImplicitGroups( $user ) ); } public function provideGetEffectiveGroups() { - yield [ [], [ '*', 'user', 'autoconfirmed' ] ]; - yield [ [ 'bureaucrat', 'test' ], [ '*', 'user', 'autoconfirmed', 'bureaucrat', 'test' ] ]; - yield [ [ 'autoconfirmed', 'test' ], [ '*', 'user', 'autoconfirmed', 'test' ] ]; + yield [ [], [ '*', 'user', 'named', 'autoconfirmed' ] ]; + yield [ [ 'bureaucrat', 'test' ], [ '*', 'user', 'named', 'autoconfirmed', 'bureaucrat', 'test' ] ]; + yield [ [ 'autoconfirmed', 'test' ], [ '*', 'user', 'named', 'autoconfirmed', 'test' ] ]; } /** diff --git a/tests/phpunit/unit/includes/parser/ParserFactoryTest.php b/tests/phpunit/unit/includes/parser/ParserFactoryTest.php index 088960dfcf1f..d5a470f01330 100644 --- a/tests/phpunit/unit/includes/parser/ParserFactoryTest.php +++ b/tests/phpunit/unit/includes/parser/ParserFactoryTest.php @@ -9,6 +9,7 @@ use MediaWiki\Preferences\SignatureValidatorFactory; use MediaWiki\SpecialPage\SpecialPageFactory; use MediaWiki\Tidy\TidyDriverBase; use MediaWiki\User\UserFactory; +use MediaWiki\User\UserNameUtils; use MediaWiki\User\UserOptionsLookup; use Wikimedia\TestingAccessWrapper; @@ -66,7 +67,8 @@ class ParserFactoryTest extends MediaWikiUnitTestCase { $this->createNoOpMock( TitleFormatter::class ), $this->createNoOpMock( HttpRequestFactory::class ), $this->createNoOpMock( TrackingCategories::class ), - $this->createNoOpMock( SignatureValidatorFactory::class ) + $this->createNoOpMock( SignatureValidatorFactory::class ), + $this->createNoOpMock( UserNameUtils::class ) ); return $factory; } |