Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Stripe
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Extensions
Stripe
Commits
28ec3123
Commit
28ec3123
authored
5 years ago
by
mattwire
Browse files
Options
Downloads
Patches
Plain Diff
Improvements to tests from MR84/96
parent
f6e09506
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!109
6.4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
api/v3/Stripe/Setuptest.php
+2
-2
2 additions, 2 deletions
api/v3/Stripe/Setuptest.php
tests/phpunit/CRM/Stripe/BaseTest.php
+57
-29
57 additions, 29 deletions
tests/phpunit/CRM/Stripe/BaseTest.php
tests/phpunit/CRM/Stripe/IpnTest.php
+36
-30
36 additions, 30 deletions
tests/phpunit/CRM/Stripe/IpnTest.php
with
95 additions
and
61 deletions
api/v3/Stripe/Setuptest.php
+
2
−
2
View file @
28ec3123
...
...
@@ -41,8 +41,8 @@ function civicrm_api3_stripe_Setuptest($params) {
'is_default'
=>
0
,
'is_test'
=>
1
,
'is_recur'
=>
1
,
'user_name'
=>
$params
[
'
s
k'
],
'password'
=>
$params
[
'
p
k'
],
'user_name'
=>
$params
[
'
p
k'
],
'password'
=>
$params
[
'
s
k'
],
'url_site'
=>
'https://api.stripe.com/v1'
,
'url_recur'
=>
'https://api.stripe.com/v1'
,
'class_name'
=>
'Payment_Stripe'
,
...
...
This diff is collapsed.
Click to expand it.
tests/phpunit/CRM/Stripe/BaseTest.php
+
57
−
29
View file @
28ec3123
...
...
@@ -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
);
...
...
This diff is collapsed.
Click to expand it.
tests/phpunit/CRM/Stripe/IpnTest.php
+
36
−
30
View file @
28ec3123
...
...
@@ -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'
];
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment