3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
12 require_once 'api/Wrapper.php';
15 * Test class for API functions
17 * @package CiviCRM_APIv3
20 class api_v3_APIWrapperTest
extends CiviUnitTestCase
{
21 public $DBResetRequired = FALSE;
24 protected $_apiversion = 3;
27 * Sets up the fixture, for example, opens a network connection.
28 * This method is called before a test is executed.
30 protected function setUp() {
32 $this->useTransaction(TRUE);
33 CRM_Utils_Hook_UnitTests
::singleton()->setHook('civicrm_apiWrappers', [$this, 'onApiWrappers']);
37 * Tears down the fixture, for example, closes a network connection.
38 * This method is called after a test is executed.
40 protected function tearDown() {
48 public function onApiWrappers(&$apiWrappers, $apiRequest) {
49 $this->assertTrue(is_string($apiRequest['entity']) && !empty($apiRequest['entity']));
50 $this->assertTrue(is_string($apiRequest['action']) && !empty($apiRequest['action']));
51 $this->assertTrue(is_array($apiRequest['params']) && !empty($apiRequest['params']));
53 $apiWrappers[] = new api_v3_APIWrapperTest_Impl();
56 public function testWrapperHook() {
57 // Note: this API call would fail due to missing contact_type, but
58 // the wrapper intervenes (fromApiInput)
59 // Note: The output would define "display_name", but the wrapper
60 // intervenes (toApiOutput) and replaces with "display_name_munged".
61 $result = $this->callAPISuccess('contact', 'create', [
62 'contact_type' => 'Invalid',
63 'first_name' => 'First',
64 'last_name' => 'Last',
66 $this->assertEquals('First', $result['values'][$result['id']]['first_name']);
67 $this->assertEquals('MUNGE! First Last', $result['values'][$result['id']]['display_name_munged']);
73 * Class api_v3_APIWrapperTest_Impl
75 class api_v3_APIWrapperTest_Impl
implements API_Wrapper
{
80 public function fromApiInput($apiRequest) {
81 if ($apiRequest['entity'] == 'Contact' && $apiRequest['action'] == 'create') {
82 if ('Invalid' == CRM_Utils_Array
::value('contact_type', $apiRequest['params'])) {
83 $apiRequest['params']['contact_type'] = 'Individual';
92 public function toApiOutput($apiRequest, $result) {
93 if ($apiRequest['entity'] == 'Contact' && $apiRequest['action'] == 'create') {
94 if (isset($result['id'], $result['values'][$result['id']]['display_name'])) {
95 $result['values'][$result['id']]['display_name_munged'] = 'MUNGE! ' . $result['values'][$result['id']]['display_name'];
96 unset($result['values'][$result['id']]['display_name']);