Merge "Test coverage WatchedItemStore::duplicateAllAssociatedEntries to 100%"
[lhc/web/wiklou.git] / includes / WatchedItemStore.php
index 603bacd..8ae7932 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
-use MediaWiki\MediaWikiServices;
 use Wikimedia\Assert\Assert;
 
 /**
@@ -50,6 +49,11 @@ class WatchedItemStore implements StatsdAwareInterface {
         */
        private $stats;
 
+       /**
+        * @var self|null
+        */
+       private static $instance;
+
        /**
         * @param LoadBalancer $loadBalancer
         * @param HashBagOStuff $cache
@@ -121,11 +125,43 @@ class WatchedItemStore implements StatsdAwareInterface {
        }
 
        /**
-        * @deprecated use MediaWikiServices::getInstance()->getWatchedItemStore()
+        * Overrides the default instance of this class
+        * This is intended for use while testing and will fail if MW_PHPUNIT_TEST is not defined.
+        *
+        * If this method is used it MUST also be called with null after a test to ensure a new
+        * default instance is created next time getDefaultInstance is called.
+        *
+        * @param WatchedItemStore|null $store
+        *
+        * @return ScopedCallback to reset the overridden value
+        * @throws MWException
+        */
+       public static function overrideDefaultInstance( WatchedItemStore $store = null ) {
+               if ( !defined( 'MW_PHPUNIT_TEST' ) ) {
+                       throw new MWException(
+                               'Cannot override ' . __CLASS__ . 'default instance in operation.'
+                       );
+               }
+
+               $previousValue = self::$instance;
+               self::$instance = $store;
+               return new ScopedCallback( function() use ( $previousValue ) {
+                       self::$instance = $previousValue;
+               } );
+       }
+
+       /**
         * @return self
         */
        public static function getDefaultInstance() {
-               return MediaWikiServices::getInstance()->getWatchedItemStore();
+               if ( !self::$instance ) {
+                       self::$instance = new self(
+                               wfGetLB(),
+                               new HashBagOStuff( [ 'maxKeys' => 100 ] )
+                       );
+                       self::$instance->setStatsdDataFactory( RequestContext::getMain()->getStats() );
+               }
+               return self::$instance;
        }
 
        private function getCacheKey( User $user, LinkTarget $target ) {