Anything that wants to be "central" right now has to depend on CentralAuth, and then either can't work without CentralAuth or has to branch all over the place based on whether CentralAuth is present. Most of the time all it really needs is a mapping from local users to central user IDs and back or the ability to query whether the local user is attached on some other wiki, so let's make an interface for that in core. See I52aa0460 for an example implementation (CentralAuth), and Ibd192e29 for an example use (OAuth). Bug: T111302 Change-Id: I49568358ec35fdfd0b9e53e441adabded5c7b80f
114 lines
3 KiB
PHP
114 lines
3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @author Adam Shorland
|
|
* @covers UserArrayFromResult
|
|
*/
|
|
class UserArrayFromResultTest extends MediaWikiTestCase {
|
|
|
|
private function getMockResultWrapper( $row = null, $numRows = 1 ) {
|
|
$resultWrapper = $this->getMockBuilder( 'ResultWrapper' )
|
|
->disableOriginalConstructor();
|
|
|
|
$resultWrapper = $resultWrapper->getMock();
|
|
$resultWrapper->expects( $this->atLeastOnce() )
|
|
->method( 'current' )
|
|
->will( $this->returnValue( $row ) );
|
|
$resultWrapper->expects( $this->any() )
|
|
->method( 'numRows' )
|
|
->will( $this->returnValue( $numRows ) );
|
|
|
|
return $resultWrapper;
|
|
}
|
|
|
|
private function getRowWithUsername( $username = 'fooUser' ) {
|
|
$row = new stdClass();
|
|
$row->user_name = $username;
|
|
return $row;
|
|
}
|
|
|
|
private function getUserArrayFromResult( $resultWrapper ) {
|
|
return new UserArrayFromResult( $resultWrapper );
|
|
}
|
|
|
|
/**
|
|
* @covers UserArrayFromResult::__construct
|
|
*/
|
|
public function testConstructionWithFalseRow() {
|
|
$row = false;
|
|
$resultWrapper = $this->getMockResultWrapper( $row );
|
|
|
|
$object = $this->getUserArrayFromResult( $resultWrapper );
|
|
|
|
$this->assertEquals( $resultWrapper, $object->res );
|
|
$this->assertSame( 0, $object->key );
|
|
$this->assertEquals( $row, $object->current );
|
|
}
|
|
|
|
/**
|
|
* @covers UserArrayFromResult::__construct
|
|
*/
|
|
public function testConstructionWithRow() {
|
|
$username = 'addshore';
|
|
$row = $this->getRowWithUsername( $username );
|
|
$resultWrapper = $this->getMockResultWrapper( $row );
|
|
|
|
$object = $this->getUserArrayFromResult( $resultWrapper );
|
|
|
|
$this->assertEquals( $resultWrapper, $object->res );
|
|
$this->assertSame( 0, $object->key );
|
|
$this->assertInstanceOf( 'User', $object->current );
|
|
$this->assertEquals( $username, $object->current->mName );
|
|
}
|
|
|
|
public static function provideNumberOfRows() {
|
|
return array(
|
|
array( 0 ),
|
|
array( 1 ),
|
|
array( 122 ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideNumberOfRows
|
|
* @covers UserArrayFromResult::count
|
|
*/
|
|
public function testCountWithVaryingValues( $numRows ) {
|
|
$object = $this->getUserArrayFromResult( $this->getMockResultWrapper(
|
|
$this->getRowWithUsername(),
|
|
$numRows
|
|
) );
|
|
$this->assertEquals( $numRows, $object->count() );
|
|
}
|
|
|
|
/**
|
|
* @covers UserArrayFromResult::current
|
|
*/
|
|
public function testCurrentAfterConstruction() {
|
|
$username = 'addshore';
|
|
$userRow = $this->getRowWithUsername( $username );
|
|
$object = $this->getUserArrayFromResult( $this->getMockResultWrapper( $userRow ) );
|
|
$this->assertInstanceOf( 'User', $object->current() );
|
|
$this->assertEquals( $username, $object->current()->mName );
|
|
}
|
|
|
|
public function provideTestValid() {
|
|
return array(
|
|
array( $this->getRowWithUsername(), true ),
|
|
array( false, false ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider provideTestValid
|
|
* @covers UserArrayFromResult::valid
|
|
*/
|
|
public function testValid( $input, $expected ) {
|
|
$object = $this->getUserArrayFromResult( $this->getMockResultWrapper( $input ) );
|
|
$this->assertEquals( $expected, $object->valid() );
|
|
}
|
|
|
|
// @todo unit test for key()
|
|
// @todo unit test for next()
|
|
// @todo unit test for rewind()
|
|
}
|