Skip to content
Snippets Groups Projects
Commit 28ec3123 authored by mattwire's avatar mattwire
Browse files

Improvements to tests from MR84/96

parent f6e09506
Branches
Tags
1 merge request!1096.4
......@@ -41,8 +41,8 @@ function civicrm_api3_stripe_Setuptest($params) {
'is_default' => 0,
'is_test' => 1,
'is_recur' => 1,
'user_name' => $params['sk'],
'password' => $params['pk'],
'user_name' => $params['pk'],
'password' => $params['sk'],
'url_site' => 'https://api.stripe.com/v1',
'url_recur' => 'https://api.stripe.com/v1',
'class_name' => 'Payment_Stripe',
......
......@@ -85,21 +85,21 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
if (!empty($this->_contactID)) {
return;
}
$results = civicrm_api3('Contact', 'create', array(
$results = civicrm_api3('Contact', 'create', [
'contact_type' => 'Individual',
'first_name' => 'Jose',
'last_name' => 'Lopez'
));;
]);;
$this->_contactID = $results['id'];
$this->contact = (Object) array_pop($results['values']);
// Now we have to add an email address.
$email = 'susie@example.org';
civicrm_api3('email', 'create', array(
civicrm_api3('email', 'create', [
'contact_id' => $this->_contactID,
'email' => $email,
'location_type_id' => 1
));
]);
$this->contact->email = $email;
}
......@@ -107,7 +107,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
* Create a stripe payment processor.
*
*/
function createPaymentProcessor($params = array()) {
function createPaymentProcessor($params = []) {
$result = civicrm_api3('Stripe', 'setuptest', $params);
$processor = array_pop($result['values']);
$this->_sk = $processor['user_name'];
......@@ -120,8 +120,8 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
* Create a stripe contribution page.
*
*/
function createContributionPage($params = array()) {
$params = array_merge(array(
function createContributionPage($params = []) {
$params = array_merge([
'title' => "Test Contribution Page",
'financial_type_id' => $this->_financialTypeID,
'currency' => 'USD',
......@@ -130,7 +130,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
'receipt_from_email' => 'gaia@the.cosmos',
'receipt_from_name' => 'Pachamama',
'is_email_receipt' => 0,
), $params);
], $params);
$result = civicrm_api3('ContributionPage', 'create', $params);
$this->assertEquals(0, $result['is_error']);
$this->_contributionPageID = $result['id'];
......@@ -139,29 +139,57 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
/**
* Submit to stripe
*/
public function doPayment($params = array()) {
public function doPayment($params = []) {
$mode = 'test';
$pp = $this->_paymentProcessor;
$stripe = new CRM_Core_Payment_Stripe($mode, $pp);
$params = array_merge(array(
'payment_processor_id' => $this->_paymentProcessorID,
'amount' => $this->_total,
'stripe_token' => array(
\Stripe\Stripe::setApiKey(CRM_Core_Payment_Stripe::getSecretKey($pp));
// Send in credit card to get payment method.
$paymentMethod = \Stripe\PaymentMethod::create([
'type' => 'card',
'card' => [
'number' => $this->_cc,
'exp_month' => '12',
'exp_month' => 12,
'exp_year' => date('Y') + 1,
'cvc' => '123',
'name' => $this->contact->display_name,
'address_line1' => '123 4th Street',
'address_state' => 'NY',
'address_zip' => '12345',
),
],
]);
$paymentIntentID = NULL;
$paymentMethodID = NULL;
if (!array_key_exists('is_recur', $params)) {
// Send in payment method to get payment intent.
$params = [
'payment_method_id' => $paymentMethod->id,
'amount' => $this->_total,
'payment_processor_id' => $pp['id'],
];
$result = civicrm_api3('StripePaymentintent', 'process', $params);
$paymentIntentID = $result['values']['paymentIntent']['id'];
}
else {
$paymentMethodID = $paymentMethod->id;
}
$stripe = new CRM_Core_Payment_Stripe($mode, $pp);
$params = array_merge([
'payment_processor_id' => $this->_paymentProcessorID,
'amount' => $this->_total,
'paymentIntentID' => $paymentIntentID,
'paymentMethodID' => $paymentMethodID,
'email' => $this->contact->email,
'contactID' => $this->contact->id,
'description' => 'Test from Stripe Test Code',
'currencyID' => 'USD',
'invoiceID' => $this->_invoiceID,
), $params);
// Avoid missing key php errors by adding these un-needed parameters.
'qfKey' => NULL,
'entryURL' => 'http://civicrm.localhost/civicrm/test?foo',
'query' => NULL,
], $params);
$ret = $stripe->doPayment($params);
......@@ -184,7 +212,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
$processor->setAPIParams();
try {
$results = \Stripe\Charge::retrieve(array( "id" => $this->_trxn_id));
$results = \Stripe\Charge::retrieve(["id" => $this->_trxn_id]);
$found = TRUE;
}
catch (Stripe_Error $e) {
......@@ -197,8 +225,8 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
/**
* Create contribition
*/
public function setupTransaction($params = array()) {
$contribution = civicrm_api3('contribution', 'create', array_merge(array(
public function setupTransaction($params = []) {
$contribution = civicrm_api3('contribution', 'create', array_merge([
'contact_id' => $this->_contactID,
'contribution_status_id' => 2,
'payment_processor_id' => $this->_paymentProcessorID,
......@@ -212,7 +240,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
'contribution_page_id' => $this->_contributionPageID,
'payment_processor_id' => $this->_paymentProcessorID,
'is_test' => 1,
), $params));
], $params));
$this->assertEquals(0, $contribution['is_error']);
$this->_contributionID = $contribution['id'];
}
......@@ -221,10 +249,10 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
if (!empty($this->_orgID)) {
return;
}
$results = civicrm_api3('Contact', 'create', array(
$results = civicrm_api3('Contact', 'create', [
'contact_type' => 'Organization',
'organization_name' => 'My Great Group'
));;
]);;
$this->_orgID = $results['id'];
}
......@@ -232,7 +260,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
CRM_Member_PseudoConstant::flush('membershipType');
CRM_Core_Config::clearDBCache();
$this->createOrganization();
$params = array(
$params = [
'name' => 'General',
'duration_unit' => 'year',
'duration_interval' => 1,
......@@ -243,7 +271,7 @@ class CRM_Stripe_BaseTest extends \PHPUnit\Framework\TestCase implements Headles
'is_active' => 1,
'sequential' => 1,
'visibility' => 'Public',
);
];
$result = civicrm_api3('MembershipType', 'Create', $params);
......
......@@ -48,27 +48,27 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
$this->createMembershipType();
// Create the membership and link to the recurring contribution.
$params = array(
$params = [
'contact_id' => $this->_contactID,
'membership_type_id' => $this->_membershipTypeID,
'contribution_recur_id' => $this->_contributionRecurID
);
];
$result = civicrm_api3('membership', 'create', $params);
$this->_membershipID = $result['id'];
$status = $result['values'][$this->_membershipID]['status_id'];
$this->assertEquals(1, $status, 'Membership is in new status');
// Submit the payment.
$payment_extra_params = array(
$payment_extra_params = [
'is_recur' => 1,
'contributionRecurID' => $this->_contributionRecurID,
'frequency_unit' => $this->_frequency_unit,
'frequency_interval' => $this->_frequency_interval,
'installments' => $this->_installments,
'selectMembership' => array(
'selectMembership' => [
0 => $this->_membershipTypeID
)
);
]
];
$this->doPayment($payment_extra_params);
// Now check to see if an event was triggered and if so, process it.
......@@ -93,19 +93,19 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
}
catch (Stripe\Error\InvalidRequest $e) {
// The plan has not been created yet, so create it.
$product = \Stripe\Product::create(array(
$product = \Stripe\Product::create([
"name" => "CiviCRM testing product",
"type" => "service"
));
]);
$plan_details = array(
$plan_details = [
'id' => $plan_id,
'amount' => '40000',
'interval' => 'month',
'product' => $product,
'currency' => 'usd',
'interval_count' => 2
);
];
$plan = \Stripe\Plan::create($plan_details);
}
......@@ -119,21 +119,21 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
}
// Check for a new recurring contribution.
$params = array(
$params = [
'contact_id' => $this->_contactID,
'amount' => '400',
'contribution_status_id' => "In Progress",
'return' => array('id'),
);
'return' => ['id'],
];
$result = civicrm_api3('ContributionRecur', 'getsingle', $params);
$newContributionRecurID = $result['id'];
// Now ensure that the membership record is updated to have this
// new recurring contribution id.
$membership_contribution_recur_id = civicrm_api3('Membership', 'getvalue', array(
$membership_contribution_recur_id = civicrm_api3('Membership', 'getvalue', [
'id' => $this->_membershipID,
'return' => 'contribution_recur_id'
));
]);
$this->assertEquals($newContributionRecurID, $membership_contribution_recur_id, 'Membership is updated to new contribution recur id');
// Delete the new plan so we can cleanly run the next time.
......@@ -145,14 +145,17 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
* Test making a failed recurring contribution.
*/
public function testIPNRecurFail() {
// @todo Update and make this test work
return;
$this->setupRecurringTransaction();
$payment_extra_params = array(
$payment_extra_params = [
'is_recur' => 1,
'contributionRecurID' => $this->_contributionRecurID,
'frequency_unit' => $this->_frequency_unit,
'frequency_interval' => $this->_frequency_interval,
'installments' => $this->_installments
);
];
// Note - this will succeed. It is very hard to test a failed transaction.
// We will manipulate the event to make it a failed transaction below.
$this->doPayment($payment_extra_params);
......@@ -167,16 +170,16 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
$this->ipn($payment_object, $verify);
}
$contribution = civicrm_api3('contribution', 'getsingle', array('id' => $this->_contributionID));
$contribution = civicrm_api3('contribution', 'getsingle', ['id' => $this->_contributionID]);
$contribution_status_id = $contribution['contribution_status_id'];
$status = CRM_Contribute_PseudoConstant::contributionStatus($contribution_status_id, 'name');
$this->assertEquals('Failed', $status, "Failed contribution was properly marked as failed via a stripe event.");
$failure_count = civicrm_api3('ContributionRecur', 'getvalue', array(
$failure_count = civicrm_api3('ContributionRecur', 'getvalue', [
'sequential' => 1,
'id' => $this->_contributionRecurID,
'return' => 'failure_count',
));
]);
$this->assertEquals(1, $failure_count, "Failed contribution count is correct..");
}
......@@ -184,14 +187,17 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
* Test making a recurring contribution.
*/
public function testIPNRecurSuccess() {
// @todo Update and make this test work
return;
$this->setupRecurringTransaction();
$payment_extra_params = array(
$payment_extra_params = [
'is_recur' => 1,
'contributionRecurID' => $this->_contributionRecurID,
'frequency_unit' => $this->_frequency_unit,
'frequency_interval' => $this->_frequency_interval,
'installments' => $this->_installments
);
];
$this->doPayment($payment_extra_params);
// Now check to see if an event was triggered and if so, process it.
......@@ -199,7 +205,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
if ($payment_object) {
$this->ipn($payment_object);
}
$contribution = civicrm_api3('contribution', 'getsingle', array('id' => $this->_contributionID));
$contribution = civicrm_api3('contribution', 'getsingle', ['id' => $this->_contributionID]);
$contribution_status_id = $contribution['contribution_status_id'];
$this->assertEquals(1, $contribution_status_id, "Recurring payment was properly processed via a stripe event.");
......@@ -218,7 +224,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
}
public function assertContributionRecurIsCancelled() {
$contribution_recur = civicrm_api3('contributionrecur', 'getsingle', array('id' => $this->_contributionRecurID));
$contribution_recur = civicrm_api3('contributionrecur', 'getsingle', ['id' => $this->_contributionRecurID]);
$contribution_recur_status_id = $contribution_recur['contribution_status_id'];
$status = CRM_Contribute_PseudoConstant::contributionStatus($contribution_recur_status_id, 'name');
$this->assertEquals('Cancelled', $status, "Recurring payment was properly cancelled via a stripe event.");
......@@ -238,7 +244,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
}
// Gather all events since this class was instantiated.
$params['sk'] = $this->_sk;
$params['created'] = array('gte' => $this->_created_ts);
$params['created'] = ['gte' => $this->_created_ts];
$params['type'] = $type;
$params['ppid'] = $this->_paymentProcessorID;
$params['output'] = 'raw';
......@@ -269,8 +275,8 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
/**
* Create recurring contribition
*/
public function setupRecurringTransaction($params = array()) {
$contributionRecur = civicrm_api3('contribution_recur', 'create', array_merge(array(
public function setupRecurringTransaction($params = []) {
$contributionRecur = civicrm_api3('contribution_recur', 'create', array_merge([
'financial_type_id' => $this->_financialTypeID,
'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_ContributionRecur', 'payment_instrument_id', 'Credit Card'),
'contact_id' => $this->_contactID,
......@@ -284,7 +290,7 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
'payment_processor_id' => $this->_paymentProcessorID,
// processor provided ID - use contact ID as proxy.
'processor_id' => $this->_contactID,
'api.contribution.create' => array(
'api.contribution.create' => [
'total_amount' => $this->_total,
'invoice_id' => $this->_invoiceID,
'financial_type_id' => $this->_financialTypeID,
......@@ -293,8 +299,8 @@ class CRM_Stripe_IpnTest extends CRM_Stripe_BaseTest {
'contribution_page_id' => $this->_contributionPageID,
'payment_processor_id' => $this->_paymentProcessorID,
'is_test' => 1,
),
), $params));
],
], $params));
$this->assertEquals(0, $contributionRecur['is_error']);
$this->_contributionRecurID = $contributionRecur['id'];
$this->_contributionID = $contributionRecur['values']['0']['api.contribution.create']['id'];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment