jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/337595 )
Change subject: Message normalization tests
......................................................................
Message normalization tests
Test each type of message using data providers. This will help ensure
we don't break anything when we move recurring normalization into the
SmashPig job.
Bug: T107372
Change-Id: Ie02bd9d7cb9660ff8f6eb981ae79e333aca9f735
---
A PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
A PaymentProviders/PayPal/Tests/Data/refund_transformed.json
A PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
A PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
A PaymentProviders/PayPal/Tests/Data/web_accept_transformed.json
M PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
6 files changed, 222 insertions(+), 97 deletions(-)
Approvals:
XenoRyet: Looks good to me, approved
jenkins-bot: Verified
diff --git
a/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
b/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
new file mode 100644
index 0000000..77b8eef
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/express_checkout_transformed.json
@@ -0,0 +1,17 @@
+{
+ "date": 1481144318,
+ "txn_type": "express_checkout",
+ "gateway_txn_id": "3N2616476S0123456",
+ "currency": "JPY",
+ "contribution_tracking_id": "123456",
+ "email": "[email protected]",
+ "first_name": "Fowl",
+ "last_name": "Pond",
+ "gross": "150",
+ "fee": "43",
+ "order_id": "123456",
+ "gateway": "paypal_ec",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_version": "unknown"
+}
diff --git a/PaymentProviders/PayPal/Tests/Data/refund_transformed.json
b/PaymentProviders/PayPal/Tests/Data/refund_transformed.json
new file mode 100644
index 0000000..ef9ca52
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/refund_transformed.json
@@ -0,0 +1,25 @@
+{
+ "date": 1475088922,
+ "gateway_parent_id": "22b55555YY4499222",
+ "gateway_txn_id": "99E56789RR1234222",
+ "currency": "USD",
+ "type": "refund",
+ "contribution_tracking_id": "93731212",
+ "email": "[email protected]",
+ "first_name": "Clyde",
+ "last_name": "Barrow",
+ "street_address": "1234 Outlaw Ave",
+ "city": "Telico",
+ "state_province": "TX",
+ "country": "US",
+ "postal_code": "75119",
+ "gross": "-1.00",
+ "fee": "-0.27",
+ "order_id": "93731212",
+ "gateway_refund_id": "99E56789RR1234222",
+ "gross_currency": "USD",
+ "gateway": "paypal",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_version": "unknown"
+}
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
b/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
new file mode 100644
index 0000000..da0be18
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_payment_transformed.json
@@ -0,0 +1,45 @@
+{
+ "mc_gross": "1.03",
+ "protection_eligibility": "Eligible",
+ "address_status": "confirmed",
+ "payer_id": "XXXXXXXXXXXXX",
+ "address_street": "123 Only Kidding",
+ "payment_date": "16:03:13 Sep 21, 2016 PDT",
+ "payment_status": "Completed",
+ "charset": "UTF-8",
+ "address_zip": "99999",
+ "first_name": "Joe",
+ "mc_fee": "0.27",
+ "address_country_code": "US",
+ "address_name": "Joe Camel",
+ "notify_version": "3.8",
+ "subscr_id": "S-XXXXXXXXXXXXXXXXX",
+ "custom": "7373",
+ "payer_status": "verified",
+ "business": "[email protected]",
+ "address_country": "United States",
+ "address_city": "Maynardsville",
+ "verify_sign": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "payer_email": "[email protected]",
+ "txn_id": "77777777777777777",
+ "payment_type": "instant",
+ "payer_business_name": "Joe Camel",
+ "last_name": "Camel",
+ "address_state": "CA",
+ "receiver_email": "[email protected]",
+ "payment_fee": "0.27",
+ "receiver_id": "7777777777777",
+ "txn_type": "subscr_payment",
+ "item_name": "Donation to the Wikimedia Foundation",
+ "mc_currency": "USD",
+ "item_number": "DONATE",
+ "residence_country": "US",
+ "transaction_subject": "7373",
+ "payment_gross": "1.03",
+ "ipn_track_id": "7777777777777",
+ "date": "",
+ "gateway": "paypal",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_version": "unknown"
+}
diff --git a/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
new file mode 100644
index 0000000..c18c5e1
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/subscr_signup_transformed.json
@@ -0,0 +1,40 @@
+{
+ "amount3": "1.03",
+ "address_status": "confirmed",
+ "subscr_date": "16:03:11 Sep 21, 2016 PDT",
+ "payer_id": "XXXXXXXXXXXXX",
+ "address_street": "123 Only Joking",
+ "mc_amount3": "1.03",
+ "charset": "UTF-8",
+ "address_zip": "99999",
+ "first_name": "Joe",
+ "reattempt": "1",
+ "address_country_code": "US",
+ "address_name": "Joe Camel",
+ "notify_version": "3.8",
+ "subscr_id": "S-XXXXXXXXXXXXXXXXX",
+ "custom": "7373",
+ "payer_status": "verified",
+ "business": "[email protected]",
+ "address_country": "United States",
+ "address_city": "Scranton",
+ "verify_sign": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+ "payer_email": "[email protected]",
+ "payer_business_name": "Joe Camel",
+ "last_name": "Camel",
+ "address_state": "CA",
+ "receiver_email": "[email protected]",
+ "recurring": "1",
+ "txn_type": "subscr_signup",
+ "item_name": "Donation to the Wikimedia Foundation",
+ "mc_currency": "USD",
+ "item_number": "DONATE",
+ "residence_country": "US",
+ "period3": "1 M",
+ "ipn_track_id": "7777777777777",
+ "date": "",
+ "gateway": "paypal",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_version": "unknown"
+}
diff --git a/PaymentProviders/PayPal/Tests/Data/web_accept_transformed.json
b/PaymentProviders/PayPal/Tests/Data/web_accept_transformed.json
new file mode 100644
index 0000000..5120fc8
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/web_accept_transformed.json
@@ -0,0 +1,23 @@
+{
+ "date": 1471069727,
+ "txn_type": "web_accept",
+ "gateway_txn_id": "JJJJJJJJJJJJJJJJJ",
+ "currency": "USD",
+ "contribution_tracking_id": "33333333",
+ "email": "[email protected]",
+ "first_name": "thanks",
+ "last_name": "bobby",
+ "street_address": "hell no",
+ "city": "Zurich",
+ "state_province": "",
+ "country": "CH",
+ "postal_code": "8032",
+ "supplemental_address_1": "where indeed",
+ "gross": "7.00",
+ "fee": "0.44",
+ "order_id": "33333333",
+ "gateway": "paypal",
+ "source_name": "SmashPig",
+ "source_type": "listener",
+ "source_version": "unknown"
+}
diff --git
a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
index 0022216..88f5ca0 100644
--- a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
+++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
@@ -35,8 +35,6 @@
// TODO 'new_case.json' => 'no-op',
);
- static $messages = array();
-
public function setUp() {
parent::setUp();
$this->config = PayPalTestConfiguration::get();
@@ -46,21 +44,35 @@
->createTable( 'jobs-paypal' );
Context::initWithLogger( $this->config );
- foreach ( self::$message_data as $file => $type ) {
- self::$messages[] = array(
- 'type' => $type,
- 'payload' => json_decode(
- file_get_contents( __DIR__ .
'/../Data/' . $file ),
- true
- )
- );
- }
}
public function tearDown() {
self::$fail_verification = false;
self::$paypal_is_broken = false;
parent::tearDown();
+ }
+
+ public function messageProvider() {
+ $messages = array();
+ foreach ( self::$message_data as $file => $type ) {
+ $payloadFile = __DIR__ . '/../Data/' . $file;
+ $messageData = array(
+ 'type' => $type,
+ 'payload' => json_decode(
+ file_get_contents( $payloadFile ),
+ true
+ )
+ );
+ $transformedFile = str_replace( '.json',
'_transformed.json', $payloadFile );
+ if ( file_exists( $transformedFile ) ) {
+ $messageData['transformed'] = json_decode(
+ file_get_contents( $transformedFile ),
+ true
+ );
+ }
+ $messages[] = array( $messageData );
+ }
+ return $messages;
}
private function capture( $msg ) {
@@ -70,19 +82,28 @@
return $listener->execute( $request, $response );
}
- public function testCapture() {
- foreach ( self::$messages as $msg ) {
+ private function scrubIgnoredFields( &$message ) {
+ unset( $message['source_host'] );
+ unset( $message['source_run_id'] );
+ unset( $message['source_enqueued_time'] );
+ unset( $message['correlationId'] );
+ unset( $message['propertiesExportedAsKeys'] );
+ unset( $message['propertiesExcludedFromExport'] );
+ }
- $this->capture( $msg['payload'] );
+ /**
+ * @dataProvider messageProvider
+ */
+ public function testCapture( $msg ) {
+ $this->capture( $msg['payload'] );
- $jobQueue = $this->config->object(
'data-store/jobs-paypal' );
- $jobMessage = $jobQueue->pop();
+ $jobQueue = $this->config->object( 'data-store/jobs-paypal' );
+ $jobMessage = $jobQueue->pop();
- $this->assertEquals( $jobMessage['php-message-class'],
- 'SmashPig\PaymentProviders\PayPal\Job' );
+ $this->assertEquals( $jobMessage['php-message-class'],
+ 'SmashPig\PaymentProviders\PayPal\Job' );
- $this->assertEquals( $jobMessage['payload'],
$msg['payload'] );
- }
+ $this->assertEquals( $jobMessage['payload'], $msg['payload'] );
}
public function testBlankMessage() {
@@ -91,40 +112,44 @@
$this->assertNull( $jobQueue->pop() );
}
- public function testConsume() {
- foreach ( self::$messages as $msg ) {
- $this->capture( $msg['payload'] );
+ /**
+ * @dataProvider messageProvider
+ */
+ public function testConsume( $msg ) {
+ $this->capture( $msg['payload'] );
- $jobQueue = $this->config->object(
'data-store/jobs-paypal' );
- $jobMessage = $jobQueue->pop();
+ $jobQueue = $this->config->object( 'data-store/jobs-paypal' );
+ $jobMessage = $jobQueue->pop();
- $job = KeyedOpaqueStorableObject::fromJsonProxy(
- $jobMessage['php-message-class'],
- json_encode( $jobMessage )
- );
+ $job = KeyedOpaqueStorableObject::fromJsonProxy(
+ $jobMessage['php-message-class'],
+ json_encode( $jobMessage )
+ );
- $job->execute();
+ $job->execute();
- $queue = $this->config->object( 'data-store/' .
$msg['type'] );
- $queue->createTable( $msg['type'] );
- $message = $queue->pop();
+ $queue = $this->config->object( 'data-store/' . $msg['type'] );
+ $queue->createTable( $msg['type'] );
+ $message = $queue->pop();
- if ( $job->is_reject() ) {
- $this->assertEmpty( $message );
- } else {
- $this->assertNotEmpty( $message );
- if ( isset(
$message['contribution_tracking_id'] ) ) {
- $this->assertEquals(
$message['contribution_tracking_id'], $message['order_id'] );
- }
-
- if ( isset( $message['supplemental_address_1']
) ) {
- $this->assertNotEquals(
-
$message['supplemental_address_1'],
- "{$message['first_name']}
{$message['last_name']}"
- );
- }
+ if ( $job->is_reject() ) {
+ $this->assertEmpty( $message );
+ } else {
+ $this->assertNotEmpty( $message );
+ if ( isset( $message['contribution_tracking_id'] ) ) {
+ $this->assertEquals(
$message['contribution_tracking_id'], $message['order_id'] );
}
+ if ( isset( $message['supplemental_address_1'] ) ) {
+ $this->assertNotEquals(
+ $message['supplemental_address_1'],
+ "{$message['first_name']}
{$message['last_name']}"
+ );
+ }
+ if ( isset( $msg['transformed'] ) ) {
+ $this->scrubIgnoredFields( $message );
+ $this->assertEquals( $msg['transformed'],
$message );
+ }
}
}
@@ -140,55 +165,5 @@
self::$paypal_is_broken = true;
$jobMessage = array( 'txn_type' => 'fail' );
$this->assertFalse( $this->capture( $jobMessage ) );
- }
-
- public function testConsumeExpressCheckout() {
- $message = json_decode( file_get_contents( __DIR__ .
'/../Data/express_checkout.json' ), true );
-
- $this->capture( $message );
-
- $jobQueue = $this->config->object( 'data-store/jobs-paypal' );
- $jobMessage = $jobQueue->pop();
-
- $job = KeyedOpaqueStorableObject::fromJsonProxy(
- $jobMessage['php-message-class'],
- json_encode( $jobMessage )
- );
-
- $job->execute();
-
- $queue = $this->config->object( 'data-store/verified' );
- $queue->createTable( 'verified' );
- $message = $queue->pop();
-
- $this->assertNotEmpty( $message );
-
- $expected = array(
- 'correlationId' => '',
- 'date' => 1481144318,
- 'txn_type' => 'express_checkout',
- 'gateway_txn_id' => '3N2616476S0123456',
- 'currency' => 'JPY',
- 'contribution_tracking_id' => '123456',
- 'email' => '[email protected]',
- 'first_name' => 'Fowl',
- 'last_name' => 'Pond',
- 'gross' => '150',
- 'fee' => '43',
- 'order_id' => '123456',
- 'gateway' => 'paypal_ec',
- 'source_name' => 'SmashPig',
- 'source_type' => 'listener',
- #'source_host' => 'rust',
- #'source_run_id' => 26345,
- 'source_version' => 'unknown',
- #'source_enqueued_time' => 1481145747,
- );
-
- unset( $message['source_host'] );
- unset( $message['source_run_id'] );
- unset( $message['source_enqueued_time'] );
-
- $this->assertEquals( $expected, $message );
}
}
--
To view, visit https://gerrit.wikimedia.org/r/337595
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie02bd9d7cb9660ff8f6eb981ae79e333aca9f735
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: XenoRyet <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits