CRM-15417 - Add unit test for getactions
authorColeman Watts <coleman@civicrm.org>
Mon, 13 Oct 2014 20:59:51 +0000 (16:59 -0400)
committerColeman Watts <coleman@civicrm.org>
Mon, 13 Oct 2014 22:11:29 +0000 (18:11 -0400)
Civi/API/Provider/MagicFunctionProvider.php
Civi/API/Provider/ReflectionProvider.php
api/v3/examples/Contact/GetActions.php [new file with mode: 0644]
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/ContactTest.php

index 74a38dbcac5d3d90474674ecf538cbcdd792169e..8e49d950ce6fab7ff4c5fb9158980d04ff2b7fbd 100644 (file)
@@ -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();
index 24ec10d2f82387cf1636fa34247ea8759b3879c4..6eecafb79f7740c69e8b9e2711e5d4e1a8b7a76b 100644 (file)
@@ -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 (file)
index 0000000..5e9ebfc
--- /dev/null
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Test Generated example of using contact getactions API
+ * Getting the available actions for an entity. *
+ */
+function contact_getactions_example(){
+$params = array();
+
+try{
+  $result = civicrm_api3('contact', 'getactions', $params);
+}
+catch (CiviCRM_API3_Exception $e) {
+  // handle error here
+  $errorMessage = $e->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
+*/
index cd87688d6a22afdd61eadb7ea6265eff50334890..50ead2bc4632d543dfd6bc28fff4e17d7eb8f9f9 100644 (file)
@@ -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';
index 62e99a4a691e01d216397cc683d20107bf99bc53..7f3b519f0018f5ec32c3146d88033ddf2f377c06 100644 (file)
@@ -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']);
+    }
+  }
 }