From d8af2b484b3f4372b5001218ec1b8b1f37a57470 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 27 Apr 2023 17:01:57 -0400 Subject: [PATCH] Component Extensions - Fix upgrade and test errors --- CRM/Core/Component.php | 3 +++ CRM/Upgrade/Incremental/php/FiveSixtyTwo.php | 2 ++ tests/phpunit/CRM/Activity/BAO/ActivityTest.php | 6 +++++- tests/phpunit/CRM/Core/BAO/NavigationTest.php | 5 +++-- tests/phpunit/CiviTest/CiviUnitTestCase.php | 1 + tests/phpunit/api/v3/ACLPermissionTest.php | 2 +- tests/phpunit/api/v3/ExtensionTest.php | 6 ++++-- tests/phpunit/api/v3/MailingTest.php | 3 ++- 8 files changed, 21 insertions(+), 7 deletions(-) diff --git a/CRM/Core/Component.php b/CRM/Core/Component.php index e2b1c15f57..a837ca92ab 100644 --- a/CRM/Core/Component.php +++ b/CRM/Core/Component.php @@ -428,6 +428,9 @@ class CRM_Core_Component { * @throws \CRM_Core_Exception. */ public static function onToggleComponents($oldValue, $newValue): void { + if (CRM_Core_Config::isUpgradeMode()) { + return; + } $manager = CRM_Extension_System::singleton()->getManager(); $toEnable = $toDisable = []; foreach (self::getComponents() as $component) { diff --git a/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php b/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php index 031977cb90..0c59c66b58 100644 --- a/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php +++ b/CRM/Upgrade/Incremental/php/FiveSixtyTwo.php @@ -94,6 +94,8 @@ class CRM_Upgrade_Incremental_php_FiveSixtyTwo extends CRM_Upgrade_Incremental_B 1 => [$lowestDomainId, 'Positive'], 2 => ['enable_components', 'String'], ]); + // Flush the settings cache after updating the `enable_components` setting. + \Civi\Core\Container::getBootService('settings_manager')->flush(); return TRUE; } diff --git a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php index 729c0b3f0e..8749716865 100644 --- a/tests/phpunit/CRM/Activity/BAO/ActivityTest.php +++ b/tests/phpunit/CRM/Activity/BAO/ActivityTest.php @@ -410,7 +410,11 @@ class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { $this->setShowCaseActivitiesInCore(FALSE); $this->setUpForActivityDashboardTests(); $this->addCaseWithActivity(); - CRM_Core_Config::singleton()->userPermissionClass->permissions[] = 'access all cases and activities'; + CRM_Core_Config::singleton()->userPermissionClass->permissions = [ + 'access CiviCRM', + 'view all contacts', + 'access all cases and activities', + ]; $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($this->_params); $this->assertEquals(8, $activityCount); diff --git a/tests/phpunit/CRM/Core/BAO/NavigationTest.php b/tests/phpunit/CRM/Core/BAO/NavigationTest.php index e6fa7505ab..b865fa6055 100644 --- a/tests/phpunit/CRM/Core/BAO/NavigationTest.php +++ b/tests/phpunit/CRM/Core/BAO/NavigationTest.php @@ -297,6 +297,7 @@ class CRM_Core_BAO_NavigationTest extends CiviUnitTestCase { $this->assertTrue(CRM_Core_BAO_Navigation::checkPermission($menuItem)); CRM_Core_BAO_ConfigSetting::disableComponent('CiviContribute'); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM', 'access CiviContribute']; $this->assertFalse(CRM_Core_BAO_Navigation::checkPermission($menuItem)); CRM_Core_BAO_ConfigSetting::enableComponent('CiviContribute'); @@ -307,6 +308,7 @@ class CRM_Core_BAO_NavigationTest extends CiviUnitTestCase { $this->assertTrue(CRM_Core_BAO_Navigation::checkPermission($menuItem)); CRM_Core_BAO_ConfigSetting::disableComponent('CiviContribute'); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviContribute']; $this->assertFalse(CRM_Core_BAO_Navigation::checkPermission($menuItem)); CRM_Core_BAO_ConfigSetting::enableComponent('CiviMail'); @@ -322,10 +324,9 @@ class CRM_Core_BAO_NavigationTest extends CiviUnitTestCase { $this->assertTrue(CRM_Core_BAO_Navigation::checkPermission($menuItem)); CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviCRM']; $this->assertFalse(CRM_Core_BAO_Navigation::checkPermission($menuItem)); - CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviMail', 'delete in CiviMail']; CRM_Core_BAO_ConfigSetting::disableComponent('CiviMail'); + CRM_Core_Config::singleton()->userPermissionClass->permissions = ['access CiviMail', 'delete in CiviMail']; $this->assertFalse(CRM_Core_BAO_Navigation::checkPermission($menuItem)); - CRM_Core_BAO_ConfigSetting::enableComponent('CiviContribute'); } } diff --git a/tests/phpunit/CiviTest/CiviUnitTestCase.php b/tests/phpunit/CiviTest/CiviUnitTestCase.php index 5166fb7d1e..6efb97311f 100644 --- a/tests/phpunit/CiviTest/CiviUnitTestCase.php +++ b/tests/phpunit/CiviTest/CiviUnitTestCase.php @@ -488,6 +488,7 @@ class CiviUnitTestCase extends PHPUnit\Framework\TestCase { protected function assertPostConditions(): void { // Reset to version 3 as not all (e.g payments) work on v4 $this->_apiversion = 3; + CRM_Core_BAO_ConfigSetting::enableComponent('CiviContribute'); if ($this->isLocationTypesOnPostAssert) { $this->assertLocationValidity(); } diff --git a/tests/phpunit/api/v3/ACLPermissionTest.php b/tests/phpunit/api/v3/ACLPermissionTest.php index 0182f7717a..e5dd1ec6e9 100644 --- a/tests/phpunit/api/v3/ACLPermissionTest.php +++ b/tests/phpunit/api/v3/ACLPermissionTest.php @@ -55,6 +55,7 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase { public function setUp(): void { parent::setUp(); + CRM_Core_BAO_ConfigSetting::enableAllComponents(); CRM_Core_DAO::createTestObject('CRM_Pledge_BAO_Pledge', [], 1, 0); $this->callAPISuccess('Phone', 'create', ['id' => $this->individualCreate(['email' => '']), 'phone' => '911', 'location_type_id' => 'Home']); $this->prepareForACLs(); @@ -748,7 +749,6 @@ class api_v3_ACLPermissionTest extends CiviUnitTestCase { */ public function testGetActivityCheckPermissionsByCaseComponent(int $version): void { $this->_apiversion = $version; - CRM_Core_BAO_ConfigSetting::enableComponent('CiviCase'); $activity = $this->activityCreate(['activity_type_id' => 'Open Case']); $activity2 = $this->activityCreate(['activity_type_id' => 'Pledge Reminder']); $this->hookClass->setHook('civicrm_aclWhereClause', [ diff --git a/tests/phpunit/api/v3/ExtensionTest.php b/tests/phpunit/api/v3/ExtensionTest.php index 8cbc933d18..1412fffd6e 100644 --- a/tests/phpunit/api/v3/ExtensionTest.php +++ b/tests/phpunit/api/v3/ExtensionTest.php @@ -93,18 +93,20 @@ class api_v3_ExtensionTest extends CiviUnitTestCase { public function testExtensionGetByStatus() { $installed = $this->callAPISuccess('extension', 'get', ['status' => 'installed', 'options' => ['limit' => 0]]); $uninstalled = $this->callAPISuccess('extension', 'get', ['status' => 'uninstalled', 'options' => ['limit' => 0]]); + $disabled = $this->callAPISuccess('extension', 'get', ['status' => 'disabled', 'options' => ['limit' => 0]]); // If the filter works, then results should be strictly independent. $this->assertEquals( [], array_intersect( CRM_Utils_Array::collect('key', $installed['values']), - CRM_Utils_Array::collect('key', $uninstalled['values']) + CRM_Utils_Array::collect('key', $uninstalled['values']), + CRM_Utils_Array::collect('key', $disabled['values']) ) ); $all = $this->callAPISuccess('extension', 'get', ['options' => ['limit' => 0]]); - $this->assertEquals($all['count'], $installed['count'] + $uninstalled['count']); + $this->assertEquals($all['count'], $installed['count'] + $uninstalled['count'] + $disabled['count']); } public function testGetMultipleExtensions() { diff --git a/tests/phpunit/api/v3/MailingTest.php b/tests/phpunit/api/v3/MailingTest.php index effacdf1c6..de9c765597 100644 --- a/tests/phpunit/api/v3/MailingTest.php +++ b/tests/phpunit/api/v3/MailingTest.php @@ -44,6 +44,8 @@ class api_v3_MailingTest extends CiviUnitTestCase { public function setUp(): void { parent::setUp(); + // Enable components BEFORE starting the transaction or the cache clearing will break the transaction + CRM_Core_BAO_ConfigSetting::enableAllComponents(); $this->useTransaction(); // DGW CRM_Mailing_BAO_MailingJob::$mailsProcessed = 0; @@ -84,7 +86,6 @@ class api_v3_MailingTest extends CiviUnitTestCase { */ public function testMailerCreateSuccess(int $version): void { $this->_apiversion = $version; - $this->enableCiviCampaign(); $this->callAPISuccess('Campaign', 'create', ['name' => 'big campaign', 'title' => 'abc']); $result = $this->callAPIAndDocument('mailing', 'create', $this->_params + ['scheduled_date' => 'now', 'campaign_id' => 'big campaign'], __FUNCTION__, __FILE__); $jobs = $this->callAPISuccess('MailingJob', 'get', ['mailing_id' => $result['id']]); -- 2.25.1