3 use MediaWiki\Context\RequestContext
;
4 use MediaWiki\Request\FauxRequest
;
5 use MediaWiki\SpecialPage\SpecialPage
;
6 use MediaWiki\Specials\SpecialUserLogout
;
7 use MediaWiki\Tests\User\TempUser\TempUserTestTrait
;
10 * @covers \MediaWiki\Specials\SpecialUserLogout
13 class SpecialUserLogoutTest
extends SpecialPageTestBase
{
15 use TempUserTestTrait
;
18 * Returns a new instance of the special page under test.
22 protected function newSpecialPage() {
23 return new SpecialUserLogout( $this->getServiceContainer()->getTempUserConfig() );
26 public function testUserLogoutComplete() {
27 $oldName = __METHOD__
;
28 $user = new TestUser( $oldName );
30 $session = RequestContext
::getMain()->getRequest()->getSession();
31 $fauxRequest = new FauxRequest(
32 [ 'wpEditToken' => $session->getToken( 'logoutToken' ) ],
33 /* $wasPosted= */ true,
37 $oldNameInHook = null;
38 $this->setTemporaryHook(
40 static function ( $user, $injected_html, $oldName ) use ( &$oldNameInHook ) {
41 $oldNameInHook = $oldName;
45 [ $html ] = $this->executeSpecialPage( '', $fauxRequest, 'qqx', $user->getUser(), true );
46 // Check that the page title and page content are as expected for a normal user logout
47 $this->assertStringContainsString( '(logouttext:', $html );
48 $this->assertStringContainsString( '(userlogout)', $html );
53 'old name in UserLogoutComplete hook was incorrect'
57 public function testExecuteForTemporaryAccount() {
58 $this->enableAutoCreateTempUser();
59 $user = $this->getServiceContainer()->getTempUserCreator()->create( null, new FauxRequest() )->getUser();
61 $session = RequestContext
::getMain()->getRequest()->getSession();
62 $session->setUser( $user );
63 $fauxRequest = new FauxRequest( [ 'wpEditToken' => $session->getToken( 'logoutToken' ) ], true, $session );
65 [ $html ] = $this->executeSpecialPage( '', $fauxRequest, 'qqx', $user, true );
66 // Check that the page title and page content are as expected for the temporary account logout
67 $this->assertStringContainsString( '(logouttext-for-temporary-account:', $html );
68 $this->assertStringContainsString( '(templogout)', $html );
71 public function testViewForTemporaryAccountAfterApiLogout() {
72 $user = $this->getServiceContainer()->getUserFactory()->newAnonymous( '1.2.3.4' );
74 $fauxRequest = new FauxRequest( [ 'wasTempUser' => 1 ] );
76 [ $html ] = $this->executeSpecialPage( '', $fauxRequest, 'qqx', $user, true );
77 // Check that the page title and page content are as expected for the temporary account logout
78 $this->assertStringContainsString( '(logouttext-for-temporary-account:', $html );
79 $this->assertStringContainsString( '(templogout)', $html );
82 public function testViewForTemporaryAccount() {
83 $this->enableAutoCreateTempUser();
84 $user = $this->getServiceContainer()->getTempUserCreator()->create( null, new FauxRequest() )->getUser();
86 [ $html ] = $this->executeSpecialPage( '', null, 'qqx', $user, true );
87 // Check that the page title is as expected for a temporary account and that the submit button is present
88 $this->assertStringContainsString( '(templogout)', $html );
89 $this->assertStringContainsString( '(htmlform-submit)', $html );