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

Reply via email to