Merge "Hard deprecrate Language::viewPrevNext()"
[lhc/web/wiklou.git] / tests / phpunit / includes / user / UserArrayFromResultTest.php
1 <?php
2
3 /**
4 * @author Addshore
5 * @covers UserArrayFromResult
6 */
7 class UserArrayFromResultTest extends MediaWikiTestCase {
8
9 private function getMockResultWrapper( $row = null, $numRows = 1 ) {
10 $resultWrapper = $this->getMockBuilder( Wikimedia\Rdbms\ResultWrapper::class )
11 ->disableOriginalConstructor();
12
13 $resultWrapper = $resultWrapper->getMock();
14 $resultWrapper->expects( $this->atLeastOnce() )
15 ->method( 'current' )
16 ->will( $this->returnValue( $row ) );
17 $resultWrapper->expects( $this->any() )
18 ->method( 'numRows' )
19 ->will( $this->returnValue( $numRows ) );
20
21 return $resultWrapper;
22 }
23
24 private function getRowWithUsername( $username = 'fooUser' ) {
25 $row = new stdClass();
26 $row->user_name = $username;
27 return $row;
28 }
29
30 /**
31 * @covers UserArrayFromResult::__construct
32 */
33 public function testConstructionWithFalseRow() {
34 $row = false;
35 $resultWrapper = $this->getMockResultWrapper( $row );
36
37 $object = new UserArrayFromResult( $resultWrapper );
38
39 $this->assertEquals( $resultWrapper, $object->res );
40 $this->assertSame( 0, $object->key );
41 $this->assertEquals( $row, $object->current );
42 }
43
44 /**
45 * @covers UserArrayFromResult::__construct
46 */
47 public function testConstructionWithRow() {
48 $username = 'addshore';
49 $row = $this->getRowWithUsername( $username );
50 $resultWrapper = $this->getMockResultWrapper( $row );
51
52 $object = new UserArrayFromResult( $resultWrapper );
53
54 $this->assertEquals( $resultWrapper, $object->res );
55 $this->assertSame( 0, $object->key );
56 $this->assertInstanceOf( User::class, $object->current );
57 $this->assertEquals( $username, $object->current->mName );
58 }
59
60 public static function provideNumberOfRows() {
61 return [
62 [ 0 ],
63 [ 1 ],
64 [ 122 ],
65 ];
66 }
67
68 /**
69 * @dataProvider provideNumberOfRows
70 * @covers UserArrayFromResult::count
71 */
72 public function testCountWithVaryingValues( $numRows ) {
73 $object = new UserArrayFromResult( $this->getMockResultWrapper(
74 $this->getRowWithUsername(),
75 $numRows
76 ) );
77 $this->assertEquals( $numRows, $object->count() );
78 }
79
80 /**
81 * @covers UserArrayFromResult::current
82 */
83 public function testCurrentAfterConstruction() {
84 $username = 'addshore';
85 $userRow = $this->getRowWithUsername( $username );
86 $object = new UserArrayFromResult( $this->getMockResultWrapper( $userRow ) );
87 $this->assertInstanceOf( User::class, $object->current() );
88 $this->assertEquals( $username, $object->current()->mName );
89 }
90
91 public function provideTestValid() {
92 return [
93 [ $this->getRowWithUsername(), true ],
94 [ false, false ],
95 ];
96 }
97
98 /**
99 * @dataProvider provideTestValid
100 * @covers UserArrayFromResult::valid
101 */
102 public function testValid( $input, $expected ) {
103 $object = new UserArrayFromResult( $this->getMockResultWrapper( $input ) );
104 $this->assertEquals( $expected, $object->valid() );
105 }
106
107 // @todo unit test for key()
108 // @todo unit test for next()
109 // @todo unit test for rewind()
110 }