Merge branch 'master' into master-civimail-abtest
[civicrm-core.git] / tests / phpunit / api / v3 / ContributionSoftTest.php
index 2ffb5fb099bf968fdb44810bfb6518523b66f658..e04ff2e9e5b48f66a153bdeba2bdb0664e3235b6 100644 (file)
@@ -1,9 +1,9 @@
 <?php
 /*
  +--------------------------------------------------------------------+
- | CiviCRM version 4.3                                                |
+ | CiviCRM version 4.5                                                |
  +--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013                                |
+ | Copyright CiviCRM LLC (c) 2004-2014                                |
  +--------------------------------------------------------------------+
  | This file is a part of CiviCRM.                                    |
  |                                                                    |
@@ -26,9 +26,6 @@
 */
 
 require_once 'CiviTest/CiviUnitTestCase.php';
-//FIXME:This existed in ContributionTest,  don't think it's necessary
-//require_once 'CiviTest/CiviMailUtils.php';
-
 
 /**
  *  Test APIv3 civicrm_contribute_* functions
@@ -46,17 +43,16 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
   protected $_softIndividual1Id; //the first soft credit contact
   protected $_softIndividual2Id; //the second soft credit contact
   protected $_contributionId;
-  protected $_contributionTypeId = 1;
-  protected $_apiversion;
+  protected $_financialTypeId = 1;
+  protected $_apiversion = 3;
   protected $_entity = 'Contribution';
   public $debug = 0;
   protected $_params;
-  public $_eNoticeCompliant = TRUE;
+
 
   function setUp() {
     parent::setUp();
 
-    $this->_apiversion = 3;
     $this->_individualId = $this->individualCreate();
     $this->_softIndividual1Id = $this->individualCreate();
     $this->_softIndividual2Id = $this->individualCreate();
@@ -67,13 +63,12 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_individualId,
       'receive_date' => '20120511',
       'total_amount' => 100.00,
-      'financial_type_id'   => $this->_contributionTypeId,
+      'financial_type_id'   => $this->_financialTypeId,
       'non_deductible_amount' => 10.00,
       'fee_amount' => 5.00,
       'net_amount' => 95.00,
       'source' => 'SSF',
       'contribution_status_id' => 1,
-      'version' => $this->_apiversion,
     );
     $this->_processorParams = array(
       'domain_id' => 1,
@@ -86,23 +81,9 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'url_recur' => 'http://dummy.com',
       'billing_mode' => 1,
     );
-//    $this->_pageParams = array(
-//      'version' => 3,
-//      'title' => 'Test Contribution Page',
-//      'financial_type_id' => 1,
-//      'currency' => 'USD',
-//      'financial_account_id' => 1,
-//      'payment_processor' => $paymentProcessor->id,
-//      'is_active' => 1,
-//      'is_allow_other_amount' => 1,
-//      'min_amount' => 10,
-//      'max_amount' => 1000,
-//     );
   }
 
   function tearDown() {
-
-    $this->contributionTypeDelete();
     $this->quickCleanup(array(
       'civicrm_contribution',
       'civicrm_event',
@@ -118,12 +99,10 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
     ));
   }
 
-  function testGetParamsNotArrayContributionSoft() {
-    $params = 'contact_id= 1';
-    $contribution = $this->callAPIFailure('contribution', 'get', $params);
-    $this->assertEquals($contribution['error_message'], 'Input variable `params` is not an array');
-  }
-
+  /**
+   * Test get methods
+   * @todo - this might be better broken down into more smaller tests
+   */
   function testGetContributionSoft() {
     //We don't test for PCP fields because there's no PCP API, so we can't create campaigns.
     $p = array(
@@ -131,99 +110,77 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
+      'soft_credit_type_id' => 4,
     );
 
-    $this->_softcontribution = civicrm_api('contribution_soft', 'create', $p);
-    $this->assertEquals($this->_softcontribution['is_error'], 0, 'In line ' . __LINE__);
+    $this->_softcontribution = $this->callAPISuccess('contribution_soft', 'create', $p);
     $params = array(
       'id' => $this->_softcontribution['id'],
-      'version' => $this->_apiversion,
     );
-    $softcontribution = civicrm_api('contribution_soft', 'get', $params);
-    $this->assertAPISuccess($softcontribution, 'In line ' . __LINE__);
-    $this->assertEquals(1,$softcontribution['count']);
-
-    $this->documentMe($params, $softcontribution, __FUNCTION__, __FILE__);
+    $softcontribution = $this->callAPIAndDocument('contribution_soft', 'get', $params, __FUNCTION__, __FILE__);
+    $this->assertEquals(1, $softcontribution['count']);
     $this->assertEquals($softcontribution['values'][$this->_softcontribution['id']]['contribution_id'], $this->_contributionId, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$this->_softcontribution['id']]['contact_id'], $this->_softIndividual1Id, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$this->_softcontribution['id']]['amount'], '10.00', 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$this->_softcontribution['id']]['currency'], 'USD', 'In line ' . __LINE__);
+    $this->assertEquals($softcontribution['values'][$this->_softcontribution['id']]['soft_credit_type_id'], 4, 'In line ' . __LINE__);
 
     //create a second soft contribution on the same hard contribution - we are testing that 'id' gets the right soft contribution id (not the contribution id)
     $p['contact_id'] = $this->_softIndividual2Id;
-    $this->_softcontribution2 = civicrm_api('contribution_soft', 'create', $p);
-    $this->assertAPISuccess($this->_softcontribution2, 'In line ' . __LINE__);
+    $this->_softcontribution2 =  $this->callAPISuccess('contribution_soft', 'create', $p);
 
-    $params = array(
-      'version' => $this->_apiversion,
-    );
     // now we have 2 - test getcount
-    $softcontribution = civicrm_api('contribution_soft', 'getcount', array(
-      'version' => $this->_apiversion,
+    $softcontribution =  $this->callAPISuccess('contribution_soft', 'getcount', array());
+    $this->assertEquals(2, $softcontribution);
+
+    //check first contribution
+    $result =  $this->callAPISuccess('contribution_soft', 'get', array(
+      'id' => $this->_softcontribution['id'],
     ));
+    $this->assertEquals(1, $result['count'], 'In line ' . __LINE__);
+    $this->assertEquals($this->_softcontribution['id'], $result['id']);
+    $this->assertEquals($this->_softcontribution['id'], $result['id'], print_r($softcontribution,true));
 
-    $this->assertEquals(2, $softcontribution);
-   //test id only format
-    $softcontribution = civicrm_api('contribution_soft', 'get', array
-      ('version' => $this->_apiversion,
-        'id' => $this->_softcontribution['id'],
-        'format.only_id' => 1,
-      )
-    );
-    $this->assertEquals($this->_softcontribution['id'], $softcontribution, print_r($softcontribution,true) . " in line " . __LINE__);
     //test id only format - second soft credit
-    $softcontribution = civicrm_api('contribution_soft', 'get', array
-      ('version' => $this->_apiversion,
-        'id' => $this->_softcontribution2['id'],
-        'format.only_id' => 1,
-      )
-    );
-    $this->assertEquals($this->_softcontribution2['id'], $softcontribution);
-    $softcontribution = civicrm_api('contribution_soft', 'get', array(
-      'version' => $this->_apiversion,
-        'id' => $this->_softcontribution['id'],
-      ));
-    //test id as field
-    $this->assertAPISuccess($softcontribution, 'In line ' . __LINE__);
-    $this->assertEquals(1, $softcontribution['count'], 'In line ' . __LINE__);
-    $this->assertEquals($this->_softcontribution['id'], $softcontribution['id'] )  ;
+    $resultID2 =  $this->callAPISuccess('contribution_soft', 'get', array(
+      'id' => $this->_softcontribution2['id'],
+      'format.only_id' => 1,
+    ));
+    $this->assertEquals($this->_softcontribution2['id'], $resultID2);
+
     //test get by contact id works
-    $softcontribution = civicrm_api('contribution_soft', 'get', array('version' => $this->_apiversion, 'contact_id' => $this->_softIndividual2Id));
-    $this->assertAPISuccess($softcontribution, 'In line ' . __LINE__ . "get with contact_id" . print_r(array('version' => $this->_apiversion, 'contact_id' => $this->_softIndividual2Id), TRUE));
+    $result =  $this->callAPISuccess('contribution_soft', 'get', array(
+      'contact_id' => $this->_softIndividual2Id)
+    );
+    $this->assertEquals(1, $result['count'], 'In line ' . __LINE__);
 
-    $this->assertEquals(1, $softcontribution['count'], 'In line ' . __LINE__);
-    civicrm_api('contribution_soft', 'Delete', array(
+    $this->callAPISuccess('contribution_soft', 'Delete', array(
       'id' => $this->_softcontribution['id'],
-        'version' => $this->_apiversion,
-      ));
-    civicrm_api('Contribution', 'Delete', array(
+    ));
+    // check one soft credit remains
+    $expectedCount = 1;
+    $this->callAPISuccess('contribution_soft', 'getcount', array(), $expectedCount);
+
+    //check id is same as 2
+    $this->assertEquals($this->_softcontribution2['id'], $this->callAPISuccess('contribution_soft', 'getvalue', array('return' => 'id' )));
+
+    $this->callAPISuccess('ContributionSoft', 'Delete', array(
       'id' => $this->_softcontribution2['id'],
-        'version' => $this->_apiversion,
-      ));
+     ));
   }
 
 
   ///////////////// civicrm_contribution_soft
   function testCreateEmptyParamsContributionSoft() {
-
-
-    $params = array('version' => $this->_apiversion);
-    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', $params);
-    $this->assertEquals($softcontribution['error_message'], 'Mandatory key(s) missing from params array: contribution_id, amount, contact_id', 'In line ' . __LINE__);
-  }
-
-  function testCreateParamsNotArrayContributionSoft() {
-
-    $params = 'contact_id= 1';
-    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', $params);
-    $this->assertEquals($softcontribution['error_message'], 'Input variable `params` is not an array');
+    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', array(),
+      'Mandatory key(s) missing from params array: contribution_id, amount, contact_id'
+    );
   }
 
   function testCreateParamsWithoutRequiredKeysContributionSoft() {
-    $params = array('version' => 3);
-    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', $params);
-    $this->assertEquals($softcontribution['error_message'], 'Mandatory key(s) missing from params array: contribution_id, amount, contact_id');
+    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', array(),
+      'Mandatory key(s) missing from params array: contribution_id, amount, contact_id'
+    );
   }
 
   function testCreateContributionSoftInvalidContact() {
@@ -233,11 +190,11 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contribution_id' => $this->_contributionId,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
-    $this->assertEquals($softcontribution['error_message'], 'contact_id is not valid : 999', 'In line ' . __LINE__);
+    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', $params,
+      'contact_id is not valid : 999'
+    );
   }
 
   function testCreateContributionSoftInvalidContributionId() {
@@ -247,11 +204,11 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
-    $this->assertEquals($softcontribution['error_message'], 'contribution_id is not valid : 999999', 'In line ' . __LINE__);
+    $softcontribution = $this->callAPIFailure('contribution_soft', 'create', $params,
+      'contribution_id is not valid : 999999'
+    );
   }
 
   /*
@@ -263,34 +220,17 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
+      'soft_credit_type_id' => 5,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
-    $this->documentMe($params, $softcontribution, __FUNCTION__, __FILE__);
+    $softcontribution = $this->callAPIAndDocument('contribution_soft', 'create', $params, __FUNCTION__, __FILE__);
     $this->assertEquals($softcontribution['values'][$softcontribution['id']]['contribution_id'], $this->_contributionId, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontribution['id']]['contact_id'], $this->_softIndividual1Id, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontribution['id']]['amount'], '10.00', 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontribution['id']]['currency'], 'USD', 'In line ' . __LINE__);
+    $this->assertEquals($softcontribution['values'][$softcontribution['id']]['soft_credit_type_id'], 5, 'In line ' . __LINE__);
   }
 
-  /**
-   *  Test  using example code
-   */
-//  function testContributionSoftCreateExample() {
-//    //make sure at least one page exists since there is a truncate in tear down
-//    $page = civicrm_api('contribution_page', 'create', $this->_pageParams);
-//    $this->assertAPISuccess($page);
-//    //FIXME: Can't written until ContributionSoftDelete is written
-//    require_once 'api/v3/examples/ContributionSoftCreate.php';
-//    $result         = contribution_soft_create_example();
-//    $this->assertAPISuccess($result);
-//    $contributionId = $result['id'];
-//    $expectedResult = contribution_soft_create_expectedresult();
-//    $this->checkArrayEquals($result, $expectedResult);
-//    $this->contributionDelete($contributionId);
-//  }
-//
   //To Update Soft Contribution
   function testCreateUpdateContributionSoft() {
     //create a soft credit
@@ -299,77 +239,68 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
+      'soft_credit_type_id' => 6,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
+    $softcontribution = $this->callAPISuccess('contribution_soft', 'create', $params);
     $softcontributionID = $softcontribution['id'];
 
     $old_params = array(
       'contribution_soft_id' => $softcontributionID,
-      'version' => $this->_apiversion,
     );
-    $original = civicrm_api('contribution_soft', 'get', $old_params);
+    $original = $this->callAPISuccess('contribution_soft', 'get', $old_params);
     //Make sure it came back
-    $this->assertTrue(empty($original['is_error']), 'In line ' . __LINE__);
     $this->assertEquals($original['id'], $softcontributionID, 'In line ' . __LINE__);
     //set up list of old params, verify
     $old_contribution_id = $original['values'][$softcontributionID]['contribution_id'];
     $old_contact_id = $original['values'][$softcontributionID]['contact_id'];
     $old_amount = $original['values'][$softcontributionID]['amount'];
     $old_currency = $original['values'][$softcontributionID]['currency'];
+    $old_soft_credit_type_id = $original['values'][$softcontributionID]['soft_credit_type_id'];
 
     //check against original values
     $this->assertEquals($old_contribution_id, $this->_contributionId, 'In line ' . __LINE__);
     $this->assertEquals($old_contact_id, $this->_softIndividual1Id, 'In line ' . __LINE__);
     $this->assertEquals($old_amount, 10.00, 'In line ' . __LINE__);
     $this->assertEquals($old_currency, 'USD', 'In line ' . __LINE__);
+    $this->assertEquals($old_soft_credit_type_id, 6 , 'In line ' . __LINE__);
     $params = array(
       'id' => $softcontributionID,
       'contribution_id' => $this->_contributionId,
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 7.00,
       'currency' => 'CAD',
-      'version' => $this->_apiversion,
+      'soft_credit_type_id' => 7,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
+    $softcontribution = $this->callAPISuccess('contribution_soft', 'create', $params);
 
     $new_params = array(
       'id' => $softcontribution['id'],
-      'version' => $this->_apiversion,
     );
-    $softcontribution = civicrm_api('contribution_soft', 'get', $new_params);
+    $softcontribution = $this->callAPISuccess('contribution_soft', 'get', $new_params);
     //check against original values
     $this->assertEquals($softcontribution['values'][$softcontributionID]['contribution_id'], $this->_contributionId, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontributionID]['contact_id'], $this->_softIndividual1Id, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontributionID]['amount'], 7.00, 'In line ' . __LINE__);
     $this->assertEquals($softcontribution['values'][$softcontributionID]['currency'], 'CAD', 'In line ' . __LINE__);
+    $this->assertEquals($softcontribution['values'][$softcontributionID]['soft_credit_type_id'], 7, 'In line ' . __LINE__);
 
     $params = array(
       'id' => $softcontributionID,
-      'version' => $this->_apiversion,
     );
-    $result = civicrm_api('contribution_soft', 'delete', $params);
-    $this->assertAPISuccess($result, 'in line' . __LINE__);
+    $result = $this->callAPISuccess('contribution_soft', 'delete', $params);
   }
 
   ///////////////// civicrm_contribution_soft_delete methods
   function testDeleteEmptyParamsContributionSoft() {
-    $params = array('version' => $this->_apiversion);
-    $softcontribution = $this->callAPIFailure('contribution_soft', 'delete', $params);
-  }
-
-  function testDeleteParamsNotArrayContributionSoft() {
-    $params = 'id= 1';
+    $params = array();
     $softcontribution = $this->callAPIFailure('contribution_soft', 'delete', $params);
-    $this->assertEquals($softcontribution['error_message'], 'Input variable `params` is not an array');
   }
 
   function testDeleteWrongParamContributionSoft() {
     $params = array(
       'contribution_source' => 'SSF',
-      'version' => $this->_apiversion,
     );
     $softcontribution = $this->callAPIFailure('contribution_soft', 'delete', $params);
   }
