Merge "REST API initial commit"
[lhc/web/wiklou.git] / tests / phpunit / unit / includes / api / ApiBlockInfoTraitTest.php
1 <?php
2
3 use Wikimedia\TestingAccessWrapper;
4 use MediaWiki\Block\DatabaseBlock;
5 use MediaWiki\Block\SystemBlock;
6
7 /**
8 * @covers ApiBlockInfoTrait
9 */
10 class ApiBlockInfoTraitTest extends \MediaWikiUnitTestCase {
11
12 protected function setUp() {
13 parent::setUp();
14
15 $lbMock = $this->createMock( LoadBalancer::class );
16 $lbMock->expects( $this->any() )
17 ->method( 'getConnection' )
18 ->willReturn( $this->createMock( Database::class ) );
19
20 $loadBalancerMockFactory = function () use ( $lbMock ): LoadBalancer {
21 return $lbMock;
22 };
23
24 $this->overrideMwServices( [ 'DBLoadBalancer' => $loadBalancerMockFactory ] );
25 }
26
27 /**
28 * @dataProvider provideGetBlockDetails
29 */
30 public function testGetBlockDetails( $blockFactory, $expectedInfo ) {
31 $mock = $this->getMockForTrait( ApiBlockInfoTrait::class );
32 $info = TestingAccessWrapper::newFromObject( $mock )->getBlockDetails( $blockFactory() );
33 $subset = array_merge( [
34 'blockid' => null,
35 'blockedby' => '',
36 'blockedbyid' => 0,
37 'blockreason' => '',
38 'blockexpiry' => 'infinite',
39 ], $expectedInfo );
40 $this->assertArraySubset( $subset, $info );
41 }
42
43 public static function provideGetBlockDetails() {
44 return [
45 'Sitewide block' => [
46 // Defer instantiation to avoid connecting to DB
47 function () {
48 return new DatabaseBlock();
49 },
50 [ 'blockpartial' => false ],
51 ],
52 'Partial block' => [
53 function () {
54 return new DatabaseBlock( [ 'sitewide' => false ] );
55 },
56 [ 'blockpartial' => true ],
57 ],
58 'System block' => [
59 function () {
60 return new SystemBlock( [ 'systemBlock' => 'proxy' ] );
61 },
62 [ 'systemblocktype' => 'proxy' ]
63 ],
64 ];
65 }
66 }