2010-12-28 19:12:27 +00:00
< ? php
2010-12-29 15:01:47 +00:00
/**
* @ group Database
2011-10-31 17:00:29 +00:00
* @ group Blocking
2010-12-29 15:01:47 +00:00
*/
2011-06-14 21:27:07 +00:00
class BlockTest extends MediaWikiLangTestCase {
2011-06-03 06:22:18 +00:00
2010-12-28 19:27:34 +00:00
private $block , $madeAt ;
2011-05-28 21:25:29 +00:00
/* variable used to save up the blockID we insert in this test suite */
private $blockId ;
2011-06-26 20:04:38 +00:00
2010-12-28 19:12:27 +00:00
function setUp () {
global $wgContLang ;
2011-05-01 23:02:27 +00:00
parent :: setUp ();
2010-12-28 19:12:27 +00:00
$wgContLang = Language :: factory ( 'en' );
}
2011-06-26 20:04:38 +00:00
2010-12-28 19:12:27 +00:00
function addDBData () {
2011-05-28 21:25:29 +00:00
//$this->dumpBlocks();
2011-06-26 20:04:38 +00:00
2010-12-28 19:12:27 +00:00
$user = User :: newFromName ( 'UTBlockee' );
2010-12-28 19:27:34 +00:00
if ( $user -> getID () == 0 ) {
$user -> addToDatabase ();
$user -> setPassword ( 'UTBlockeePassword' );
2011-06-26 20:04:38 +00:00
2010-12-28 19:27:34 +00:00
$user -> saveSettings ();
}
2011-06-15 20:43:24 +00:00
// Delete the last round's block if it's still there
$oldBlock = Block :: newFromTarget ( 'UTBlockee' );
if ( $oldBlock ) {
// An old block will prevent our new one from saving.
$oldBlock -> delete ();
}
2012-02-28 02:32:59 +00:00
$this -> block = new Block ( 'UTBlockee' , $user -> getID (), 0 ,
2011-10-31 17:00:29 +00:00
'Parce que' , 0 , false , time () + 100500
2010-12-28 19:12:27 +00:00
);
2010-12-28 19:27:34 +00:00
$this -> madeAt = wfTimestamp ( TS_MW );
2010-12-28 19:12:27 +00:00
$this -> block -> insert ();
2011-05-28 21:25:29 +00:00
// 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!
2011-06-15 20:43:24 +00:00
$newBlockId = $this -> block -> getId ();
if ( $newBlockId ) {
$this -> blockId = $newBlockId ;
} else {
throw new MWException ( " Failed to insert block for BlockTest; old leftover block remaining? " );
}
2010-12-28 19:12:27 +00:00
}
2011-05-28 21:25:29 +00:00
/**
* debug function : dump the ipblocks table
*/
function dumpBlocks () {
$v = $this -> db -> query ( 'SELECT * FROM unittest_ipblocks' );
print " Got " . $v -> numRows () . " rows. Full dump follow: \n " ;
foreach ( $v as $row ) {
print_r ( $row );
}
}
2010-12-28 19:12:27 +00:00
function testInitializerFunctionsReturnCorrectBlock () {
2011-05-28 21:25:29 +00:00
// $this->dumpBlocks();
2011-03-21 23:03:11 +00:00
$this -> assertTrue ( $this -> block -> equals ( Block :: newFromTarget ( 'UTBlockee' ) ), " newFromTarget() returns the same block as the one that was made " );
2012-04-10 00:12:06 +00:00
2011-05-28 21:25:29 +00:00
$this -> assertTrue ( $this -> block -> equals ( Block :: newFromID ( $this -> blockId ) ), " newFromID() returns the same block as the one that was made " );
2011-06-26 20:04:38 +00:00
2010-12-28 19:12:27 +00:00
}
2011-06-26 20:04:38 +00:00
2010-12-28 19:27:34 +00:00
/**
* per bug 26425
*/
function testBug26425BlockTimestampDefaultsToTime () {
2011-08-18 06:23:44 +00:00
// delta to stop one-off errors when things happen to go over a second mark.
$delta = abs ( $this -> madeAt - $this -> block -> mTimestamp );
$this -> assertLessThan ( 2 , $delta , " If no timestamp is specified, the block is recorded as time() " );
2011-06-26 20:04:38 +00:00
2010-12-28 19:27:34 +00:00
}
2010-12-28 19:12:27 +00:00
2011-07-25 16:27:33 +00:00
/**
* This is the method previously used to load block info in CheckUser etc
* passing an empty value ( empty string , null , etc ) as the ip parameter bypasses IP lookup checks .
*
* This stopped working with r84475 and friends : regression being fixed for bug 29116.
*
* @ dataProvider dataBug29116
*/
function testBug29116LoadWithEmptyIp ( $vagueTarget ) {
$this -> hideDeprecated ( 'Block::load' );
$uid = User :: idFromName ( 'UTBlockee' );
$this -> assertTrue ( ( $uid > 0 ), 'Must be able to look up the target user during tests' );
$block = new Block ();
$ok = $block -> load ( $vagueTarget , $uid );
$this -> assertTrue ( $ok , " Block->load() with empty IP and user ID ' $uid ' should return a block " );
$this -> assertTrue ( $this -> block -> equals ( $block ), " Block->load() returns the same block as the one that was made when given empty ip param " . var_export ( $vagueTarget , true ) );
}
2011-05-24 21:04:50 +00:00
/**
* 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.
*
* @ dataProvider dataBug29116
*/
function testBug29116NewFromTargetWithEmptyIp ( $vagueTarget ) {
$block = Block :: newFromTarget ( 'UTBlockee' , $vagueTarget );
$this -> assertTrue ( $this -> block -> equals ( $block ), " newFromTarget() returns the same block as the one that was made when given empty vagueTarget param " . var_export ( $vagueTarget , true ) );
}
function dataBug29116 () {
return array (
array ( null ),
array ( '' ),
array ( false )
);
}
2012-04-10 00:12:06 +00:00
function testCrappyCrossWikiBlocks () {
// Delete the last round's block if it's still there
$oldBlock = Block :: newFromTarget ( 'UserOnForeignWiki' );
if ( $oldBlock ) {
// An old block will prevent our new one from saving.
$oldBlock -> delete ();
}
// Foreign perspective (blockee not on current wiki)...
$block = new Block (
/* $address */ 'UserOnForeignWiki' ,
/* $user */ 14146 ,
/* $by */ 0 ,
/* $reason */ 'crosswiki block...' ,
/* $timestamp */ wfTimestampNow (),
/* $auto */ false ,
/* $expiry */ $this -> db -> getInfinity (),
/* anonOnly */ false ,
/* $createAccount */ true ,
/* $enableAutoblock */ true ,
/* $hideName (ipb_deleted) */ true ,
/* $blockEmail */ true ,
/* $allowUsertalk */ false ,
/* $byName */ 'MetaWikiUser'
);
$res = $block -> insert ( $this -> db );
$this -> assertTrue ( ( bool ) $res [ 'id' ], 'Block succeeded' );
// Local perspective (blockee on current wiki)...
$user = User :: newFromName ( 'UserOnForeignWiki' );
$user -> addToDatabase ();
// Set user ID to match the test value
$this -> db -> update ( 'user' , array ( 'user_id' => 14146 ), array ( 'user_id' => $user -> getId () ) );
$user = null ; // clear
$block = Block :: newFromID ( $res [ 'id' ] );
$this -> assertEquals ( 'UserOnForeignWiki' , $block -> getTarget () -> getName (), 'Correct blockee name' );
$this -> assertEquals ( '14146' , $block -> getTarget () -> getId (), 'Correct blockee id' );
$this -> assertEquals ( 'MetaWikiUser' , $block -> getBlocker (), 'Correct blocker name' );
$this -> assertEquals ( 'MetaWikiUser' , $block -> getByName (), 'Correct blocker name' );
$this -> assertEquals ( 0 , $block -> getBy (), 'Correct blocker id' );
}
2010-12-28 19:12:27 +00:00
}