@@ -381,48 +312,32 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
     );
 
-    $softcontribution = civicrm_api('contribution_soft', 'create', $params);
+    $softcontribution = $this->callAPISuccess('contribution_soft', 'create', $params);
     $softcontributionID = $softcontribution['id'];
     $params = array(
       'id' => $softcontributionID,
-      'version' => $this->_apiversion,
     );
-    $result = civicrm_api('contribution_soft', 'delete', $params);
-    $this->documentMe($params, $result, __FUNCTION__, __FILE__);
-    $this->assertAPISuccess($result, 'In line ' . __LINE__);
+    $result = $this->callAPIAndDocument('contribution_soft', 'delete', $params, __FUNCTION__, __FILE__);
   }
 
   ///////////////// civicrm_contribution_search methods
 
-  /**
-   *  Test civicrm_contribution_soft_search with wrong params type
-   */
-  function testSearchWrongParamsType() {
-    $params = 'a string';
-    $result = $this->callAPIFailure('contribution_soft', 'get', $params);
-    $this->assertEquals($result['error_message'], 'Input variable `params` is not an array', 'In line ' . __LINE__);
-  }
-
   /**
    *  Test civicrm_contribution_search with empty params.
    *  All available contributions expected.
    */
   function testSearchEmptyParams() {
-    $params = array('version' => $this->_apiversion);
-
     $p = array(
       'contribution_id' => $this->_contributionId,
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
     );
-    $softcontribution = civicrm_api('contribution_soft', 'create', $p);
+    $softcontribution = $this->callAPISuccess('contribution_soft', 'create', $p);
 
-    $result = civicrm_api('contribution_soft', 'get', $params);
+    $result = $this->callAPISuccess('contribution_soft', 'get', array());
     // We're taking the first element.
     $res = $result['values'][$softcontribution['id']];
 
@@ -441,24 +356,21 @@ class api_v3_ContributionSoftTest extends CiviUnitTestCase {
       'contact_id' => $this->_softIndividual1Id,
       'amount' => 10.00,
       'currency' => 'USD',
-      'version' => $this->_apiversion,
     );
-    $softcontribution1 = civicrm_api('contribution_soft', 'create', $p1);
+    $softcontribution1 = $this->callAPISuccess('contribution_soft', 'create', $p1);
 
     $p2 = array(
       'contribution_id' => $this->_contributionId,
       'contact_id' => $this->_softIndividual2Id,
       'amount' => 25.00,
       'currency' => 'CAD',
-      'version' => $this->_apiversion,
     );
-    $softcontribution2 = civicrm_api('contribution_soft', 'create', $p2);
+    $softcontribution2 = $this->callAPISuccess('contribution_soft', 'create', $p2);
 
     $params = array(
       'id' => $softcontribution2['id'],
-      'version' => $this->_apiversion,
     );
-    $result = civicrm_api('contribution_soft', 'get', $params);
+    $result = $this->callAPISuccess('contribution_soft', 'get', $params);
     $res = $result['values'][$softcontribution2['id']];
 
     $this->assertEquals($p2['contribution_id'], $res['contribution_id'], 'In line ' . __LINE__);