jenkins-bot has submitted this change and it was merged.

Change subject: Update payments_initial when donation completes
......................................................................


Update payments_initial when donation completes

FIXME: This direct-to-db approach doesn't work for Amazon and Astropay
listeners as they exist now. But if we move the pending merge into a
SmashPig job, they can do the payments_init update then.

Bigger FIXME: payments_init row should really stay intact, and a new
table should track status changes.

Change-Id: Ibb79ba42d22d57dd849ffdd5eae3db92ad57163c
---
M Core/DataStores/PaymentsInitialDatabase.php
M PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
M PaymentProviders/Adyen/Tests/config_test.yaml
M PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
4 files changed, 70 insertions(+), 1 deletion(-)

Approvals:
  Cdentinger: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Core/DataStores/PaymentsInitialDatabase.php 
b/Core/DataStores/PaymentsInitialDatabase.php
index d40238c..857377e 100644
--- a/Core/DataStores/PaymentsInitialDatabase.php
+++ b/Core/DataStores/PaymentsInitialDatabase.php
@@ -75,6 +75,25 @@
                $this->prepareAndExecute( $sql, $message );
        }
 
+       public function updatePaymentStatus(
+               $gateway, $contributionTrackingId, $orderId, $status
+       ) {
+               $sql = 'UPDATE payments_initial
+                       SET payments_final_status = :status
+                       WHERE gateway = :gateway
+                       AND contribution_tracking_id = :ct_id
+                       AND order_id = :order_id';
+
+               $params = array(
+                       'gateway' => $gateway,
+                       'ct_id' => $contributionTrackingId,
+                       'order_id' => $orderId,
+                       'status' => $status
+               );
+
+               $this->prepareAndExecute( $sql, $params );
+       }
+
        protected function getConfigKey() {
                return 'data-store/fredge-db';
        }
diff --git a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php 
b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
index bdcb117..8531ed8 100644
--- a/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
+++ b/PaymentProviders/Adyen/Jobs/RecordCaptureJob.php
@@ -1,6 +1,7 @@
 <?php namespace SmashPig\PaymentProviders\Adyen\Jobs;
 
 use SmashPig\Core\Configuration;
+use SmashPig\Core\DataStores\PaymentsInitialDatabase;
 use SmashPig\Core\DataStores\PendingDatabase;
 use SmashPig\Core\Jobs\RunnableJob;
 use SmashPig\Core\Logging\Logger;
@@ -60,6 +61,14 @@
                        SourceFields::addToMessage( $queueMessage );
                        $config->object( 'data-store/verified' )->push( 
$queueMessage );
 
