Awight has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/305593

Change subject: [WIP] Skeletal tests for both stages of the PayPal listener
......................................................................

[WIP] Skeletal tests for both stages of the PayPal listener

Bug: T141654
Change-Id: If96f0f2beeffd1c7cc2b2f911b4d6657aec9c6ea
---
A PaymentProviders/PayPal/Tests/Data/config_test.yaml
A PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php
A PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
A PaymentProviders/PayPal/Tests/phpunit/ProcessIncomingMessageJobTest.php
4 files changed, 147 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/wikimedia/fundraising/SmashPig 
refs/changes/93/305593/1

diff --git a/PaymentProviders/PayPal/Tests/Data/config_test.yaml 
b/PaymentProviders/PayPal/Tests/Data/config_test.yaml
new file mode 100644
index 0000000..e19e943
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/Data/config_test.yaml
@@ -0,0 +1,26 @@
+paypal:
+    data-store:
+        pending:
+            class: SmashPig\Tests\MockDataStore
+            inst-args: []
+
+        antifraud-stomp:
+            class: SmashPig\Tests\MockDataStore
+            inst-args: []
+
+        recurring:
+            class: SmashPig\Tests\MockDataStore
+            inst-args: []
+
+        refund:
+            class: SmashPig\Tests\MockDataStore
+            inst-args: []
+
+        verified:
+            class: SmashPig\Tests\MockDataStore
+            inst-args: []
+
+        pending-db:
+            class: PDO
+            inst-args:
+                - 'sqlite::memory:'
diff --git a/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php 
b/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php
new file mode 100644
index 0000000..f9325e2
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/PayPalTestConfiguration.php
@@ -0,0 +1,14 @@
+<?php
+namespace SmashPig\PaymentProviders\PayPal\Tests;
+
+use SmashPig\Core\Configuration;
+
+class PayPalTestConfiguration extends Configuration {
+
+       public function __construct() {
+               parent::__construct(
+                       'paypal',
+                       __DIR__ . '/../Data/config_test.yaml'
+               );
+       }
+}
diff --git 
a/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php 
b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
new file mode 100644
index 0000000..70d09c1
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/phpunit/CaptureIncomingMessageTest.php
@@ -0,0 +1,49 @@
+<?php
+namespace SmashPig\PaymentProviders\PayPal\Tests;
+
+use SmashPig\Core\Configuration;
+use SmashPig\Core\Context;
+use SmashPig\Core\DataStores\KeyedOpaqueStorableObject;
+use SmashPig\PaymentProviders\PayPal\Listener;
+use SmashPig\PaymentProviders\PayPal\Tests\PayPalTestConfiguration;
+use SmashPig\Tests\BaseSmashPigUnitTestCase;
+
+/**
+ * Test the first stage of the listener, which shunts incoming IPN messages
+ * into a job queue.
+ */
+class CaptureIncomingMessageTest extends BaseSmashPigUnitTestCase {
+
+       /**
+        * @var Configuration
+        */
+       public $config;
+
+       public function setUp() {
+               parent::setUp();
+               $this->config = PayPalTestConfiguration::get( true );
+               Context::initWithLogger( $this->config );
+       }
+
+       public function testCaptureIncoming() {
+               $jobQueue = $this->config->object( 'data-store/job-requests', 
true );
+
+               $payload = json_decode(
+                       file_get_contents( __DIR__ . '/../Data/web_accept.json' 
)
+                       true
+               );
+
+               $listener = new Listener();
+               $listener->execute( $request, $response,
+                       array( 'smashpig', 'listener', 'paypal' )
+               );
+
+               // FIXME: This is all make-believe.
+               $jobQueueMessage = $jobQueue->queueGetObject( null, '' );
+               $this->assertNotNull( $jobQueueMessage,
+                       'Job was inserted');
+               $actualPayload = $jobQueueMessage->getPayload();
+               $this->assertEquals( $payload, $actualPayload,
+                       'Queued job contains accurate payload' );
+       }
+}
diff --git 
a/PaymentProviders/PayPal/Tests/phpunit/ProcessIncomingMessageJobTest.php 
b/PaymentProviders/PayPal/Tests/phpunit/ProcessIncomingMessageJobTest.php
new file mode 100644
index 0000000..054a7f0
--- /dev/null
+++ b/PaymentProviders/PayPal/Tests/phpunit/ProcessIncomingMessageJobTest.php
@@ -0,0 +1,58 @@
+<?php
+namespace SmashPig\PaymentProviders\PayPal\Tests;
+
+use SmashPig\Core\Configuration;
+use SmashPig\Core\Context;
+# TODO: Whatever we call this job.
+use SmashPig\PaymentProviders\PayPal\Jobs\ProcessIncomingMessageJob;
+# TODO: Whatever we call this message class.
+use SmashPig\PaymentProviders\PayPal\Messages\RawIncomingMessage;
+use SmashPig\PaymentProviders\PayPal\Tests\PayPalTestConfiguration;
+use SmashPig\Tests\BaseSmashPigUnitTestCase;
+
+/**
+ * Test the second stage of the listener, a job that processes the messages in
+ * non-realtime.
+ */
+class ProcessIncomingMessageJobTest extends BaseSmashPigUnitTestCase {
+
+       /**
+        * @var Configuration
+        */
+       public $config;
+
+       public function setUp() {
+               parent::setUp();
+               $this->config = PayPalTestConfiguration::get( true );
+               Context::initWithLogger( $this->config );
+       }
+
+       public function createJob( $payload ) {
+               $jobMessage = new RawIncomingMessage();
+               $jobMessage->setPayload( $payload );
+               return $jobMessage;
+       }
+
+       public function testSuccessfulValidation() {
+               $completedQueue = $this->config->object( 
'data-store/completed', true );
+
+               $payload = json_decode(
+                       file_get_contents( __DIR__ . '/../Data/web_accept.json' 
),
+                       true
+               );
+               $jobMessage = $this->createJob( $payload );
+               $job = ProcessIncomingMessageJob::factory( $jobMessage );
+               $this->assertTrue( $job->execute() );
+
+               $completedMessage = $completed->queueGetObject( null, '' );
+               $this->assertNotNull( $completedMessage,
+                       'Successful charge was sent to the completed queue.' );
+
+               // TODO: populate expected fields
+               $expectedDonation = array( 'FOO.' );
+               $this->assertEquals( $expectedDonation, $completedMessage,
+                       'Completed donation matches expected content' );
+
+               // TODO: Check that validation was called.
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/305593
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If96f0f2beeffd1c7cc2b2f911b4d6657aec9c6ea
Gerrit-PatchSet: 1
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Awight <awi...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to