Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F2753190
CentralAuthHooksTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
CentralAuthHooksTest.php
View Options
<?php
namespace
MediaWiki\Extension\GlobalBlocking\Test\Integration
;
use
MediaWiki\Context\DerivativeContext
;
use
MediaWiki\Context\RequestContext
;
use
MediaWiki\Extension\CentralAuth\User\CentralAuthUser
;
use
MediaWiki\Extension\GlobalBlocking\CentralAuthHooks
;
use
MediaWiki\Extension\GlobalBlocking\GlobalBlockingServices
;
use
MediaWiki\Tests\Unit\Permissions\MockAuthorityTrait
;
use
MediaWiki\Title\Title
;
use
MediaWiki\User\UserIdentity
;
use
MediaWikiIntegrationTestCase
;
/**
* @covers \MediaWiki\Extension\GlobalBlocking\CentralAuthHooks
* @group Database
*/
class
CentralAuthHooksTest
extends
MediaWikiIntegrationTestCase
{
use
MockAuthorityTrait
;
private
static
UserIdentity
$testGloballyBlockedUser
;
private
static
UserIdentity
$testUnblockedUser
;
protected
function
setUp
():
void
{
parent
::
setUp
();
// We don't want to test specifically the CentralAuth implementation of the CentralIdLookup. As such, force it
// to be the local provider.
$this
->
setMwGlobals
(
'wgCentralIdLookupProvider'
,
'local'
);
// These tests only work if CentralAuth is loaded
$this
->
markTestSkippedIfExtensionNotLoaded
(
'CentralAuth'
);
}
private
function
getCentralAuthHooks
():
CentralAuthHooks
{
$globalBlockingServices
=
GlobalBlockingServices
::
wrap
(
$this
->
getServiceContainer
()
);
return
new
CentralAuthHooks
(
$globalBlockingServices
->
getGlobalBlockLookup
(),
$globalBlockingServices
->
getGlobalBlockingLinkBuilder
(),
$this
->
getServiceContainer
()->
getLinkRenderer
()
);
}
public
function
testOnCentralAuthInfoFieldsForUserWithoutPermissionsAndNotGloballyBlockedTarget
()
{
$context
=
new
DerivativeContext
(
RequestContext
::
getMain
()
);
$context
->
setAuthority
(
$this
->
mockAnonNullAuthority
()
);
// Run the hook
$attribs
=
[];
$this
->
getCentralAuthHooks
()->
onCentralAuthInfoFields
(
CentralAuthUser
::
getInstance
(
self
::
$testUnblockedUser
),
$context
,
$attribs
);
// Verify nothing was added if the the target is not globally blocked and there are no action links.
$this
->
assertArrayEquals
(
[],
$attribs
);
}
/** @dataProvider provideOnCentralAuthInfoFields */
public
function
testOnCentralAuthInfoFields
(
callable
$target
,
bool
$shouldBeBlocked
)
{
$context
=
new
DerivativeContext
(
RequestContext
::
getMain
()
);
// Ensure that tool links will be always shown
$context
->
setAuthority
(
$this
->
mockRegisteredUltimateAuthority
()
);
// The title needs to be set as the GlobalBlockingLinkBuilder will use it to generate the action links
$context
->
setTitle
(
Title
::
makeTitle
(
NS_SPECIAL
,
'CentralAuth'
)
);
$this
->
setUserLang
(
'qqx'
);
// Run the hook
$attribs
=
[];
$this
->
getCentralAuthHooks
()->
onCentralAuthInfoFields
(
CentralAuthUser
::
getInstance
(
$target
()
),
$context
,
$attribs
);
// Verify the structure of the global blocking bullet point.
$this
->
assertArrayHasKey
(
'globalblock'
,
$attribs
);
$this
->
assertSame
(
'globalblocking-centralauth-admin-info-globalblock'
,
$attribs
[
'globalblock'
][
'label'
]
);
if
(
$shouldBeBlocked
)
{
$this
->
assertStringContainsString
(
'centralauth-admin-yes'
,
$attribs
[
'globalblock'
][
'data'
]
);
$this
->
assertStringContainsString
(
'globalblocking-list-whitelist'
,
$attribs
[
'globalblock'
][
'data'
]
);
}
else
{
$this
->
assertStringContainsString
(
'centralauth-admin-no'
,
$attribs
[
'globalblock'
][
'data'
]
);
$this
->
assertStringContainsString
(
'globalblocking-list-block'
,
$attribs
[
'globalblock'
][
'data'
]
);
}
}
public
static
function
provideOnCentralAuthInfoFields
()
{
return
[
'Special:CentralAuth for unblocked user'
=>
[
fn
()
=>
self
::
$testUnblockedUser
,
false
],
'Special:CentralAuth for globally blocked user'
=>
[
fn
()
=>
self
::
$testGloballyBlockedUser
,
true
],
];
}
public
function
addDBDataOnce
()
{
// We don't want to test specifically the CentralAuth implementation of the CentralIdLookup. As such, force it
// to be the local provider.
$this
->
setMwGlobals
(
'wgCentralIdLookupProvider'
,
'local'
);
// Get a testing global block on an IP address
$globalBlockManager
=
GlobalBlockingServices
::
wrap
(
$this
->
getServiceContainer
()
)->
getGlobalBlockManager
();
$testGloballyBlockedUser
=
$this
->
getMutableTestUser
()->
getUserIdentity
();
$testUnblockedUser
=
$this
->
getTestUser
()->
getUserIdentity
();
$this
->
assertStatusGood
(
$globalBlockManager
->
block
(
$testGloballyBlockedUser
,
'Test reason3'
,
'3 days'
,
$this
->
getTestUser
(
[
'steward'
]
)->
getUser
()
)
);
self
::
$testGloballyBlockedUser
=
$testGloballyBlockedUser
;
self
::
$testUnblockedUser
=
$testUnblockedUser
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Fri, Jul 3, 20:53 (23 h, 52 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
33/11/e4ded76edec18eedee8787f0e097
Default Alt Text
CentralAuthHooksTest.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment