From 92776611d9adc20b3fd864c4e9a8ff30db20938a Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Mon, 13 Oct 2014 16:59:51 -0400 Subject: [PATCH] CRM-15417 - Add unit test for getactions --- Civi/API/Provider/MagicFunctionProvider.php | 1 + Civi/API/Provider/ReflectionProvider.php | 3 +- api/v3/examples/Contact/GetActions.php | 81 +++++++++++++++++++++ tests/phpunit/CiviTest/CiviUnitTestCase.php | 4 + tests/phpunit/api/v3/ContactTest.php | 38 +++++++++- 5 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 api/v3/examples/Contact/GetActions.php diff --git a/Civi/API/Provider/MagicFunctionProvider.php b/Civi/API/Provider/MagicFunctionProvider.php index 74a38dbcac..8e49d950ce 100644 --- a/Civi/API/Provider/MagicFunctionProvider.php +++ b/Civi/API/Provider/MagicFunctionProvider.php @@ -131,6 +131,7 @@ class MagicFunctionProvider implements EventSubscriberInterface, ProviderInterfa * {inheritdoc} */ public function getActionNames($version, $entity) { + $entity = _civicrm_api_get_camel_name($entity); $entities = $this->getEntityNames($version); if (!in_array($entity, $entities)) { return array(); diff --git a/Civi/API/Provider/ReflectionProvider.php b/Civi/API/Provider/ReflectionProvider.php index 24ec10d2f8..6eecafb79f 100644 --- a/Civi/API/Provider/ReflectionProvider.php +++ b/Civi/API/Provider/ReflectionProvider.php @@ -75,7 +75,7 @@ class ReflectionProvider implements EventSubscriberInterface, ProviderInterface */ public function onApiResolve(\Civi\API\Event\ResolveEvent $event) { $apiRequest = $event->getApiRequest(); - $actions = isset($this->actions[$apiRequest['entity']]) ? $this->actions[$apiRequest['entity']] : $this->actions['*']; + $actions = $this->getActionNames($apiRequest['version'], $apiRequest['entity']); if (in_array($apiRequest['action'], $actions)) { $apiRequest['is_metadata'] = TRUE; $event->setApiRequest($apiRequest); @@ -127,6 +127,7 @@ class ReflectionProvider implements EventSubscriberInterface, ProviderInterface * {inheritdoc} */ function getActionNames($version, $entity) { + $entity = _civicrm_api_get_camel_name($entity, $version); return isset($this->actions[$entity]) ? $this->actions[$entity] : $this->actions['*']; } } diff --git a/api/v3/examples/Contact/GetActions.php b/api/v3/examples/Contact/GetActions.php new file mode 100644 index 0000000000..5e9ebfc99e --- /dev/null +++ b/api/v3/examples/Contact/GetActions.php @@ -0,0 +1,81 @@ +getMessage(); + $errorCode = $e->getErrorCode(); + $errorData = $e->getExtraParams(); + return array('error' => $errorMessage, 'error_code' => $errorCode, 'error_data' => $errorData); +} + +return $result; +} + +/** + * Function returns array of result expected from previous function + */ +function contact_getactions_expectedresult(){ + + $expectedResult = array( + 'is_error' => 0, + 'version' => 3, + 'count' => 17, + 'values' => array( + '0' => 'create', + '1' => 'delete', + '2' => 'get', + '3' => 'getactions', + '4' => 'getcount', + '5' => 'getfields', + '6' => 'getlist', + '7' => 'getoptions', + '8' => 'getquick', + '9' => 'getrefcount', + '10' => 'getsingle', + '11' => 'getvalue', + '12' => 'merge', + '13' => 'proximity', + '14' => 'replace', + '15' => 'setvalue', + '16' => 'update', + ), + 'deprecated' => array( + 'getquick' => 'The "getquick" action is deprecated in favor of "getlist".', + 'update' => 'The "update" action is deprecated. Use "create" with an id instead.', + ), +); + + return $expectedResult; +} + + +/* +* This example has been generated from the API test suite. The test that created it is called +* +* testGetActions and can be found in +* https://github.com/civicrm/civicrm-core/blob/master/tests/phpunit/api/v3/ContactTest.php +* +* You can see the outcome of the API tests at +* https://test.civicrm.org/job/CiviCRM-master-git/ +* +* To Learn about the API read +* http://wiki.civicrm.org/confluence/display/CRMDOC/Using+the+API +* +* Browse the api on your own site with the api explorer +* http://MYSITE.ORG/path/to/civicrm/api/explorer +* +* Read more about testing here +* http://wiki.civicrm.org/confluence/display/CRM/Testing +* +* API Standards documentation: +* http://wiki.civicrm.org/confluence/display/CRM/API+Architecture+Standards +*/ diff --git a/tests/phpunit/CiviTest/CiviUnitTestCase.php b/tests/phpunit/CiviTest/CiviUnitTestCase.php index cd87688d6a..50ead2bc46 100644 --- a/tests/phpunit/CiviTest/CiviUnitTestCase.php +++ b/tests/phpunit/CiviTest/CiviUnitTestCase.php @@ -2106,6 +2106,10 @@ class CiviUnitTestCase extends PHPUnit_Extensions_Database_TestCase { $action = empty($action) ? 'getlist' : $action; $entityAction = 'GetList'; } + elseif (strstr($function, 'GetActions')) { + $action = empty($action) ? 'getactions' : $action; + $entityAction = 'GetActions'; + } elseif (strstr($function, 'Get')) { $action = empty($action) ? 'get' : $action; $entityAction = 'Get'; diff --git a/tests/phpunit/api/v3/ContactTest.php b/tests/phpunit/api/v3/ContactTest.php index 62e99a4a69..7f3b519f00 100644 --- a/tests/phpunit/api/v3/ContactTest.php +++ b/tests/phpunit/api/v3/ContactTest.php @@ -1852,7 +1852,6 @@ class api_v3_ContactTest extends CiviUnitTestCase { $this->assertEquals(1, $result['count']); } - /** * CRM-15443 - ensure getlist api does not return deleted or deceased contacts */ @@ -1865,4 +1864,41 @@ class api_v3_ContactTest extends CiviUnitTestCase { $this->assertEquals(1, $result['count'], 'In line ' . __LINE__); $this->assertEquals($contact3, $result['values'][0]['id'], 'In line ' . __LINE__); } + + /** + * Test contact.getactions + */ + function testGetActions() { + $description = "Getting the available actions for an entity."; + $result = $this->callAPIAndDocument($this->_entity, 'getactions', array(), __FUNCTION__, __FILE__, $description); + $expected = array( + 'create', + 'delete', + 'get', + 'getactions', + 'getcount', + 'getfields', + 'getlist', + 'getoptions', + 'getquick', + 'getrefcount', + 'getsingle', + 'getvalue', + 'merge', + 'proximity', + 'replace', + 'setvalue', + 'update', + ); + $deprecated = array( + 'update', + 'getquick', + ); + foreach ($expected as $action) { + $this->assertTrue(in_array($action, $result['values']), "Expected action $action"); + } + foreach ($deprecated as $action) { + $this->assertArrayKeyExists($action, $result['deprecated']); + } + } } -- 2.25.1