define( 'NS_UNITTEST_TALK', 5601 );
use MediaWiki\Block\Restriction\PageRestriction;
+use MediaWiki\Block\Restriction\NamespaceRestriction;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserIdentityValue;
use Wikimedia\TestingAccessWrapper;
],
],
] );
+ $this->hideDeprecated( 'User::getPasswordValidity' );
$user = static::getTestUser()->getUser();
* When a user is autoblocked a cookie is set with which to track them
* in case they log out and change IP addresses.
* @link https://phabricator.wikimedia.org/T5233
+ * @covers User::trackBlockWithCookie
*/
public function testAutoblockCookies() {
// Set up the bits of global configuration that we use.
] );
// 1. Log in a test user, and block them.
- $userBlocker = $this->getTestSysop()->getUser();
$user1tmp = $this->getTestUser()->getUser();
$request1 = new FauxRequest();
$request1->getSession()->setUser( $user1tmp );
] );
$block->setBlocker( $this->getTestSysop()->getUser() );
$block->setTarget( $user1tmp );
- $block->setBlocker( $userBlocker );
$res = $block->insert();
$this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
$user1 = User::newFromSession( $request1 );
/**
* Make sure that no cookie is set to track autoblocked users
* when $wgCookieSetOnAutoblock is false.
+ * @covers User::trackBlockWithCookie
*/
public function testAutoblockCookiesDisabled() {
// Set up the bits of global configuration that we use.
] );
// 1. Log in a test user, and block them.
- $userBlocker = $this->getTestSysop()->getUser();
$testUser = $this->getTestUser()->getUser();
$request1 = new FauxRequest();
$request1->getSession()->setUser( $testUser );
$block = new Block( [ 'enableAutoblock' => true ] );
$block->setBlocker( $this->getTestSysop()->getUser() );
$block->setTarget( $testUser );
- $block->setBlocker( $userBlocker );
$res = $block->insert();
$this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
$user = User::newFromSession( $request1 );
* When a user is autoblocked and a cookie is set to track them, the expiry time of the cookie
* should match the block's expiry, to a maximum of 24 hours. If the expiry time is changed,
* the cookie's should change with it.
+ * @covers User::trackBlockWithCookie
*/
public function testAutoblockCookieInfiniteExpiry() {
$this->setMwGlobals( [
] );
// 1. Log in a test user, and block them indefinitely.
- $userBlocker = $this->getTestSysop()->getUser();
$user1Tmp = $this->getTestUser()->getUser();
$request1 = new FauxRequest();
$request1->getSession()->setUser( $user1Tmp );
$block = new Block( [ 'enableAutoblock' => true, 'expiry' => 'infinity' ] );
$block->setBlocker( $this->getTestSysop()->getUser() );
$block->setTarget( $user1Tmp );
- $block->setBlocker( $userBlocker );
$res = $block->insert();
$this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
$user1 = User::newFromSession( $request1 );
$block->delete();
}
+ /**
+ * @covers User::getBlockedStatus
+ */
public function testSoftBlockRanges() {
global $wgUser;
/**
* Test that a modified BlockID cookie doesn't actually load the relevant block (T152951).
+ * @covers User::trackBlockWithCookie
*/
public function testAutoblockCookieInauthentic() {
// Set up the bits of global configuration that we use.
] );
// 1. Log in a blocked test user.
- $userBlocker = $this->getTestSysop()->getUser();
$user1tmp = $this->getTestUser()->getUser();
$request1 = new FauxRequest();
$request1->getSession()->setUser( $user1tmp );
$block = new Block( [ 'enableAutoblock' => true ] );
$block->setBlocker( $this->getTestSysop()->getUser() );
$block->setTarget( $user1tmp );
- $block->setBlocker( $userBlocker );
$res = $block->insert();
$this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
$user1 = User::newFromSession( $request1 );
/**
* The BlockID cookie is normally verified with a HMAC, but not if wgSecretKey is not set.
* This checks that a non-authenticated cookie still works.
+ * @covers User::trackBlockWithCookie
*/
public function testAutoblockCookieNoSecretKey() {
// Set up the bits of global configuration that we use.
] );
// 1. Log in a blocked test user.
- $userBlocker = $this->getTestSysop()->getUser();
$user1tmp = $this->getTestUser()->getUser();
$request1 = new FauxRequest();
$request1->getSession()->setUser( $user1tmp );
$block = new Block( [ 'enableAutoblock' => true ] );
$block->setBlocker( $this->getTestSysop()->getUser() );
$block->setTarget( $user1tmp );
- $block->setBlocker( $userBlocker );
$res = $block->insert();
$this->assertTrue( (bool)$res['id'], 'Failed to insert block' );
$user1 = User::newFromSession( $request1 );
$this->assertTrue( User::isLocallyBlockedProxy( $ip ) );
}
+ /**
+ * @covers User::newFromActorId
+ */
public function testActorId() {
$domain = MediaWikiServices::getInstance()->getDBLoadBalancer()->getLocalDomainID();
$this->hideDeprecated( 'User::selectFields' );
'User::newFromActorId works for an anonymous user' );
}
+ /**
+ * @covers User::newFromAnyId
+ */
public function testNewFromAnyId() {
// Registered user
$user = $this->getTestUser()->getUser();
);
$restrictions[] = new PageRestriction( 0, $page->getId() );
}
+ foreach ( $options['namespaceRestrictions'] ?? [] as $ns ) {
+ $restrictions[] = new NamespaceRestriction( 0, $ns );
+ }
$block = new Block( [
'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
public static function provideIsBlockedFrom() {
return [
- 'Basic operation' => [ 'Test page', true ],
- 'User talk page, not allowed' => [ self::USER_TALK_PAGE, true, [
- 'allowUsertalk' => false,
- ] ],
- 'User talk page, allowed' => [ self::USER_TALK_PAGE, false, [
- 'allowUsertalk' => true,
- ] ],
- 'User talk page, allowed but $wgBlockAllowsUTEdit is false' => [ self::USER_TALK_PAGE, true, [
- 'allowUsertalk' => true,
- 'blockAllowsUTEdit' => false,
- ] ],
-
- 'Partial block, blocking the page' => [ 'Test page', true, [
- 'pageRestrictions' => [ 'Test page' ],
- ] ],
- 'Partial block, not blocking the page' => [ 'Test page 2', false, [
- 'pageRestrictions' => [ 'Test page' ],
- ] ],
- 'Partial block, overriding allowUsertalk' => [ self::USER_TALK_PAGE, true, [
- 'allowUsertalk' => false,
- 'pageRestrictions' => [ self::USER_TALK_PAGE ],
- ] ],
- 'Partial block, allowing user talk' => [ self::USER_TALK_PAGE, false, [
- 'allowUsertalk' => true,
- 'pageRestrictions' => [ 'Test page' ],
- ] ],
- 'Partial block, not allowing user talk' => [ self::USER_TALK_PAGE, true, [
- 'allowUsertalk' => false,
- 'pageRestrictions' => [ 'Test page' ],
- ] ],
+ 'Sitewide block, basic operation' => [ 'Test page', true ],
+ 'Sitewide block, not allowing user talk' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => false,
+ ]
+ ],
+ 'Sitewide block, allowing user talk' => [
+ self::USER_TALK_PAGE, false, [
+ 'allowUsertalk' => true,
+ ]
+ ],
+ 'Sitewide block, allowing user talk but $wgBlockAllowsUTEdit is false' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => true,
+ 'blockAllowsUTEdit' => false,
+ ]
+ ],
+ 'Partial block, blocking the page' => [
+ 'Test page', true, [
+ 'pageRestrictions' => [ 'Test page' ],
+ ]
+ ],
+ 'Partial block, not blocking the page' => [
+ 'Test page 2', false, [
+ 'pageRestrictions' => [ 'Test page' ],
+ ]
+ ],
+ 'Partial block, not allowing user talk but user talk page is not blocked' => [
+ self::USER_TALK_PAGE, false, [
+ 'allowUsertalk' => false,
+ 'pageRestrictions' => [ 'Test page' ],
+ ]
+ ],
+ 'Partial block, allowing user talk but user talk page is blocked' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => true,
+ 'pageRestrictions' => [ self::USER_TALK_PAGE ],
+ ]
+ ],
+ 'Partial block, user talk page is not blocked but $wgBlockAllowsUTEdit is false' => [
+ self::USER_TALK_PAGE, false, [
+ 'allowUsertalk' => false,
+ 'pageRestrictions' => [ 'Test page' ],
+ 'blockAllowsUTEdit' => false,
+ ]
+ ],
+ 'Partial block, user talk page is blocked and $wgBlockAllowsUTEdit is false' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => true,
+ 'pageRestrictions' => [ self::USER_TALK_PAGE ],
+ 'blockAllowsUTEdit' => false,
+ ]
+ ],
+ 'Partial user talk namespace block, not allowing user talk' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => false,
+ 'namespaceRestrictions' => [ NS_USER_TALK ],
+ ]
+ ],
+ 'Partial user talk namespace block, allowing user talk' => [
+ self::USER_TALK_PAGE, false, [
+ 'allowUsertalk' => true,
+ 'namespaceRestrictions' => [ NS_USER_TALK ],
+ ]
+ ],
+ 'Partial user talk namespace block, where $wgBlockAllowsUTEdit is false' => [
+ self::USER_TALK_PAGE, true, [
+ 'allowUsertalk' => true,
+ 'namespaceRestrictions' => [ NS_USER_TALK ],
+ 'blockAllowsUTEdit' => false,
+ ]
+ ],
];
}
/**
* Block cookie should be set for IP Blocks if
* wgCookieSetOnIpBlock is set to true
+ * @covers User::trackBlockWithCookie
*/
public function testIpBlockCookieSet() {
$this->setMwGlobals( [
/**
* Block cookie should NOT be set when wgCookieSetOnIpBlock
* is disabled
+ * @covers User::trackBlockWithCookie
*/
public function testIpBlockCookieNotSet() {
$this->setMwGlobals( [
/**
* When an ip user is blocked and then they log in, cookie block
* should be invalid and the cookie removed.
+ * @covers User::trackBlockWithCookie
*/
public function testIpBlockCookieIgnoredWhenUserLoggedIn() {
$this->setMwGlobals( [