mediawiki-extensions-Cite/tests/phpunit/integration/ReferencePreviews/ReferencePreviewsContextTest.php
Adam Wight c7b60735fe Move Reference Previews user preference into the Cite extension
This seems to play well with Popups with and without
Ie8fa1672b9fd .  However, it's not clear to me why this still works
and even gives priority to the Popups implementation when present,
regardless of the order the extensions are loaded in.  Happily, this
is the desired behavior.

Bug: T363162
Change-Id: Ic479c0a381ee16d1abcecfdd5ee48f0afccc1d3f
2024-09-10 15:33:50 +02:00

99 lines
3.2 KiB
PHP

<?php
namespace Cite\Tests\Integration\ReferencePreviews;
use Cite\ReferencePreviews\ReferencePreviewsContext;
use MediaWiki\Config\HashConfig;
use MediaWiki\User\Options\UserOptionsLookup;
use MediaWiki\User\User;
use MediaWikiIntegrationTestCase;
use Skin;
/**
* @group Popups
* @coversDefaultClass \Cite\ReferencePreviews\ReferencePreviewsContext
* @license GPL-2.0-or-later
*/
class ReferencePreviewsContextTest extends MediaWikiIntegrationTestCase {
/**
* Tests #shouldSendModuleToUser when the user is logged in and the reference previews feature
* is disabled.
*
* @covers ::isReferencePreviewsEnabled
* @dataProvider provideIsReferencePreviewsEnabled_requirements
*/
public function testIsReferencePreviewsEnabled_requirements( bool $setting, string $skinName, bool $expected ) {
$config = new HashConfig( [
'CiteReferencePreviews' => $setting,
'CiteReferencePreviewsConflictingNavPopupsGadgetName' => '',
'CiteReferencePreviewsConflictingRefTooltipsGadgetName' => '',
] );
$userOptLookup = $this->createNoOpMock( UserOptionsLookup::class );
$user = $this->createMock( User::class );
$user->method( 'isNamed' )->willReturn( false );
$skin = $this->createMock( Skin::class );
$skin->method( 'getSkinName' )->willReturn( $skinName );
$this->assertSame( $expected,
( new ReferencePreviewsContext(
$config,
$this->getServiceContainer()->getService( 'Cite.GadgetsIntegration' ),
$userOptLookup
) )
->isReferencePreviewsEnabled( $user, $skin ),
( $expected ? 'A' : 'No' ) . ' module is sent to the user.' );
}
public static function provideIsReferencePreviewsEnabled_requirements() {
yield [ true, 'minerva', false ];
yield [ false, 'minerva', false ];
yield [ true, 'vector', true ];
yield [ false, 'vector', false ];
}
/**
* Tests #shouldSendModuleToUser when the user is logged in and the reference previews feature
* is disabled.
*
* @covers ::isReferencePreviewsEnabled
* @dataProvider provideIsReferencePreviewsEnabled_userOptions
*/
public function testIsReferencePreviewsEnabled_userOptions( bool $isNamed, bool $option, bool $expected ) {
$user = $this->createMock( User::class );
$user->method( 'isNamed' )->willReturn( $isNamed );
$userOptLookup = $this->createMock( UserOptionsLookup::class );
$userOptLookup->method( 'getBoolOption' )
->with( $user, ReferencePreviewsContext::REFERENCE_PREVIEWS_PREFERENCE_NAME )
->willReturn( $option );
$config = new HashConfig( [
'CiteReferencePreviews' => true,
'CiteReferencePreviewsConflictingNavPopupsGadgetName' => '',
'CiteReferencePreviewsConflictingRefTooltipsGadgetName' => '',
] );
$skin = $this->createMock( Skin::class );
$this->assertSame( $expected,
( new ReferencePreviewsContext(
$config,
$this->getServiceContainer()->getService( 'Cite.GadgetsIntegration' ),
$userOptLookup
) )
->isReferencePreviewsEnabled( $user, $skin ),
( $expected ? 'A' : 'No' ) . ' module is sent to the user.' );
}
public static function provideIsReferencePreviewsEnabled_userOptions() {
yield [ true, true, true ];
yield [ true, false, false ];
yield [ false, false, true ];
yield [ false, true, true ];
}
}