Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4104542
MockBlockTrait.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
MockBlockTrait.php
View Options
<?php
namespace
MediaWiki\Tests\Unit
;
use
MediaWiki\Block\AbstractBlock
;
use
MediaWiki\Block\BlockManager
;
use
MediaWiki\Block\DatabaseBlock
;
use
MediaWiki\User\UserIdentity
;
use
MediaWiki\User\UserIdentityValue
;
/**
* Creates and apply user blocks
* @stable to use since 1.42
*/
trait
MockBlockTrait
{
/**
* @param array $options Options as supported by AbstractBlock and
* DatabaseBlock. In addition, the 'target' field may contain a
* UserIdentity identifying the blocked user.
*
* @return AbstractBlock
*/
private
function
makeMockBlock
(
$options
=
[]
):
AbstractBlock
{
if
(
isset
(
$options
[
'target'
]
)
)
{
/** @var UserIdentity $user */
$user
=
$options
[
'target'
];
if
(
!
isset
(
$options
[
'address'
]
)
)
{
$options
[
'address'
]
=
$user
->
getName
();
}
if
(
!
isset
(
$options
[
'wiki'
]
)
)
{
$options
[
'wiki'
]
=
$user
->
getWikiId
();
}
unset
(
$options
[
'target'
]
);
}
if
(
!
isset
(
$options
[
'by'
]
)
)
{
$options
[
'by'
]
=
UserIdentityValue
::
newRegistered
(
45622
,
'Blocker'
);
}
$block
=
new
DatabaseBlock
(
$options
);
return
$block
;
}
/**
* @param UserIdentity|AbstractBlock|array $block
* The Block to apply, or the user to block.
* If the block is given as an array,
* it supports the fields specified by the constructors
* of AbstractBlock and DatabaseBlock.
* @param UserIdentity|string|null $match The user to apply the
* block for. Will be determined automatically if not given.
*
* @return BlockManager
*/
private
function
makeMockBlockManager
(
$block
,
$match
=
null
)
{
if
(
is_array
(
$block
)
)
{
if
(
!
isset
(
$block
[
'target'
]
)
&&
$match
!==
null
)
{
$target
=
$match
instanceof
UserIdentity
?
new
UserIdentityValue
(
0
,
$match
)
:
$match
;
$block
[
'target'
]
=
$target
;
}
$block
=
$this
->
makeMockBlock
(
$block
);
}
if
(
$block
instanceof
UserIdentity
)
{
$target
=
$block
;
$block
=
$this
->
makeMockBlock
(
[
'target'
=>
$target
]
);
}
$match
??=
$block
->
getTargetUserIdentity
();
$blockManager
=
$this
->
getMockBuilder
(
BlockManager
::
class
)
->
disableOriginalConstructor
()
->
onlyMethods
(
[
'getUserBlock'
,
'getBlock'
,
'getCreateAccountBlock'
,
'getIpBlock'
,
'clearUserCache'
]
)
->
getMock
();
$callback
=
static
function
(
$user
)
use
(
$match
,
$block
)
{
if
(
is_string
(
$user
)
&&
$user
===
$match
->
getName
()
)
{
return
$block
;
}
elseif
(
$user
->
equals
(
$match
)
)
{
return
$block
;
}
return
null
;
};
$blockManager
->
method
(
'getUserBlock'
)
->
willReturnCallback
(
$callback
);
$blockManager
->
method
(
'getBlock'
)
->
willReturnCallback
(
$callback
);
$blockManager
->
method
(
'getCreateAccountBlock'
)
->
willReturnCallback
(
$callback
);
$blockManager
->
method
(
'getIpBlock'
)
->
willReturnCallback
(
$callback
);
return
$blockManager
;
}
/**
* @param UserIdentity|AbstractBlock|BlockManager|array $block
* The BlockManager to install, the Block to apply, or
* the user to block. If the block is given as an array,
* it supports the fields specified by the constructors
* of AbstractBlock and DatabaseBlock.
* @param UserIdentity|string|null $match The user to apply the
* block for. Will be determined automatically if not given.
*
* @return BlockManager
*/
private
function
installMockBlockManager
(
$block
,
$match
=
null
):
BlockManager
{
if
(
$block
instanceof
BlockManager
)
{
$blockManager
=
$block
;
}
else
{
$blockManager
=
$this
->
makeMockBlockManager
(
$block
,
$match
);
}
$this
->
setService
(
'BlockManager'
,
$blockManager
);
return
$blockManager
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Tue, Aug 18, 18:31 (3 w, 1 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
77/a2/da2d9618ffba5bf39a469190ced7
Default Alt Text
MockBlockTrait.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment