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
|
<?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 MediaWikiIntegrationTestCase;
use Wikimedia\TestingAccessWrapper;
/**
* @covers \MediaWiki\Api\ApiBlockInfoTrait
*/
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 );
$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 ],
],
],
],
];
}
}
|