<?php
+use MediaWiki\Block\Restriction\PageRestriction;
use MediaWiki\MediaWikiServices;
/**
'wgEmailAuthentication' => true,
] );
- $this->setUserPerm( [ "createpage", "move" ] );
+ $this->setUserPerm( [ 'createpage', 'edit', 'move', 'rollback', 'patrol', 'upload', 'purge' ] );
$this->setTitle( NS_HELP, "test page" );
# $wgEmailConfirmToEdit only applies to 'edit' action
'expiry' => 10,
'systemBlock' => 'test',
] );
- $this->assertEquals( [ [ 'systemblockedtext',
+
+ $errors = [ [ 'systemblockedtext',
'[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
'Useruser', 'test', '23:00, 31 December 1969', '127.0.8.1',
- $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
+ $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
+
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
+ $this->assertEquals( $errors,
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
// partial block message test
$this->user->mBlockedby = $this->user->getName();
'expiry' => 10,
] );
- $this->assertEquals( [ [ 'blockedtext-partial',
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
+
+ $this->user->mBlock->setRestrictions( [
+ ( new PageRestriction( 0, $this->title->getArticleID() ) )->setTitle( $this->title ),
+ ] );
+
+ $errors = [ [ 'blockedtext-partial',
'[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
- $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
+ $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
+
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
+ $this->assertEquals( $errors,
$this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
+
+ // Test no block.
+ $this->user->mBlockedby = null;
+ $this->user->mBlock = null;
+
+ $this->assertEquals( [],
+ $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
+ }
+
+ /**
+ * @covers Title::checkUserBlock
+ *
+ * Tests to determine that the passed in permission does not get mixed up with
+ * an action of the same name.
+ */
+ public function testUserBlockAction() {
+ global $wgLang;
+
+ $tester = $this->getMockBuilder( Action::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $tester->method( 'getName' )
+ ->willReturn( 'tester' );
+ $tester->method( 'getRestriction' )
+ ->willReturn( 'test' );
+ $tester->method( 'requiresUnblock' )
+ ->willReturn( false );
+
+ $this->setMwGlobals( [
+ 'wgActions' => [
+ 'tester' => $tester,
+ ],
+ 'wgGroupPermissions' => [
+ '*' => [
+ 'tester' => true,
+ ],
+ ],
+ ] );
+
+ $now = time();
+ $this->user->mBlockedby = $this->user->getName();
+ $this->user->mBlock = new Block( [
+ 'address' => '127.0.8.1',
+ 'by' => $this->user->getId(),
+ 'reason' => 'no reason given',
+ 'timestamp' => $now,
+ 'auto' => false,
+ 'expiry' => 'infinity',
+ ] );
+
+ $errors = [ [ 'blockedtext',
+ '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
+ 'Useruser', null, 'infinite', '127.0.8.1',
+ $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
+
+ $this->assertEquals( $errors,
+ $this->title->getUserPermissionsErrors( 'tester', $this->user ) );
}
}