diff --git a/CRM/Financial/BAO/PaymentProcessor.php b/CRM/Financial/BAO/PaymentProcessor.php index a3b89b4caaf0..c0c12b73d707 100644 --- a/CRM/Financial/BAO/PaymentProcessor.php +++ b/CRM/Financial/BAO/PaymentProcessor.php @@ -53,17 +53,19 @@ public static function create($params) { $processor = new CRM_Financial_DAO_PaymentProcessor(); $processor->copyValues($params); - $ppTypeDAO = new CRM_Financial_DAO_PaymentProcessorType(); - $ppTypeDAO->id = $params['payment_processor_type_id']; - if (!$ppTypeDAO->find(TRUE)) { - CRM_Core_Error::fatal(ts('Could not find payment processor meta information')); - } + if (empty($params['id'])) { + $ppTypeDAO = new CRM_Financial_DAO_PaymentProcessorType(); + $ppTypeDAO->id = $params['payment_processor_type_id']; + if (!$ppTypeDAO->find(TRUE)) { + CRM_Core_Error::fatal(ts('Could not find payment processor meta information')); + } - // also copy meta fields from the info DAO - $processor->is_recur = $ppTypeDAO->is_recur; - $processor->billing_mode = $ppTypeDAO->billing_mode; - $processor->class_name = $ppTypeDAO->class_name; - $processor->payment_type = $ppTypeDAO->payment_type; + // also copy meta fields from the info DAO + $processor->is_recur = $ppTypeDAO->is_recur; + $processor->billing_mode = $ppTypeDAO->billing_mode; + $processor->class_name = $ppTypeDAO->class_name; + $processor->payment_type = $ppTypeDAO->payment_type; + } $processor->save(); // CRM-11826, add entry in civicrm_entity_financial_account diff --git a/tests/phpunit/api/v3/PaymentProcessorTest.php b/tests/phpunit/api/v3/PaymentProcessorTest.php index b920675e38bf..441b7440f718 100644 --- a/tests/phpunit/api/v3/PaymentProcessorTest.php +++ b/tests/phpunit/api/v3/PaymentProcessorTest.php @@ -78,6 +78,38 @@ public function testPaymentProcessorCreate() { return $result['id']; } + /** + * Update payment processor. + */ + public function testPaymentProcessorUpdate() { + $params = $this->_params; + $result = $this->callAPISuccess('payment_processor', 'create', $params); + $this->assertNotNull($result['id']); + + $updateParams = array( + 'id' => $result['id'], + 'name' => 'Update API Test', + ); + $this->assertDBState('CRM_Financial_DAO_PaymentProcessor', $result['id'], $params); + $this->callAPISuccess('payment_processor', 'create', $updateParams); + $result = $this->callAPISuccess('payment_processor', 'get', array('id' => $result['id'])); + + $expectedResult = array( + 'id' => $result['id'], + 'domain_id' => $params['domain_id'], + 'name' => $updateParams['name'], + 'payment_processor_type_id' => $params['payment_processor_type_id'], + 'is_default' => 0, + 'is_test' => 0, + 'class_name' => $params['class_name'], + 'billing_mode' => 1, + 'is_recur' => $params['is_recur'], + 'payment_type' => 1, + 'payment_instrument_id' => 1, + ); + $this->checkArrayEquals($expectedResult, $result['values'][$result['id']]); + } + /** * Test using example code. */