Fix for intermittent test fail on checksum time
authorEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 1 Dec 2023 02:39:15 +0000 (15:39 +1300)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 1 Dec 2023 02:39:15 +0000 (15:39 +1300)
tests/phpunit/CRM/Core/BAO/CustomFieldTest.php
tests/phpunit/CRM/Core/BAO/MessageTemplateTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php

index ca77e5441e68009142babd30f662affd91ce1a9f..393f5cb6dce5ec9282f92cc06a85b602714a578d 100644 (file)
@@ -982,6 +982,7 @@ class CRM_Core_BAO_CustomFieldTest extends CiviUnitTestCase {
    * Check that outputting the display value for a file field with No description doesn't generate error
    */
   public function testFileDisplayValueNoDescription(): void {
+    $this->useFrozenTime();
     $customGroup = $this->customGroupCreate([
       'extends' => 'Individual',
       'title' => 'Test Contact File Custom Group',
@@ -996,7 +997,7 @@ class CRM_Core_BAO_CustomFieldTest extends CiviUnitTestCase {
     $file = $this->callAPISuccess('File', 'create', [
       'uri' => $filePath,
     ]);
-    $individual = $this->individualCreate(['custom_' . $fileField['id'] => $file['id']]);
+    $this->individualCreate(['custom_' . $fileField['id'] => $file['id']]);
     $expectedDisplayValue = CRM_Core_BAO_File::paperIconAttachment('*', $file['id'])[$file['id']];
     $this->assertEquals($expectedDisplayValue, CRM_Core_BAO_CustomField::displayValue($file['id'], $fileField['id']));
   }
index 8b51e6f0eb2c22b4ff8ffec25493000e20e0b306..39c34d6c3cb834749895323048a9aa249be9ca09 100644 (file)
@@ -516,7 +516,7 @@ London, 90210
    */
   public function testContactTokens(): void {
     // Freeze the time at the start of the test, so checksums don't suffer from second rollovers.
-    $restoreTime = $this->useFrozenTime();
+    $this->useFrozenTime();
 
     $this->hookClass->setHook('civicrm_tokenValues', [$this, 'hookTokenValues']);
     $this->hookClass->setHook('civicrm_tokens', [$this, 'hookTokens']);
@@ -574,7 +574,6 @@ emo
     $this->assertEquals($expected_parts[0], $returned_parts[0]);
     $this->assertApproxEquals($expected_parts[1], $returned_parts[1], 2);
     $this->assertEquals($expected_parts[2], $returned_parts[2]);
-    $restoreTime->cleanup();
   }
 
   /**
@@ -585,10 +584,7 @@ emo
    */
   public function testTokensIndividually(): void {
     // Freeze the time at the start of the test, so checksums don't suffer from second rollovers.
-    // This variable releases the time on destruct so needs to be assigned for the
-    // duration of the test.
-    /** @noinspection PhpUnusedLocalVariableInspection */
-    $restoreTime = $this->useFrozenTime();
+    $this->useFrozenTime();
 
     $this->hookClass->setHook('civicrm_tokenValues', [$this, 'hookTokenValues']);
     $this->hookClass->setHook('civicrm_tokens', [$this, 'hookTokens']);
@@ -1010,21 +1006,6 @@ primary_phone:123-456
 ', $messageHtml);
   }
 
-  /**
-   * Temporarily freeze time, as perceived through `CRM_Utils_Time`.
-   *
-   * @return \CRM_Utils_AutoClean
-   */
-  protected function useFrozenTime(): CRM_Utils_AutoClean {
-    $oldTimeFunc = getenv('TIME_FUNC');
-    putenv('TIME_FUNC=frozen');
-    CRM_Utils_Time::setTime(date('Y-m-d H:i:s'));
-    return CRM_Utils_AutoClean::with(function () use ($oldTimeFunc) {
-      putenv($oldTimeFunc === NULL ? 'TIME_FUNC' : "TIME_FUNC=$oldTimeFunc");
-      CRM_Utils_Time::resetTime();
-    });
-  }
-
   /**
    * @param array $tokenData
    *
index 7c14de40f0455f9f752938b3e7c64639a4a2bcbf..fd65764ef6b3a69242619736398e51350f55713e 100644 (file)
@@ -201,6 +201,11 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
    */
   protected $formController;
 
+  /**
+   * @var \CRM_Utils_AutoClean
+   */
+  private $frozenTime;
+
   /**
    *  Constructor.
    *
@@ -457,6 +462,7 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
   protected function tearDown(): void {
     $this->_apiversion = 3;
     $this->resetLabels();
+    $this->frozenTime = NULL;
 
     error_reporting(E_ALL & ~E_NOTICE);
     $this->resetHooks();
@@ -918,6 +924,19 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
     return $result['values'][$result['id']];
   }
 
+  /**
+   * Temporarily freeze time, as perceived through `CRM_Utils_Time`.
+   */
+  protected function useFrozenTime(): void {
+    $oldTimeFunc = getenv('TIME_FUNC');
+    putenv('TIME_FUNC=frozen');
+    CRM_Utils_Time::setTime(date('Y-m-d H:i:s'));
+    $this->frozenTime = CRM_Utils_AutoClean::with(function () use ($oldTimeFunc) {
+      putenv($oldTimeFunc === NULL ? 'TIME_FUNC' : "TIME_FUNC=$oldTimeFunc");
+      CRM_Utils_Time::resetTime();
+    });
+  }
+
   /**
    * Delete Tag.
    *