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