Fix metadata cache clear event
authorcolemanw <coleman@civicrm.org>
Tue, 23 Jan 2024 15:16:01 +0000 (10:16 -0500)
committercolemanw <coleman@civicrm.org>
Tue, 23 Jan 2024 23:26:57 +0000 (18:26 -0500)
Civi/Core/Container.php
Civi/Core/MetadataFlush.php
tests/phpunit/Civi/Test/ExampleSubscriberTest.php

index ce8572fc6c988f0a52880bf7fda980ab95956218..ab8521b184fcf96d41046c9ec94e809835794465 100644 (file)
@@ -188,8 +188,7 @@ class Container {
     foreach ($basicCaches as $cacheSvc => $cacheGrp) {
       $definitionParams = [
         'name' => $cacheGrp . (in_array($cacheGrp, $verSuffixCaches) ? $verSuffix : ''),
-        // FIXME: Uncommenting below causes test failure
-        // 'service' => $cacheSvc,
+        'service' => $cacheSvc,
         'type' => ['*memory*', 'SqlGroup', 'ArrayCache'],
       ];
       // For Caches that we don't really care about the ttl for and/or maybe accessed
index 2e700be6b775f12b9f67e6edef52bc7afb09554c..15af6334fa84e16a19b5a6f395a6e979148de475 100644 (file)
@@ -31,7 +31,13 @@ class MetadataFlush extends Service\AutoSubscriber {
    * as it's being deleted.
    */
   public static function onClearMetadata(): void {
-    \Civi::resources()->resetCacheCode();
+    // This seems to cause problems during unit test setup
+    if (CIVICRM_UF === 'UnitTests') {
+      return;
+    }
+    if (\Civi\Core\Container::singleton()->has('resources')) {
+      \Civi::resources()->resetCacheCode();
+    }
   }
 
 }
index fac648ee62828e695b7ad94c3f10c86d0ce18c6b..adc63c89fc8b3577ba3eeec058bf5b1dbd7b2c93 100644 (file)
@@ -50,6 +50,7 @@ class ExampleSubscriberTest extends \PHPUnit\Framework\TestCase implements Headl
       'civi.api.prepare' => ['myCiviApiPrepare', 1234],
       'hook_civicrm_alterContent' => ['myAlterContentObject', -7000],
       '&hook_civicrm_alterContent' => ['myAlterContentParams', -8000],
+      'civi.cache.metadata.clear' => 'myCacheClear',
     ];
   }
 
@@ -69,6 +70,10 @@ class ExampleSubscriberTest extends \PHPUnit\Framework\TestCase implements Headl
     $content .= ' ' . __FUNCTION__;
   }
 
+  public function myCacheClear(GenericHookEvent $event): void {
+    $this->tracker['civi.cache.metadata.clear'][__FUNCTION__] = TRUE;
+  }
+
   public function testPageOutput(): void {
     ob_start();
     $p = new Main();
@@ -86,4 +91,10 @@ class ExampleSubscriberTest extends \PHPUnit\Framework\TestCase implements Headl
     $this->assertEquals(['myCiviApiPrepare' => TRUE], $this->tracker['civi.api.prepare']);
   }
 
+  public function testCacheClearEvent(): void {
+    $this->tracker['civi.cache.metadata.clear'] = NULL;
+    \Civi::cache('metadata')->clear();
+    $this->assertEquals(['myCacheClear' => TRUE], $this->tracker['civi.cache.metadata.clear']);
+  }
+
 }