3 use MediaWiki\Block\Restriction\PageRestriction
;
4 use MediaWiki\Block\Restriction\NamespaceRestriction
;
11 * @covers ApiQueryBlocks
13 class ApiQueryBlocksTest
extends ApiTestCase
{
15 protected $tablesUsed = [
17 'ipblocks_restrictions',
20 public function testExecute() {
21 list( $data ) = $this->doApiRequest( [
25 $this->assertEquals( [ 'batchcomplete' => true, 'query' => [ 'blocks' => [] ] ], $data );
28 public function testExecuteBlock() {
29 $badActor = $this->getTestUser()->getUser();
30 $sysop = $this->getTestSysop()->getUser();
33 'address' => $badActor->getName(),
34 'user' => $badActor->getId(),
35 'by' => $sysop->getId(),
36 'expiry' => 'infinity',
41 list( $data ) = $this->doApiRequest( [
45 $this->arrayHasKey( 'query', $data );
46 $this->arrayHasKey( 'blocks', $data['query'] );
47 $this->assertCount( 1, $data['query']['blocks'] );
49 'id' => $block->getId(),
50 'user' => $badActor->getName(),
51 'expiry' => $block->getExpiry(),
53 $this->assertArraySubset( $subset, $data['query']['blocks'][0] );
56 public function testExecuteSitewide() {
57 $badActor = $this->getTestUser()->getUser();
58 $sysop = $this->getTestSysop()->getUser();
61 'address' => $badActor->getName(),
62 'user' => $badActor->getId(),
63 'by' => $sysop->getId(),
64 'ipb_expiry' => 'infinity',
70 list( $data ) = $this->doApiRequest( [
74 $this->arrayHasKey( 'query', $data );
75 $this->arrayHasKey( 'blocks', $data['query'] );
76 $this->assertCount( 1, $data['query']['blocks'] );
78 'id' => $block->getId(),
79 'user' => $badActor->getName(),
80 'expiry' => $block->getExpiry(),
81 'partial' => !$block->isSitewide(),
83 $this->assertArraySubset( $subset, $data['query']['blocks'][0] );
86 public function testExecuteRestrictions() {
87 $badActor = $this->getTestUser()->getUser();
88 $sysop = $this->getTestSysop()->getUser();
91 'address' => $badActor->getName(),
92 'user' => $badActor->getId(),
93 'by' => $sysop->getId(),
94 'expiry' => 'infinity',
101 'id' => $block->getId(),
102 'user' => $badActor->getName(),
103 'expiry' => $block->getExpiry(),
106 $title = 'Lady Macbeth';
107 $pageData = $this->insertPage( $title );
108 $pageId = $pageData['id'];
110 $this->db
->insert( 'ipblocks_restrictions', [
111 'ir_ipb_id' => $block->getId(),
112 'ir_type' => PageRestriction
::TYPE_ID
,
113 'ir_value' => $pageId,
115 $this->db
->insert( 'ipblocks_restrictions', [
116 'ir_ipb_id' => $block->getId(),
117 'ir_type' => NamespaceRestriction
::TYPE_ID
,
118 'ir_value' => NS_USER_TALK
,
120 $this->db
->insert( 'ipblocks_restrictions', [
121 'ir_ipb_id' => $block->getId(),
126 // Test without requesting restrictions.
127 list( $data ) = $this->doApiRequest( [
131 $this->arrayHasKey( 'query', $data );
132 $this->arrayHasKey( 'blocks', $data['query'] );
133 $this->assertCount( 1, $data['query']['blocks'] );
134 $flagSubset = array_merge( $subset, [
135 'partial' => !$block->isSitewide(),
137 $this->assertArraySubset( $flagSubset, $data['query']['blocks'][0] );
138 $this->assertArrayNotHasKey( 'restrictions', $data['query']['blocks'][0] );
140 // Test requesting the restrictions.
141 list( $data ) = $this->doApiRequest( [
144 'bkprop' => 'id|user|expiry|restrictions'
146 $this->arrayHasKey( 'query', $data );
147 $this->arrayHasKey( 'blocks', $data['query'] );
148 $this->assertCount( 1, $data['query']['blocks'] );
149 $restrictionsSubset = array_merge( $subset, [
163 $this->assertArraySubset( $restrictionsSubset, $data['query']['blocks'][0] );
164 $this->assertArrayNotHasKey( 'partial', $data['query']['blocks'][0] );