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