From 214a3703dfd43671d53749b3f51e669903514182 Mon Sep 17 00:00:00 2001 From: lucky091588 Date: Thu, 19 Nov 2020 21:47:13 +0800 Subject: [PATCH] dev/core#2199: Add pre and post hooks for ufgroup entity --- CRM/Core/BAO/UFGroup.php | 6 ++ tests/phpunit/CRM/Core/BAO/UFGroupTest.php | 109 +++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 tests/phpunit/CRM/Core/BAO/UFGroupTest.php diff --git a/CRM/Core/BAO/UFGroup.php b/CRM/Core/BAO/UFGroup.php index fcf582ef6f..f1b49eceae 100644 --- a/CRM/Core/BAO/UFGroup.php +++ b/CRM/Core/BAO/UFGroup.php @@ -1459,6 +1459,10 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { if (!empty($params['group_type']) && is_array($params['group_type'])) { $params['group_type'] = implode(',', $params['group_type']); } + + $hook = empty($params['id']) ? 'create' : 'edit'; + CRM_Utils_Hook::pre($hook, 'UFGroup', ($params['id'] ?? NULL), $params); + $ufGroup = new CRM_Core_DAO_UFGroup(); $ufGroup->copyValues($params); @@ -1475,6 +1479,8 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup { $ufGroup->save(); } + CRM_Utils_Hook::post($hook, 'UFGroup', $ufGroup->id, $ufGroup); + return $ufGroup; } diff --git a/tests/phpunit/CRM/Core/BAO/UFGroupTest.php b/tests/phpunit/CRM/Core/BAO/UFGroupTest.php new file mode 100644 index 0000000000..d753b34072 --- /dev/null +++ b/tests/phpunit/CRM/Core/BAO/UFGroupTest.php @@ -0,0 +1,109 @@ +callAPISuccess('SystemLog', 'create', [ + 'message' => "CRM_Core_BAO_UFGroupTest::implementHookPre $id", + 'level' => 'info', + ]); + } + } + } + + public function implementHookPost($op, $objectName, $objectId, &$objectRef) { + if ($objectName == 'UFGroup') { + if ($op == 'create') { + $objectRef->is_active = 0; + } + elseif ($op == 'delete') { + $systemLog = $this->callAPISuccess('SystemLog', 'create', [ + 'message' => "CRM_Core_BAO_UFGroupTest::implementHookPost $objectId", + 'level' => 'info', + ]); + } + } + } + + public function testPreHookIsCalledForCreate() { + // Specify pre hook implementation. + $this->hookClass->setHook('civicrm_pre', array($this, 'implementHookPre')); + + // Create a ufgroup with BAO. + $params = [ + 'title' => 'testPreHookIsCalledForCreate', + 'is_active' => 1, + ]; + $ufGroup = CRM_Core_BAO_UFGroup::add($params); + + // Assert that pre hook implemntation was called. + $this->assertEquals('testPreHookIsCalledForCreate', $ufGroup->title); + $this->assertEquals(0, $ufGroup->is_active, 'Is active should be 0'); + } + + public function testPreHookIsCalledForDelete() { + // Specify pre hook implementation. + $this->hookClass->setHook('civicrm_pre', array($this, 'implementHookPre')); + + // Create a ufgroup with BAO. + $params = [ + 'title' => 'testPreHookIsCalledForDelete', + 'is_active' => 1, + ]; + $ufGroup = CRM_Core_BAO_UFGroup::add($params); + $ufGroupID = $ufGroup->id; + $ufGroup = CRM_Core_BAO_UFGroup::del($ufGroupID); + + // Assert that pre hook implemntation was called for delete op. + $systemLogCount = $this->callAPISuccess('SystemLog', 'getcount', [ + 'message' => "CRM_Core_BAO_UFGroupTest::implementHookPre $ufGroupID", + 'level' => 'info', + ]); + + $this->assertEquals(1, $systemLogCount, 'There should be one system log entry with message "CRM_Core_BAO_UFGroupTest::implementHookPre ' . $ufGroupID . '"'); + } + + public function testPostHookIsCalledForCreate() { + $this->hookClass->setHook('civicrm_post', array($this, 'implementHookPost')); + + $params = [ + 'title' => 'testPostHookIsCalledForCreate', + 'is_active' => 1, + ]; + $ufGroup = CRM_Core_BAO_UFGroup::add($params); + + // Assert that pre hook implemntation was called. + $this->assertEquals('testPostHookIsCalledForCreate', $ufGroup->title); + $this->assertEquals(0, $ufGroup->is_active, 'Is active should be 0'); + } + + public function testPostHookIsCalledForDelete() { + $this->hookClass->setHook('civicrm_post', array($this, 'implementHookPost')); + + $params = [ + 'title' => 'testPostHookIsCalledForDelete', + 'is_active' => 1, + ]; + $ufGroup = CRM_Core_BAO_UFGroup::add($params); + $ufGroupID = $ufGroup->id; + $ufGroup = CRM_Core_BAO_UFGroup::del($ufGroupID); + + // Assert that pre hook implemntation was called for delete op. + $systemLogCount = $this->callAPISuccess('SystemLog', 'getcount', [ + 'message' => "CRM_Core_BAO_UFGroupTest::implementHookPost $ufGroupID", + 'level' => 'info', + ]); + + $this->assertEquals(1, $systemLogCount, 'There should be one system log entry with message "CRM_Core_BAO_UFGroupTest::implementHookPost ' . $ufGroupID . '"'); + } + +} -- 2.25.1