jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/327696 )

Change subject: Implement necessary wiring for preferences
......................................................................


Implement necessary wiring for preferences

Changes:
 - introduce unit tests
 - don't send module for anonymous users
 - renamed Module to Context
 - remove Config dependency from Popups.hooks.php

Bug: T146889
Change-Id: I3cbcdc1303411b28b613afa6dd1a00b410891471
---
M Popups.hooks.php
M extension.json
D includes/Module.php
A includes/PopupsContext.php
D tests/phpunit/ModuleTest.php
A tests/phpunit/PopupsContextTest.php
A tests/phpunit/PopupsHooksTest.php
7 files changed, 467 insertions(+), 129 deletions(-)

Approvals:
  jenkins-bot: Verified
  Phuedx: Looks good to me, approved



diff --git a/Popups.hooks.php b/Popups.hooks.php
index 0f29874..042ab04 100644
--- a/Popups.hooks.php
+++ b/Popups.hooks.php
@@ -18,20 +18,19 @@
  * @file
  * @ingroup extensions
  */
-use MediaWiki\Logger\LoggerFactory;
+use Popups\PopupsContext;
 
 class PopupsHooks {
-       const PREVIEWS_ENABLED = 'enabled';
-       const PREVIEWS_DISABLED = 'disabled';
-       const PREVIEWS_OPTIN_PREFERENCE_NAME = 'popups-enable';
        const PREVIEWS_PREFERENCES_SECTION = 'rendering/reading';
 
-       static function getPreferences( User $user, array &$prefs ) {
+       private static $context;
+
+       static function onGetBetaPreferences( User $user, array &$prefs ) {
                global $wgExtensionAssetsPath;
-               if ( self::getConfig()->get( 'PopupsBetaFeature' ) !== true ) {
+               if ( self::getModuleContext()->getConfig()->get( 
'PopupsBetaFeature' ) !== true ) {
                        return;
                }
-               $prefs['popups'] = [
+               $prefs[PopupsContext::PREVIEWS_BETA_PREFERENCE_NAME] = [
                        'label-message' => 'popups-message',
                        'desc-message' => 'popups-desc',
                        'screenshot' => [
@@ -53,60 +52,52 @@
         * @param array $prefs
         */
        static function onGetPreferences( User $user, array &$prefs ) {
-               $module = new \Popups\Module( self::getConfig() );
+               $module = self::getModuleContext();
 
                if ( !$module->showPreviewsOptInOnPreferencesPage() ) {
                        return;
                }
-               $prefs[self::PREVIEWS_OPTIN_PREFERENCE_NAME] = [
+               $prefs[PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME] = [
                        'type' => 'radio',
                        'label-message' => 'popups-prefs-optin-title',
                        'options' => [
-                               wfMessage( 'popups-prefs-optin-enabled-label' 
)->text() => self::PREVIEWS_ENABLED,
-                               wfMessage( 'popups-prefs-optin-disabled-label' 
)->text() => self::PREVIEWS_DISABLED
+                               wfMessage( 'popups-prefs-optin-enabled-label' 
)->text()
+                                       => PopupsContext::PREVIEWS_ENABLED,
+                               wfMessage( 'popups-prefs-optin-disabled-label' 
)->text()
+                                       => PopupsContext::PREVIEWS_DISABLED
                        ],
                        'section' => self::PREVIEWS_PREFERENCES_SECTION
                ];
        }
 
        /**
-        * @return Config
+        * @return PopupsContext
         */
-       public static function getConfig() {
-               static $config;
-               if ( !$config ) {
-                       $config = 
ConfigFactory::getDefaultInstance()->makeConfig( 'popups' );
+       private static function getModuleContext() {
+
+               if ( !self::$context ) {
+                       self::$context = new \Popups\PopupsContext();
                }
-               return $config;
+               return self::$context;
+       }
+
+       private static function areDependenciesMet() {
+               $registry = ExtensionRegistry::getInstance();
+               return $registry->isLoaded( 'TextExtracts' ) && class_exists( 
'ApiQueryPageImages' );
        }
 
        public static function onBeforePageDisplay( OutputPage &$out, Skin 
&$skin ) {
-               // Enable only if the user has turned it on in Beta 
Preferences, or BetaFeatures is not installed.
-               // Will only be loaded if PageImages & TextExtracts extensions 
are installed.
+               $module = self::getModuleContext();
 
-               $registry = ExtensionRegistry::getInstance();
-               if ( !$registry->isLoaded( 'TextExtracts' ) || !class_exists( 
'ApiQueryPageImages' ) ) {
-                       $logger = LoggerFactory::getInstance( 'popups' );
+               if ( !self::areDependenciesMet() ) {
+                       $logger = $module->getLogger();
                        $logger->error( 'Popups requires the PageImages and 
TextExtracts extensions.' );
                        return true;
                }
 
-               $config = self::getConfig();
-
-               if ( $config->get( 'PopupsBetaFeature' ) === true ) {
-                       if ( !class_exists( 'BetaFeatures' ) ) {
-                               $logger = LoggerFactory::getInstance( 'popups' 
);
-                               $logger->error( 'PopupsMode cannot be used as a 
beta feature unless ' .
-                                                               'the 
BetaFeatures extension is present.' );
-                               return true;
-                       }
-                       if ( !BetaFeatures::isFeatureEnabled( $skin->getUser(), 
'popups' ) ) {
-                               return true;
-                       }
+               if ( $module->isEnabledByUser( $skin->getUser() ) ) {
+                       $out->addModules( [ 'ext.popups' ] );
                }
-
-               $out->addModules( [ 'ext.popups' ] );
-
                return true;
        }
 
@@ -152,7 +143,8 @@
         * @param array $vars
         */
        public static function onResourceLoaderGetConfigVars( array &$vars ) {
-               $conf = self::getConfig();
+               $module = self::getModuleContext();
+               $conf = $module->getConfig();
                $vars['wgPopupsSchemaPopupsSamplingRate'] = $conf->get( 
'SchemaPopupsSamplingRate' );
        }
 
@@ -169,7 +161,35 @@
                 * or when ConfigRegistry gets populated before calling 
`callback` ExtensionRegistry hook
                 */
                $config = 
\MediaWiki\MediaWikiServices::getInstance()->getMainConfig();
-               $wgDefaultUserOptions[ self::PREVIEWS_OPTIN_PREFERENCE_NAME ] =
+               $wgDefaultUserOptions[ 
PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME ] =
                        $config->get( 'PopupsOptInDefaultState' );
        }
+
+       /**
+        * Inject Mocked context
+        * As there is no service registration this is used for tests only.
+        *
+        * @param PopupsContext $context
+        * @throws MWException
+        */
+       public static function injectContext( PopupsContext $context ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException( 'injectContext() must not be 
used outside unit tests.' );
+               }
+               self::$context = $context;
+       }
+
+       /**
+        * Remove cached context.
+        * As there is no service registration this is used for tests only.
+        *
+        *
+        * @throws MWException
+        */
+       public static function resetContext() {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException( 'injectContext() must not be 
used outside unit tests.' );
+               }
+               self::$context = null;
+       }
 }
diff --git a/extension.json b/extension.json
index 0168062..200b08f 100644
--- a/extension.json
+++ b/extension.json
@@ -10,14 +10,14 @@
        "type": "betafeatures",
        "AutoloadClasses": {
                "PopupsHooks": "Popups.hooks.php",
-               "Popups\\Module": "includes/Module.php"
+               "Popups\\PopupsContext": "includes/PopupsContext.php"
        },
        "ConfigRegistry": {
                "popups": "GlobalVarConfig::newInstance"
        },
        "Hooks": {
                "GetBetaFeaturePreferences": [
-                       "PopupsHooks::getPreferences"
+                       "PopupsHooks::onGetBetaPreferences"
                ],
                "BeforePageDisplay": [
                        "PopupsHooks::onBeforePageDisplay"
@@ -46,10 +46,10 @@
                "PopupsBetaFeature": false,
                "@SchemaPopupsSamplingRate": "@var number: Sample rate for 
logging events to Schema:Popups.",
                "SchemaPopupsSamplingRate": 0,
-               "@PopupsHideOptInOnPreferencesPage": "@var bool: Whether the 
option to enable/disable Page Previews should be hidden on Preferences page. 
Please note if PopupsBetaFeature is set to true this option will be always 
hidden. False by default",
-               "PopupsHideOptInOnPreferencesPage": true,
-               "@PopupsOptInDefaultState" : "@var string:[enabled|disabled] 
Default Page Previews visibility",
-               "PopupsOptInDefaultState" : "disabled"
+               "@PopupsHideOptInOnPreferencesPage": "@var bool: Whether the 
option to senable/disable Page Previews should be hidden on Preferences page. 
Please note if PopupsBetaFeature is set to true this option will be always 
hidden. False by default",
+               "PopupsHideOptInOnPreferencesPage": false,
+               "@PopupsOptInDefaultState" : "@var string:['1'|'0'] Default 
Page Previews visibility. Has to be a string as a compatibility with beta 
feature settings",
+               "PopupsOptInDefaultState" : "0"
        },
        "ResourceModules": {
                "ext.popups.images": {
diff --git a/includes/Module.php b/includes/Module.php
deleted file mode 100644
index 448aa1d..0000000
--- a/includes/Module.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Module.php
- */
-namespace Popups;
-
-/**
- * Popups Module
- *
- * @package Popups
- */
-final class Module {
-       /**
-        * @var \Config
-        */
-       private $config;
-
-       /**
-        * Module constructor.
-        * @param \Config $config
-        */
-       public function __construct( \Config $config ) {
-               $this->config = $config;
-       }
-
-       /**
-        * Are Page previews visible on User Preferences Page
-        *
-        * return @bool
-        */
-       public function showPreviewsOptInOnPreferencesPage() {
-               return $this->config->get( 'PopupsBetaFeature' ) === false
-                       && $this->config->get( 
'PopupsHideOptInOnPreferencesPage' ) === false;
-       }
-}
diff --git a/includes/PopupsContext.php b/includes/PopupsContext.php
new file mode 100644
index 0000000..8f77c8d
--- /dev/null
+++ b/includes/PopupsContext.php
@@ -0,0 +1,124 @@
+<?php
+/*
+ * This file is part of the MediaWiki extension Popups.
+ *
+ * Popups is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Popups is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Popups.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @file
+ * @ingroup extensions
+ */
+namespace Popups;
+
+use MediaWiki\Logger\LoggerFactory;
+
+/**
+ * Popups Module
+ *
+ * @package Popups
+ */
+class PopupsContext {
+
+       /**
+        * Extension name
+        * @var string
+        */
+       const EXTENSION_NAME = 'popups';
+       /**
+        * Logger channel (name)
+        * @var string
+        */
+       const LOGGER_CHANNEL = 'popups';
+       /**
+        * User preference value for enabled Page Previews
+        * @var string
+        */
+       const PREVIEWS_ENABLED = \HTMLFeatureField::OPTION_ENABLED;
+       /**
+        * User preference value for disabled Page Previews
+        * @var string
+        */
+       const PREVIEWS_DISABLED = \HTMLFeatureField::OPTION_DISABLED;
+       /**
+        * User preference to enable/disable Page Previews
+        * Currently for BETA and regular opt in we use same preference name
+        *
+        * @var string
+        */
+       const PREVIEWS_OPTIN_PREFERENCE_NAME = 'popups';
+       /**
+        * User preference to enable/disable Page Preivews as a beta feature
+        * @var string
+        */
+       const PREVIEWS_BETA_PREFERENCE_NAME = 'popups';
+
+       /**
+        * @var \Config
+        */
+       private $config;
+
+       /**
+        * Module constructor.
+        */
+       public function __construct() {
+               $this->config = \MediaWiki\MediaWikiServices::getInstance()
+                       ->getConfigFactory()->makeConfig( 
PopupsContext::EXTENSION_NAME );
+       }
+
+       /**
+        * Are Page previews visible on User Preferences Page
+        *
+        * return @bool
+        */
+       public function showPreviewsOptInOnPreferencesPage() {
+               return $this->config->get( 'PopupsBetaFeature' ) === false
+                       && $this->config->get( 
'PopupsHideOptInOnPreferencesPage' ) === false;
+       }
+
+       /**
+        * @param \User $user
+        * @return bool
+        */
+       public function isEnabledByUser( \User $user ) {
+               if ( $user->isAnon() ) {
+                       return false;
+               }
+               if ( $this->config->get( 'PopupsBetaFeature' ) ) {
+                       if ( !class_exists( 'BetaFeatures' ) ) {
+                               $this->getLogger()->error( 'PopupsMode cannot 
be used as a beta feature unless ' .
+                                       'the BetaFeatures extension is 
present.' );
+                               return false;
+                       }
+                       return \BetaFeatures::isFeatureEnabled( $user, 
self::PREVIEWS_BETA_PREFERENCE_NAME );
+               };
+               return $user->getOption( self::PREVIEWS_OPTIN_PREFERENCE_NAME ) 
=== self::PREVIEWS_ENABLED;
+       }
+
+       /**
+        * Get module logger
+        *
+        * @return \Psr\Log\LoggerInterface
+        */
+       public function getLogger() {
+               return LoggerFactory::getInstance( self::LOGGER_CHANNEL );
+       }
+
+       /**
+        * Get Module config
+        *
+        * @return \Config
+        */
+       public function getConfig() {
+               return $this->config;
+       }
+}
diff --git a/tests/phpunit/ModuleTest.php b/tests/phpunit/ModuleTest.php
deleted file mode 100644
index 1ea0007..0000000
--- a/tests/phpunit/ModuleTest.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-use Popups\Module;
-
-/**
- * Popups module tests
- *
- * @group Popups
- */
-class ModuleTest extends MediaWikiTestCase {
-       /**
-        * @covers Popups\Module::showPreviewsOptInOnPreferencesPage
-        * @dataProvider provideConfigForShowPreviewsInOptIn
-        */
-       public function testShowPreviewsPreferencesWhenBetaIsOn( $config, 
$enabled ) {
-               $options = new HashConfig( $config );
-               $module = new Module( $options );
-               $this->assertEquals( $enabled, 
$module->showPreviewsOptInOnPreferencesPage() );
-       }
-
-       /**
-        * @return array
-        */
-       public function provideConfigForShowPreviewsInOptIn() {
-               return [
-                       [
-                               "options" => [
-                                       "PopupsBetaFeature" => false,
-                                       "PopupsHideOptInOnPreferencesPage" => 
false
-                               ],
-                               "enabled" => true
-                       ],
-                       [
-                               "options" => [
-                                       "PopupsBetaFeature" => true,
-                                       "PopupsHideOptInOnPreferencesPage" => 
false
-                               ],
-                               "enabled" => false
-                       ],
-                       [
-                               "options" => [
-                                       "PopupsBetaFeature" => false,
-                                       "PopupsHideOptInOnPreferencesPage" => 
true
-                               ],
-                               "enabled" => false
-                       ]
-               ];
-       }
-}
diff --git a/tests/phpunit/PopupsContextTest.php 
b/tests/phpunit/PopupsContextTest.php
new file mode 100644
index 0000000..b584414
--- /dev/null
+++ b/tests/phpunit/PopupsContextTest.php
@@ -0,0 +1,161 @@
+<?php
+
+use Popups\PopupsContext;
+
+/**
+ * Popups module tests
+ *
+ * @group Popups
+ */
+class PopupsContextTest extends MediaWikiTestCase {
+       /**
+        * @covers Popups\PopupsContext::showPreviewsOptInOnPreferencesPage
+        * @dataProvider provideConfigForShowPreviewsInOptIn
+        */
+       public function testShowPreviewsPreferencesPage( $config, $expected ) {
+               $this->setMwGlobals( $config );
+               $module = new Popups\PopupsContext();
+               $this->assertEquals( $expected, 
$module->showPreviewsOptInOnPreferencesPage() );
+       }
+
+       /**
+        * @covers Popups\PopupsContext::__construct
+        * @covers Popups\PopupsContext::getConfig
+        */
+       public function testContextAndConfigInitialization() {
+               $configMock = $this->getMock( Config::class );
+
+               $configFactoryMock = $this->getMock( ConfigFactory::class, [ 
'makeConfig' ] );
+               $configFactoryMock->expects( $this->once() )
+                       ->method( 'makeConfig' )
+                       ->with( PopupsContext::EXTENSION_NAME )
+                       ->will( $this->returnValue( $configMock ) );
+
+               $mwServices = $this->overrideMwServices();
+               $mwServices->redefineService( 'ConfigFactory', function() use ( 
$configFactoryMock ) {
+                       return $configFactoryMock;
+               } );
+
+               $module = new Popups\PopupsContext();
+               $this->assertSame( $module->getConfig(), $configMock );
+       }
+
+       /**
+        * @return array
+        */
+       public function provideConfigForShowPreviewsInOptIn() {
+               return [
+                       [
+                               "options" => [
+                                       "wgPopupsBetaFeature" => false,
+                                       "wgPopupsHideOptInOnPreferencesPage" => 
false
+                               ],
+                               "expected" => true
+                       ],
+                       [
+                               "options" => [
+                                       "wgPopupsBetaFeature" => true,
+                                       "wgPopupsHideOptInOnPreferencesPage" => 
false
+                               ],
+                               "expected" => false
+                       ],
+                       [
+                               "options" => [
+                                       "wgPopupsBetaFeature" => false,
+                                       "wgPopupsHideOptInOnPreferencesPage" => 
true
+                               ],
+                               "expected" => false
+                       ]
+               ];
+       }
+
+       /**
+        * @covers Popups\PopupsContext::isEnabledByUser
+        * @dataProvider provideTestDataForIsEnabledByUser
+        */
+       public function testIsEnabledByUser( $optIn, $expected ) {
+               $this->setMwGlobals( [
+                       "wgPopupsBetaFeature" => false
+               ] );
+               $module = new PopupsContext();
+               $user = $this->getMutableTestUser()->getUser();
+               $user->setOption( 
PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME, $optIn );
+               $this->assertEquals( $module->isEnabledByUser( $user ), 
$expected );
+       }
+
+       /**
+        * @return array/
+        */
+       public function provideTestDataForIsEnabledByUser() {
+               return [
+                       [
+                               "optin" => PopupsContext::PREVIEWS_ENABLED,
+                               'expected' => true
+                       ],
+                       [
+                               "optin" => PopupsContext::PREVIEWS_DISABLED,
+                               'expected' => false
+                       ]
+               ];
+       }
+
+       /**
+        * @covers Popups\PopupsContext::isEnabledByUser
+        * @dataProvider provideTestDataForIsEnabledByUserWhenBetaEnabled
+        */
+       public function testIsEnabledByUserWhenBetaEnabled( $optIn, $expected ) 
{
+               if ( !class_exists( 'BetaFeatures' ) ) {
+                       $this->markTestSkipped( 'Skipped as BetaFeatures is not 
available' );
+               }
+               $this->setMwGlobals( [
+                       "wgPopupsBetaFeature" => true
+               ] );
+               $module = new PopupsContext();
+               $user = $this->getMutableTestUser()->getUser();
+               $user->setOption( PopupsContext::PREVIEWS_BETA_PREFERENCE_NAME, 
$optIn );
+               $this->assertEquals( $module->isEnabledByUser( $user ), 
$expected );
+       }
+
+       /**
+        * Check that Page Previews are disabled for anonymous user
+        */
+       public function testAnonUserHasDisabledPagePreviews() {
+               $user = $this->getMutableTestUser()->getUser();
+               $user->setId( 0 );
+               $user->setOption( PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME,
+                       PopupsContext::PREVIEWS_ENABLED );
+               $this->setMwGlobals( [
+                       "wgPopupsBetaFeature" => false
+               ] );
+
+               $context = new PopupsContext();
+               $this->assertEquals( false, $context->isEnabledByUser( $user ) 
);
+       }
+       /**
+        * @return array/
+        */
+       public function provideTestDataForIsEnabledByUserWhenBetaEnabled() {
+               return [
+                       [
+                               "optin" => PopupsContext::PREVIEWS_ENABLED,
+                               'expected' => true
+                       ],
+                       [
+                               "optin" => PopupsContext::PREVIEWS_DISABLED,
+                               'expected' => false
+                       ]
+               ];
+       }
+
+       /**
+        * @covers Popups\PopupsContext::getLogger
+        */
+       public function testGetLogger() {
+               $loggerMock = $this->getMock( \Psr\Log\LoggerInterface::class );
+
+               $this->setLogger( PopupsContext::LOGGER_CHANNEL, $loggerMock );
+               $context = new PopupsContext();
+               $this->assertSame( $loggerMock, $context->getLogger() );
+       }
+
+}
diff --git a/tests/phpunit/PopupsHooksTest.php 
b/tests/phpunit/PopupsHooksTest.php
new file mode 100644
index 0000000..f6108ac
--- /dev/null
+++ b/tests/phpunit/PopupsHooksTest.php
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * Integration tests for Page Preview hooks
+ *
+ * @group Popups
+ */
+class PopupsHooksTest extends MediaWikiTestCase {
+
+       protected function tearDown() {
+               PopupsHooks::resetContext();
+               parent::tearDown();
+       }
+
+       /**
+        * @covers PopupsHooks::onGetBetaPreferences
+        */
+       public function testOnGetBetaPreferencesBetaDisabled() {
+               $prefs = [ 'someNotEmptyValue' => 'notEmpty' ];
+               $this->setMwGlobals( [ 'wgPopupsBetaFeature' => false ] );
+
+               PopupsHooks::onGetBetaPreferences( 
$this->getTestUser()->getUser(), $prefs );
+               $this->assertCount( 1, $prefs );
+               $this->assertEquals( 'notEmpty', $prefs[ 'someNotEmptyValue'] );
+       }
+
+       /**
+        * @covers PopupsHooks::onGetBetaPreferences
+        */
+       public function testOnGetBetaPreferencesBetaEnabled() {
+               $prefs = [ 'someNotEmptyValue' => 'notEmpty' ];
+               $this->setMwGlobals( [ 'wgPopupsBetaFeature' => true ] );
+
+               PopupsHooks::onGetBetaPreferences( 
$this->getTestUser()->getUser(), $prefs );
+               $this->assertCount( 2, $prefs );
+               $this->assertArrayHasKey( 
\Popups\PopupsContext::PREVIEWS_BETA_PREFERENCE_NAME, $prefs );
+       }
+
+       /**
+        * @covers PopupsHooks::onGetPreferences
+        * @covers PopupsHooks::injectContext
+        */
+       public function testOnGetPreferencesPreviewsDisabled() {
+               $contextMock = $this->getMock( \Popups\PopupsContext::class,
+                       [ 'showPreviewsOptInOnPreferencesPage' ] );
+               $contextMock->expects( $this->once() )
+                       ->method( 'showPreviewsOptInOnPreferencesPage' )
+                       ->will( $this->returnValue( false ) );
+
+               PopupsHooks::injectContext( $contextMock );
+               $prefs = [ 'someNotEmptyValue' => 'notEmpty' ];
+
+               PopupsHooks::onGetPreferences( $this->getTestUser()->getUser(), 
$prefs );
+               $this->assertCount( 1, $prefs );
+               $this->assertEquals( 'notEmpty', $prefs[ 'someNotEmptyValue'] );
+       }
+
+       /**
+        * @covers PopupsHooks::onGetPreferences
+        * @covers PopupsHooks::injectContext
+        */
+       public function testOnGetPreferencesPreviewsEnabled() {
+               $contextMock = $this->getMock( \Popups\PopupsContext::class,
+                       [ 'showPreviewsOptInOnPreferencesPage' ] );
+               $contextMock->expects( $this->once() )
+                       ->method( 'showPreviewsOptInOnPreferencesPage' )
+                       ->will( $this->returnValue( true ) );
+
+               PopupsHooks::injectContext( $contextMock );
+               $prefs = [ 'someNotEmptyValue' => 'notEmpty' ];
+
+               PopupsHooks::onGetPreferences( $this->getTestUser()->getUser(), 
$prefs );
+               $this->assertCount( 2, $prefs );
+               $this->assertEquals( 'notEmpty', $prefs[ 'someNotEmptyValue'] );
+               $this->assertArrayHasKey( 
\Popups\PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME, $prefs );
+       }
+
+       /**
+        * @covers PopupsHooks::onResourceLoaderTestModules
+        */
+       public function testOnResourceLoaderTestModules() {
+               $testModules = [ 'someNotEmptyValue' => 'notEmpty' ];
+               $resourceLoaderMock = $this->getMock( ResourceLoader::class );
+               PopupsHooks::onResourceLoaderTestModules( $testModules, 
$resourceLoaderMock );
+
+               $this->assertCount( 2, $testModules );
+               $this->assertEquals( 'notEmpty', $testModules[ 
'someNotEmptyValue' ] );
+               $this->assertArrayHasKey( 'qunit', $testModules, 
'ResourceLoader expects qunit test modules' );
+               $this->assertCount( 2, $testModules[ 'qunit' ], 'ResourceLoader 
expects 2 test modules. ' );
+       }
+
+       /**
+        * @covers PopupsHooks::onResourceLoaderGetConfigVars
+        */
+       public function testOnResourceLoaderGetConfigVars() {
+               $vars = [ 'something' => 'notEmpty' ];
+               $value = 10;
+               $this->setMwGlobals( [ 'wgSchemaPopupsSamplingRate' => $value ] 
);
+               PopupsHooks::onResourceLoaderGetConfigVars( $vars );
+               $this->assertCount( 2, $vars );
+               $this->assertEquals( $value, $vars[ 
'wgPopupsSchemaPopupsSamplingRate' ] );
+       }
+
+       /**
+        * @covers PopupsHooks::onExtensionRegistration
+        */
+       public function testOnExtensionRegistration() {
+               global $wgDefaultUserOptions;
+
+               $test = 'testValue';
+               $this->setMwGlobals( [ 'wgPopupsOptInDefaultState' => $test ] );
+               PopupsHooks::onExtensionRegistration();
+               $this->assertEquals( $test,
+                       $wgDefaultUserOptions[ 
\Popups\PopupsContext::PREVIEWS_OPTIN_PREFERENCE_NAME ] );
+       }
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/327696
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I3cbcdc1303411b28b613afa6dd1a00b410891471
Gerrit-PatchSet: 10
Gerrit-Project: mediawiki/extensions/Popups
Gerrit-Branch: mpga
Gerrit-Owner: Pmiazga <[email protected]>
Gerrit-Reviewer: Phuedx <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to