Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F2750641
SpecsFormatterTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
SpecsFormatterTest.php
View Options
<?php
namespace
MediaWiki\Extension\AbuseFilter\Tests\Unit
;
use
Generator
;
use
MediaWiki\Extension\AbuseFilter\Filter\AbstractFilter
;
use
MediaWiki\Extension\AbuseFilter\Filter\MutableFilter
;
use
MediaWiki\Extension\AbuseFilter\SpecsFormatter
;
use
MediaWiki\Language\Language
;
use
MediaWiki\Message\Message
;
use
MediaWikiUnitTestCase
;
use
MessageLocalizer
;
use
Wikimedia\TestingAccessWrapper
;
/**
* @covers \MediaWiki\Extension\AbuseFilter\SpecsFormatter
*/
class
SpecsFormatterTest
extends
MediaWikiUnitTestCase
{
/**
* @param bool $msgDisabled Should the message be disabled?
* @return SpecsFormatter
*/
private
function
getFormatter
(
bool
$msgDisabled
=
false
):
SpecsFormatter
{
$localizer
=
$this
->
createMock
(
MessageLocalizer
::
class
);
$localizer
->
method
(
'msg'
)->
willReturnCallback
(
function
(
$k
)
use
(
$msgDisabled
)
{
if
(
$k
===
'abusefilter-throttle-details'
)
{
// Special case
$msg
=
$this
->
createMock
(
Message
::
class
);
$msg
->
method
(
'params'
)->
willReturnCallback
(
fn
(
...
$p
)
=>
$this
->
getMockMessage
(
$k
.
'|'
.
implode
(
'|'
,
$p
)
)
);
return
$msg
;
}
$msg
=
$this
->
getMockMessage
(
$k
);
$msg
->
method
(
'isDisabled'
)->
willReturn
(
$msgDisabled
);
return
$msg
;
}
);
return
new
SpecsFormatter
(
$localizer
);
}
public
function
testSetMessageLocalizer
()
{
$formatter
=
$this
->
getFormatter
();
$ml
=
$this
->
createMock
(
MessageLocalizer
::
class
);
$formatter
->
setMessageLocalizer
(
$ml
);
/** @var SpecsFormatter $wrapper */
$wrapper
=
TestingAccessWrapper
::
newFromObject
(
$formatter
);
$this
->
assertSame
(
$ml
,
$wrapper
->
messageLocalizer
);
}
/**
* @param string $action
* @param bool $msgDisabled
* @param string $expected
* @dataProvider provideActionDisplay
*/
public
function
testGetActionDisplay
(
string
$action
,
bool
$msgDisabled
,
string
$expected
)
{
$formatter
=
$this
->
getFormatter
(
$msgDisabled
);
$this
->
assertSame
(
$expected
,
$formatter
->
getActionDisplay
(
$action
)
);
}
public
static
function
provideActionDisplay
():
array
{
return
[
'exists'
=>
[
'foobar'
,
false
,
'abusefilter-action-foobar'
],
'does not exist'
=>
[
'foobar'
,
true
,
'foobar'
],
];
}
private
function
getMockLanguage
():
Language
{
$lang
=
$this
->
createMock
(
Language
::
class
);
$lang
->
method
(
'translateBlockExpiry'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
"expiry-$x"
;
}
);
$lang
->
method
(
'commaList'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
implode
(
','
,
$x
);
}
);
$lang
->
method
(
'listToText'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
implode
(
','
,
$x
);
}
);
$lang
->
method
(
'semicolonList'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
implode
(
';'
,
$x
);
}
);
return
$lang
;
}
/**
* @param string $action
* @param array $params
* @param string $expected
* @dataProvider provideFormatAction
*/
public
function
testFormatAction
(
string
$action
,
array
$params
,
string
$expected
)
{
$formatter
=
$this
->
getFormatter
();
$lang
=
$this
->
getMockLanguage
();
$this
->
assertSame
(
$expected
,
$formatter
->
formatAction
(
$action
,
$params
,
$lang
)
);
}
public
static
function
provideFormatAction
()
{
yield
'no params'
=>
[
'foobar'
,
[],
'abusefilter-action-foobar'
];
yield
'legacy block'
=>
[
'block'
,
[],
'abusefilter-action-block'
];
$colon
=
'colon-separator'
;
$baseBlock
=
"abusefilter-block-anon{$colon}expiry-1 day,abusefilter-block-user{$colon}expiry-1 week"
;
yield
'new block, no talk'
=>
[
'block'
,
[
'noTalkBlockSet'
,
'1 day'
,
'1 week'
],
$baseBlock
];
yield
'new block, with talk'
=>
[
'block'
,
[
'blocktalk'
,
'1 day'
,
'1 week'
],
"$baseBlock,abusefilter-block-talk"
];
yield
'throttle'
=>
[
'throttle'
,
[
'ignored'
,
'42,163'
,
'ip,user'
,
'site'
],
"abusefilter-action-throttle{$colon}abusefilter-throttle-details|42|163|"
.
'abusefilter-throttle-ip,abusefilter-throttle-user;abusefilter-throttle-site'
];
yield
'generic parametrized'
=>
[
'myaction'
,
[
'foo'
,
'bar'
],
"abusefilter-action-myaction{$colon}foo;bar"
];
}
/**
* @param string $flags
* @param string $expected
* @dataProvider provideFlags
*/
public
function
testFormatFlags
(
string
$flags
,
string
$expected
)
{
$formatter
=
$this
->
getFormatter
();
$lang
=
$this
->
createMock
(
Language
::
class
);
$lang
->
method
(
'commaList'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
implode
(
','
,
$x
);
}
);
$this
->
assertSame
(
$expected
,
$formatter
->
formatFlags
(
$flags
,
$lang
)
);
}
public
static
function
provideFlags
():
array
{
return
[
'empty'
=>
[
''
,
''
],
'single'
=>
[
'foo'
,
'abusefilter-history-foo'
],
'multiple'
=>
[
'foo,bar,baz'
,
'abusefilter-history-foo,abusefilter-history-bar,abusefilter-history-baz'
]
];
}
/**
* @param AbstractFilter $filter
* @param string $expected
* @dataProvider provideFilterFlags
*/
public
function
testFormatFilterFlags
(
AbstractFilter
$filter
,
string
$expected
)
{
$formatter
=
$this
->
getFormatter
();
$lang
=
$this
->
createMock
(
Language
::
class
);
$lang
->
method
(
'commaList'
)->
willReturnCallback
(
static
function
(
$x
)
{
return
implode
(
','
,
$x
);
}
);
$this
->
assertSame
(
$expected
,
$formatter
->
formatFilterFlags
(
$filter
,
$lang
)
);
}
public
static
function
provideFilterFlags
():
Generator
{
$none
=
MutableFilter
::
newDefault
();
$none
->
setEnabled
(
false
);
yield
'none'
=>
[
$none
,
''
];
yield
'single'
=>
[
MutableFilter
::
newDefault
(),
'abusefilter-history-enabled'
];
$multiple
=
MutableFilter
::
newDefault
();
$multiple
->
setHidden
(
true
);
$multiple
->
setProtected
(
true
);
yield
'multiple'
=>
[
$multiple
,
'abusefilter-history-enabled,abusefilter-history-hidden,abusefilter-history-protected'
];
}
/**
* @param string $group
* @param bool $msgDisabled
* @param string $expected
* @dataProvider provideGroup
*/
public
function
testNameGroup
(
string
$group
,
bool
$msgDisabled
,
string
$expected
)
{
$formatter
=
$this
->
getFormatter
(
$msgDisabled
);
$this
->
assertSame
(
$expected
,
$formatter
->
nameGroup
(
$group
)
);
}
public
static
function
provideGroup
():
array
{
return
[
'exists'
=>
[
'foobar'
,
false
,
'abusefilter-group-foobar'
],
'does not exist'
=>
[
'foobar'
,
true
,
'foobar'
],
];
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Fri, Jul 3, 16:51 (7 h, 6 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
08/48/220529d16de3146a0ce46ee6224d
Default Alt Text
SpecsFormatterTest.php (6 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment