Merge "Drop cache interwiki"
[mediawiki.git] / tests / phpunit / includes / specials / SpecialMuteTest.php
blob573d2b065b6b3642e8bb938886c35107009cac05
1 <?php
3 use MediaWiki\HookContainer\HookContainer;
4 use MediaWiki\MainConfigNames;
5 use MediaWiki\Request\FauxRequest;
6 use MediaWiki\Specials\SpecialMute;
7 use MediaWiki\User\Options\UserOptionsManager;
9 /**
10 * @group SpecialPage
11 * @group Database
12 * @covers \MediaWiki\Specials\SpecialMute
14 class SpecialMuteTest extends SpecialPageTestBase {
16 /** @var UserOptionsManager */
17 private $userOptionsManager;
19 protected function setUp(): void {
20 parent::setUp();
22 $this->userOptionsManager = $this->getServiceContainer()->getUserOptionsManager();
23 $this->overrideConfigValue( MainConfigNames::EnableUserEmailMuteList, true );
26 /**
27 * @inheritDoc
29 protected function newSpecialPage() {
30 return new SpecialMute(
31 $this->getServiceContainer()->getCentralIdLookupFactory()->getLookup( 'local' ),
32 $this->userOptionsManager,
33 $this->getServiceContainer()->getUserIdentityLookup(),
34 $this->getServiceContainer()->getUserIdentityUtils()
38 /**
39 * @covers \MediaWiki\Specials\SpecialMute::execute
41 public function testInvalidTarget() {
42 $user = $this->getTestUser()->getUser();
43 $this->expectException( ErrorPageError::class );
44 $this->expectExceptionMessage( "username requested could not be found" );
45 $this->executeSpecialPage(
46 'InvalidUser', null, 'qqx', $user
50 /**
51 * @covers \MediaWiki\Specials\SpecialMute::execute
53 public function testEmailBlacklistNotEnabled() {
54 $this->setTemporaryHook(
55 'SpecialMuteModifyFormFields',
56 HookContainer::NOOP
59 $this->overrideConfigValue( MainConfigNames::EnableUserEmailMuteList, false );
61 $user = $this->getTestUser()->getUser();
62 $this->expectException( ErrorPageError::class );
63 $this->expectExceptionMessage( "Mute features are unavailable" );
64 $this->executeSpecialPage(
65 $user->getName(), null, 'qqx', $user
69 /**
70 * @covers \MediaWiki\Specials\SpecialMute::execute
72 public function testUserNotLoggedIn() {
73 $this->expectException( UserNotLoggedIn::class );
74 $this->executeSpecialPage( 'TestUser' );
77 public function testUserEmailNotConfirmed() {
78 $targetUser = $this->getTestUser()->getUser();
80 $loggedInUser = $this->getMutableTestUser()->getUser();
81 $this->userOptionsManager->setOption( $loggedInUser, 'email-blacklist', "999" );
82 $loggedInUser->invalidateEmail();
83 $loggedInUser->saveSettings();
85 $this->expectExceptionMessage( wfMessage( 'specialmute-error-no-email-set' ) );
87 $fauxRequest = new FauxRequest( [ 'wpemail-blacklist' => true ], true );
88 $this->executeSpecialPage( $targetUser->getName(), $fauxRequest, 'qqx', $loggedInUser );
91 /**
92 * @covers \MediaWiki\Specials\SpecialMute::execute
94 public function testMuteAddsUserToEmailBlacklist() {
95 $targetUser = $this->getTestUser()->getUser();
97 $loggedInUser = $this->getMutableTestUser()->getUser();
98 $this->userOptionsManager->setOption( $loggedInUser, 'email-blacklist', "999" );
99 $loggedInUser->confirmEmail();
100 $loggedInUser->saveSettings();
102 $fauxRequest = new FauxRequest( [ 'wpemail-blacklist' => true ], true );
103 [ $html, ] = $this->executeSpecialPage(
104 $targetUser->getName(), $fauxRequest, 'qqx', $loggedInUser
107 $this->assertStringContainsString( 'specialmute-success', $html );
108 $this->assertEquals(
109 "999\n" . $targetUser->getId(),
110 $this->userOptionsManager->getOption( $loggedInUser, 'email-blacklist' )
115 * @covers \MediaWiki\Specials\SpecialMute::execute
117 public function testUnmuteRemovesUserFromEmailBlacklist() {
118 $targetUser = $this->getTestUser()->getUser();
120 $loggedInUser = $this->getMutableTestUser()->getUser();
121 $this->userOptionsManager->setOption( $loggedInUser, 'email-blacklist', "999\n" . $targetUser->getId() );
122 $loggedInUser->confirmEmail();
123 $loggedInUser->saveSettings();
125 $fauxRequest = new FauxRequest( [ 'wpemail-blacklist' => false ], true );
126 [ $html, ] = $this->executeSpecialPage(
127 $targetUser->getName(), $fauxRequest, 'qqx', $loggedInUser
130 $this->assertStringContainsString( 'specialmute-success', $html );
131 $this->assertSame( "999", $this->userOptionsManager->getOption( $loggedInUser, 'email-blacklist' ) );