X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2FBlockTest.php;h=c422b515ccbcecc539c877a8e4069f133792192e;hb=0c341778ac7e3750f6709d39daa3225127814187;hp=9f386599ebe97a7afae836985bec63e67312b468;hpb=e5facc46bc170c302438f60849041b0d6be75e82;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/BlockTest.php b/tests/phpunit/includes/BlockTest.php index 9f386599eb..c422b515cc 100644 --- a/tests/phpunit/includes/BlockTest.php +++ b/tests/phpunit/includes/BlockTest.php @@ -6,69 +6,62 @@ */ class BlockTest extends MediaWikiLangTestCase { - /** @var Block */ - private $block; - private $madeAt; - - /* variable used to save up the blockID we insert in this test suite */ - private $blockId; - - function addDBData() { - $user = User::newFromName( 'UTBlockee' ); - if ( $user->getId() == 0 ) { - $user->addToDatabase(); - TestUser::setPasswordForUser( $user, 'UTBlockeePassword' ); - - $user->saveSettings(); - } + /** + * @return User + */ + private function getUserForBlocking() { + $testUser = $this->getMutableTestUser(); + $user = $testUser->getUser(); + $user->addToDatabase(); + TestUser::setPasswordForUser( $user, 'UTBlockeePassword' ); + $user->saveSettings(); + return $user; + } + /** + * @param User $user + * + * @return Block + * @throws MWException + */ + private function addBlockForUser( User $user ) { // Delete the last round's block if it's still there - $oldBlock = Block::newFromTarget( 'UTBlockee' ); + $oldBlock = Block::newFromTarget( $user->getName() ); if ( $oldBlock ) { // An old block will prevent our new one from saving. $oldBlock->delete(); } $blockOptions = [ - 'address' => 'UTBlockee', + 'address' => $user->getName(), 'user' => $user->getId(), 'reason' => 'Parce que', 'expiry' => time() + 100500, ]; - $this->block = new Block( $blockOptions ); - $this->madeAt = wfTimestamp( TS_MW ); + $block = new Block( $blockOptions ); - $this->block->insert(); + $block->insert(); // save up ID for use in assertion. Since ID is an autoincrement, // its value might change depending on the order the tests are run. // ApiBlockTest insert its own blocks! - $newBlockId = $this->block->getId(); - if ( $newBlockId ) { - $this->blockId = $newBlockId; - } else { + if ( !$block->getId() ) { throw new MWException( "Failed to insert block for BlockTest; old leftover block remaining?" ); } $this->addXffBlocks(); - } - /** - * debug function : dump the ipblocks table - */ - function dumpBlocks() { - $v = $this->db->select( 'ipblocks', '*' ); - print "Got " . $v->numRows() . " rows. Full dump follow:\n"; - foreach ( $v as $row ) { - print_r( $row ); - } + return $block; } /** * @covers Block::newFromTarget */ public function testINewFromTargetReturnsCorrectBlock() { + $user = $this->getUserForBlocking(); + $block = $this->addBlockForUser( $user ); + $this->assertTrue( - $this->block->equals( Block::newFromTarget( 'UTBlockee' ) ), + $block->equals( Block::newFromTarget( $user->getName() ) ), "newFromTarget() returns the same block as the one that was made" ); } @@ -77,18 +70,25 @@ class BlockTest extends MediaWikiLangTestCase { * @covers Block::newFromID */ public function testINewFromIDReturnsCorrectBlock() { + $user = $this->getUserForBlocking(); + $block = $this->addBlockForUser( $user ); + $this->assertTrue( - $this->block->equals( Block::newFromID( $this->blockId ) ), + $block->equals( Block::newFromID( $block->getId() ) ), "newFromID() returns the same block as the one that was made" ); } /** - * per bug 26425 + * per T28425 */ public function testBug26425BlockTimestampDefaultsToTime() { + $user = $this->getUserForBlocking(); + $block = $this->addBlockForUser( $user ); + $madeAt = wfTimestamp( TS_MW ); + // delta to stop one-off errors when things happen to go over a second mark. - $delta = abs( $this->madeAt - $this->block->mTimestamp ); + $delta = abs( $madeAt - $block->mTimestamp ); $this->assertLessThan( 2, $delta, @@ -99,15 +99,18 @@ class BlockTest extends MediaWikiLangTestCase { /** * CheckUser since being changed to use Block::newFromTarget started failing * because the new function didn't accept empty strings like Block::load() - * had. Regression bug 29116. + * had. Regression T31116. * * @dataProvider provideBug29116Data * @covers Block::newFromTarget */ public function testBug29116NewFromTargetWithEmptyIp( $vagueTarget ) { - $block = Block::newFromTarget( 'UTBlockee', $vagueTarget ); + $user = $this->getUserForBlocking(); + $initialBlock = $this->addBlockForUser( $user ); + $block = Block::newFromTarget( $user->getName(), $vagueTarget ); + $this->assertTrue( - $this->block->equals( $block ), + $initialBlock->equals( $block ), "newFromTarget() returns the same block as the one that was made when " . "given empty vagueTarget param " . var_export( $vagueTarget, true ) ); @@ -351,6 +354,9 @@ class BlockTest extends MediaWikiLangTestCase { * @covers Block::chooseBlock */ public function testBlocksOnXff( $xff, $exCount, $exResult ) { + $user = $this->getUserForBlocking(); + $this->addBlockForUser( $user ); + $list = array_map( 'trim', explode( ',', $xff ) ); $xffblocks = Block::getBlocksForIPList( $list, true ); $this->assertEquals( $exCount, count( $xffblocks ), 'Number of blocks for ' . $xff ); @@ -409,4 +415,37 @@ class BlockTest extends MediaWikiLangTestCase { "Account creation should not be blocked by default" ); } + + public function testSystemBlocks() { + $user = $this->getUserForBlocking(); + $this->addBlockForUser( $user ); + + $blockOptions = [ + 'address' => $user->getName(), + 'reason' => 'test system block', + 'timestamp' => wfTimestampNow(), + 'expiry' => $this->db->getInfinity(), + 'byText' => 'MetaWikiUser', + 'systemBlock' => 'test', + 'enableAutoblock' => true, + ]; + $block = new Block( $blockOptions ); + + $this->assertSame( 'test', $block->getSystemBlockType() ); + + try { + $block->insert(); + $this->fail( 'Expected exception not thrown' ); + } catch ( MWException $ex ) { + $this->assertSame( 'Cannot insert a system block into the database', $ex->getMessage() ); + } + + try { + $block->doAutoblock( '192.0.2.2' ); + $this->fail( 'Expected exception not thrown' ); + } catch ( MWException $ex ) { + $this->assertSame( 'Cannot autoblock from a system block', $ex->getMessage() ); + } + } + }