Add unit test for #20144
authorEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 17 May 2021 06:56:40 +0000 (18:56 +1200)
committerEileen McNaughton <emcnaughton@wikimedia.org>
Mon, 17 May 2021 06:58:40 +0000 (18:58 +1200)
tests/phpunit/CRM/Core/ManagedEntitiesTest.php
tests/phpunit/CiviTest/CiviUnitTestCase.php

index 2a0b640efa239e168127fee4a4a7fd2602569dbc..3246b90cc9b07bb5e3cd2ab483fd33ab762465d6 100644 (file)
@@ -91,6 +91,18 @@ class CRM_Core_ManagedEntitiesTest extends CiviUnitTestCase {
         'parameters' => '',
       ],
     ];
+    $this->fixtures['com.example.one-Contact'] = [
+      'module' => 'com.example.one',
+      'name' => 'Contact',
+      'entity' => 'Contact',
+      'params' => [
+        'version' => 3,
+        'first_name' => 'Daffy',
+        'last_name' => 'Duck',
+        'contact_type' => 'Individual',
+        'update' => 'never',
+      ],
+    ];
 
     $this->apiKernel = \Civi::service('civi_api_kernel');
     $this->adhocProvider = new \Civi\API\Provider\AdhocProvider(3, 'CustomSearch');
@@ -373,13 +385,15 @@ class CRM_Core_ManagedEntitiesTest extends CiviUnitTestCase {
   /**
    * Setup an active module with an entity -- then disable and re-enable the
    * module
+   *
+   * @throws \CRM_Core_Exception
    */
-  public function testDeactivateReactivateModule() {
+  public function testDeactivateReactivateModule(): void {
     $manager = CRM_Extension_System::singleton()->getManager();
-
-    // create first managed entity ('foo')
-    $decls = [];
-    $decls[] = $this->fixtures['com.example.one-foo'];
+    // Register the hook so we can check there is no effort to de-activate contact.
+    $this->hookClass->setHook('civicrm_pre', [$this, 'preHook']);
+    // create first managed entities ('foo' & Contact)
+    $decls = [$this->fixtures['com.example.one-foo'], $this->fixtures['com.example.one-Contact']];
     // Mock the contextual process info that would be added by CRM_Extension_Manager::install
     $manager->setProcessesForTesting(['com.example.one' => ['install']]);
     $me = new CRM_Core_ManagedEntities($this->modules, $decls);
@@ -484,6 +498,20 @@ class CRM_Core_ManagedEntitiesTest extends CiviUnitTestCase {
     $manager->setProcessesForTesting([]);
   }
 
+  /**
+   * Pre hook to test contact is not called on disable.
+   *
+   * @param string $op
+   * @param string $objectName
+   * @param int|null $id
+   * @param array $params
+   */
+  public function preHook($op, $objectName, $id, $params): void {
+    if ($op === 'edit' && $objectName === 'Individual') {
+      $this->assertArrayNotHasKey('is_active', $params);
+    }
+  }
+
   /**
    * Setup an active module with an entity -- then entirely uninstall the
    * module
index a6e5986b396a965cd9c0a73432967eca43cf2eeb..dfd7c3db30bce23294cd10df36bdc8b7e3e29cb2 100644 (file)
@@ -158,11 +158,11 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase {
    *
    * This can be used to test hooks within tests. For example in the ACL_PermissionTrait:
    *
-   * $this->hookClass->setHook('civicrm_aclWhereClause', array($this, 'aclWhereHookAllResults'));
+   * $this->hookClass->setHook('civicrm_aclWhereClause', [$this, 'aclWhereHookAllResults']);
    *
    * @var \CRM_Utils_Hook_UnitTests
    */
-  public $hookClass = NULL;
+  public $hookClass;
 
   /**
    * @var array