aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/api/ApiBlockInfoTraitTest.php
blob: 93f6a46a20d604095c18dc12c1a4f5d5bea4c822 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php

namespace MediaWiki\Tests\Api;

use MediaWiki\Api\ApiBlockInfoTrait;
use MediaWiki\Block\CompositeBlock;
use MediaWiki\Block\DatabaseBlock;
use MediaWiki\Block\SystemBlock;
use MediaWiki\Tests\Unit\DummyServicesTrait;
use MediaWiki\User\UserIdentityValue;
use MediaWikiIntegrationTestCase;
use Wikimedia\TestingAccessWrapper;

/**
 * @covers \MediaWiki\Api\ApiBlockInfoTrait
 * @covers \MediaWiki\Api\ApiBlockInfoHelper
 */
class ApiBlockInfoTraitTest extends MediaWikiIntegrationTestCase {
	use DummyServicesTrait;

	protected function setUp(): void {
		parent::setUp();

		$this->setService( 'DBLoadBalancerFactory', $this->getDummyDBLoadBalancerFactory() );
	}

	/**
	 * @dataProvider provideGetBlockDetails
	 */
	public function testGetBlockDetails( $block, $expectedInfo ) {
		$language = $this->getServiceContainer()->getLanguageFactory()->getLanguage( 'en' );
		$mock = $this->getMockForTrait( ApiBlockInfoTrait::class );
		$mock->method( 'getLanguage' )->willReturn( $language );
		$mock->method( 'getUser' )->willReturn( new UserIdentityValue( 0, 'Test' ) );
		$info = TestingAccessWrapper::newFromObject( $mock )->getBlockDetails( $block );
		$subset = array_merge( [
			'blockid' => null,
			'blockedby' => '',
			'blockedbyid' => 0,
			'blockreason' => '',
			'blockexpiry' => 'infinite',
			'blockemail' => false,
			'blockowntalk' => true,
		], $expectedInfo );
		$this->assertArraySubmapSame( $subset, $info, "Matching block details" );
	}

	public static function provideGetBlockDetails() {
		return [
			'Sitewide block' => [
				new DatabaseBlock(),
				[ 'blockpartial' => false ],
			],
			'Partial block' => [
				new DatabaseBlock( [ 'sitewide' => false ] ),
				[ 'blockpartial' => true ],
			],
			'Email block' => [
				new DatabaseBlock( [ 'blockEmail' => true ] ),
				[ 'blockemail' => true ]
			],
			'System block' => [
				new SystemBlock( [ 'systemBlock' => 'proxy' ] ),
				[ 'systemblocktype' => 'proxy' ]
			],
			'Composite block' => [
				CompositeBlock::createFromBlocks(
					new DatabaseBlock( [ 'blockEmail' => false ] ),
					new DatabaseBlock( [ 'blockEmail' => true ] )
				),
				[
					'blockemail' => true,
					'blockreason' => 'There are multiple blocks against your account and/or IP address',
					'blockcomponents' => [
						[ 'blockemail' => false ],
						[ 'blockemail' => true ],
					],
				],
			],
		];
	}
}