+                       PaymentsInitialDatabase::get()
+                               ->updatePaymentStatus(
+                                       'adyen',
+                                       $dbMessage['contribution_tracking_id'],
+                                       $dbMessage['order_id'],
+                                       'complete'
+                               );
+
                        // Remove it from the pending database
                        $logger->debug( 'Removing donor details message from 
pending database' );
                        $db->deleteMessage( $dbMessage );
diff --git a/PaymentProviders/Adyen/Tests/config_test.yaml 
b/PaymentProviders/Adyen/Tests/config_test.yaml
index 33e8128..6f249d0 100644
--- a/PaymentProviders/Adyen/Tests/config_test.yaml
+++ b/PaymentProviders/Adyen/Tests/config_test.yaml
@@ -24,6 +24,11 @@
             constructor-parameters:
                 - 'sqlite::memory:'
 
+        fredge-db:
+            class: PDO
+            constructor-parameters:
+                - 'sqlite::memory:'
+
     payment-provider:
         adyen:
             api:
diff --git a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php 
b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
index ce3edf9..f59e1b2 100644
--- a/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
+++ b/PaymentProviders/Adyen/Tests/phpunit/RecordCaptureJobTest.php
@@ -3,11 +3,14 @@
 use SmashPig\Core\Configuration;
 use SmashPig\Core\Context;
 use SmashPig\Core\DataStores\KeyedOpaqueStorableObject;
+use SmashPig\Core\DataStores\PaymentsInitialDatabase;
 use SmashPig\Core\DataStores\PendingDatabase;
 use SmashPig\Core\QueueConsumers\BaseQueueConsumer;
 use SmashPig\PaymentProviders\Adyen\Jobs\RecordCaptureJob;
 use SmashPig\PaymentProviders\Adyen\Tests\AdyenTestConfiguration;
 use SmashPig\Tests\BaseSmashPigUnitTestCase;
+use SmashPig\Tests\PaymentsInitialDatabaseTest;
+use SmashPig\Tests\TestingDatabase;
 
 /**
  * Verify Adyen RecordCapture job functions
@@ -23,21 +26,43 @@
         */
        protected $pendingDatabase;
        protected $pendingMessage;
+       /**
+        * @var PaymentsInitialDatabase
+        */
+       protected $paymentsInitDatabase;
+       protected $paymentsInitMessage;
 
        public function setUp() {
                parent::setUp();
                $this->config = 
AdyenTestConfiguration::createWithSuccessfulApi();
                Context::initWithLogger( $this->config );
+
+               $this->paymentsInitDatabase = PaymentsInitialDatabase::get();
+               $this->paymentsInitDatabase->createTable();
+               $this->paymentsInitMessage = 
PaymentsInitialDatabaseTest::generateTestMessage();
+               $this->paymentsInitMessage['gateway'] = 'adyen';
+               $this->paymentsInitMessage['payments_final_status'] = 'pending';
+               $this->paymentsInitDatabase->storeMessage(
+                       $this->paymentsInitMessage
+               );
+
                $this->pendingDatabase = PendingDatabase::get();
+               $this->pendingDatabase->createTable();
                $this->pendingMessage = json_decode(
                        file_get_contents( __DIR__ . '/../Data/pending.json' ) 
, true
                );
+               foreach( array( 'order_id', 'contribution_tracking_id' ) as 
$key ) {
+                       $this->pendingMessage[$key] = 
$this->paymentsInitMessage[$key];
+               }
+               $this->pendingMessage['correlationId'] = 'adyen-' .
+                       $this->pendingMessage['order_id'];
                $this->pendingMessage['captured'] = true;
                $this->pendingDatabase->storeMessage( $this->pendingMessage );
        }
 
        public function tearDown() {
-               $this->pendingDatabase->deleteMessage( $this->pendingMessage );
+               TestingDatabase::clearStatics( $this->paymentsInitDatabase );
+               TestingDatabase::clearStatics( $this->pendingDatabase );
                parent::tearDown();
        }
 
@@ -49,6 +74,7 @@
                        
'SmashPig\PaymentProviders\Adyen\ExpatriatedMessages\Capture',
                        file_get_contents( __DIR__ . '/../Data/capture.json' )
                );
+               $capture->merchantReference = $this->pendingMessage['order_id'];
 
                $job = RecordCaptureJob::factory( $capture );
                $this->assertTrue( $job->execute() );
@@ -86,5 +112,15 @@
                                );
                        }
                }
+               $initMessage = $this->paymentsInitDatabase
+                       ->fetchMessageByGatewayOrderId(
+                               'adyen', $this->pendingMessage['order_id']
+                       );
+
+               $this->assertEquals(
+                       'complete',
+                       $initMessage['payments_final_status'],
+                       'Did not mark payments_initial row as complete'
+               );
        }
 }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ibb79ba42d22d57dd849ffdd5eae3db92ad57163c
Gerrit-PatchSet: 5
Gerrit-Project: wikimedia/fundraising/SmashPig
Gerrit-Branch: master
Gerrit-Owner: Ejegg <[email protected]>
Gerrit-Reviewer: Awight <[email protected]>
Gerrit-Reviewer: Cdentinger <[email protected]>
Gerrit-Reviewer: Ejegg <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to