2019-07-22 08:34:21 +00:00
|
|
|
<?php
|
|
|
|
|
2022-03-06 02:05:20 +00:00
|
|
|
use MediaWiki\Extension\Gadgets\GadgetRepo;
|
2022-02-06 18:54:47 +00:00
|
|
|
use MediaWiki\Extension\Gadgets\Hooks as GadgetHooks;
|
|
|
|
use MediaWiki\Extension\Gadgets\MediaWikiGadgetsDefinitionRepo;
|
2019-07-22 08:34:21 +00:00
|
|
|
use Wikimedia\TestingAccessWrapper;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @group Gadgets
|
|
|
|
*/
|
|
|
|
class GadgetHooksTest extends MediaWikiIntegrationTestCase {
|
|
|
|
/**
|
|
|
|
* @var User
|
|
|
|
*/
|
|
|
|
protected $user;
|
|
|
|
|
2021-07-22 09:18:47 +00:00
|
|
|
public function setUp(): void {
|
2019-07-22 08:34:21 +00:00
|
|
|
parent::setUp();
|
|
|
|
|
2022-04-05 20:05:08 +00:00
|
|
|
$this->setGroupPermissions( [
|
|
|
|
'unittesters' => [
|
|
|
|
'test' => true,
|
|
|
|
],
|
|
|
|
] );
|
2019-07-22 08:34:21 +00:00
|
|
|
$this->user = $this->getTestUser( [ 'unittesters' ] )->getUser();
|
|
|
|
}
|
|
|
|
|
2021-07-22 09:18:47 +00:00
|
|
|
public function tearDown(): void {
|
2019-07-22 08:34:21 +00:00
|
|
|
GadgetRepo::setSingleton();
|
|
|
|
parent::tearDown();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2022-02-06 18:54:47 +00:00
|
|
|
* @covers \MediaWiki\Extension\Gadgets\Gadget
|
|
|
|
* @covers \MediaWiki\Extension\Gadgets\Hooks::getPreferences
|
|
|
|
* @covers \MediaWiki\Extension\Gadgets\GadgetRepo
|
|
|
|
* @covers \MediaWiki\Extension\Gadgets\MediaWikiGadgetsDefinitionRepo
|
2019-07-22 08:34:21 +00:00
|
|
|
*/
|
|
|
|
public function testPreferences() {
|
|
|
|
$prefs = [];
|
|
|
|
$repo = TestingAccessWrapper::newFromObject( new MediaWikiGadgetsDefinitionRepo() );
|
|
|
|
// Force usage of a MediaWikiGadgetsDefinitionRepo
|
|
|
|
GadgetRepo::setSingleton( $repo );
|
|
|
|
|
|
|
|
/** @var MediaWikiGadgetsDefinitionRepo $repo */
|
|
|
|
$gadgets = $repo->fetchStructuredList( '* foo | foo.js
|
|
|
|
==keep-section1==
|
|
|
|
* bar| bar.js
|
|
|
|
==remove-section==
|
|
|
|
* baz [rights=embezzle] |baz.js
|
|
|
|
==keep-section2==
|
|
|
|
* quux [rights=test] | quux.js' );
|
|
|
|
$this->assertGreaterThanOrEqual( 2, count( $gadgets ), "Gadget list parsed" );
|
|
|
|
|
2022-04-05 19:00:51 +00:00
|
|
|
$repo->definitions = $gadgets;
|
2019-07-22 08:34:21 +00:00
|
|
|
GadgetHooks::getPreferences( $this->user, $prefs );
|
|
|
|
|
2021-11-05 22:12:36 +00:00
|
|
|
$this->assertArrayHasKey( 'gadget-bar', $prefs );
|
|
|
|
$this->assertArrayNotHasKey( 'gadget-baz', $prefs,
|
|
|
|
'Must not show unavailable gadgets' );
|
|
|
|
$this->assertEquals( 'gadgets/gadget-section-keep-section2', $prefs['gadget-quux']['section'] );
|
2019-07-22 08:34:21 +00:00
|
|
|
}
|
|
|
|
}
|