Set transaction id after manual capture

This commit is contained in:
Alex P 2021-10-14 18:50:32 +03:00
parent 58cb230867
commit 94c3356c82
3 changed files with 42 additions and 10 deletions

View file

@ -55,6 +55,7 @@ return array(
$subscription_helper = $container->get( 'subscription.helper' );
$page_id = $container->get( 'wcgateway.current-ppcp-settings-page-id' );
$environment = $container->get( 'onboarding.environment' );
$logger = $container->get( 'woocommerce.logger.woocommerce' );
return new PayPalGateway(
$settings_renderer,
$order_processor,
@ -67,7 +68,8 @@ return array(
$transaction_url_provider,
$subscription_helper,
$page_id,
$environment
$environment,
$logger
);
},
'wcgateway.credit-card-gateway' => static function ( ContainerInterface $container ): CreditCardGateway {

View file

@ -9,6 +9,7 @@ declare(strict_types=1);
namespace WooCommerce\PayPalCommerce\WcGateway\Gateway;
use Psr\Log\LoggerInterface;
use WooCommerce\PayPalCommerce\ApiClient\Entity\CaptureStatus;
use WooCommerce\PayPalCommerce\Onboarding\Environment;
use WooCommerce\PayPalCommerce\Onboarding\State;
@ -120,6 +121,13 @@ class PayPalGateway extends \WC_Payment_Gateway {
*/
protected $environment;
/**
* The logger.
*
* @var LoggerInterface
*/
private $logger;
/**
* PayPalGateway constructor.
*
@ -135,6 +143,7 @@ class PayPalGateway extends \WC_Payment_Gateway {
* @param SubscriptionHelper $subscription_helper The subscription helper.
* @param string $page_id ID of the current PPCP gateway settings page, or empty if it is not such page.
* @param Environment $environment The environment.
* @param LoggerInterface $logger The logger.
*/
public function __construct(
SettingsRenderer $settings_renderer,
@ -148,7 +157,8 @@ class PayPalGateway extends \WC_Payment_Gateway {
TransactionUrlProvider $transaction_url_provider,
SubscriptionHelper $subscription_helper,
string $page_id,
Environment $environment
Environment $environment,
LoggerInterface $logger
) {
$this->id = self::ID;
@ -162,6 +172,7 @@ class PayPalGateway extends \WC_Payment_Gateway {
$this->transaction_url_provider = $transaction_url_provider;
$this->page_id = $page_id;
$this->environment = $environment;
$this->logger = $logger;
$this->onboarded = $state->current_state() === State::STATE_ONBOARDED;
if ( $this->onboarded ) {
@ -274,6 +285,8 @@ class PayPalGateway extends \WC_Payment_Gateway {
$capture = end( $captures );
$this->update_transaction_id( $capture->id(), $wc_order, $this->logger );
$this->handle_capture_status( $capture, $wc_order );
if ( AuthorizedPaymentsProcessor::SUCCESSFUL === $result_status ) {

View file

@ -5,6 +5,7 @@ namespace WooCommerce\PayPalCommerce\WcGateway\Gateway;
use Psr\Container\ContainerInterface;
use Psr\Log\NullLogger;
use WooCommerce\PayPalCommerce\ApiClient\Entity\Capture;
use WooCommerce\PayPalCommerce\ApiClient\Entity\CaptureStatus;
use WooCommerce\PayPalCommerce\Onboarding\Environment;
@ -80,7 +81,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
expect('wc_get_order')
@ -130,7 +132,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
expect('wc_get_order')
@ -197,7 +200,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
expect('wc_get_order')
@ -224,6 +228,8 @@ class WcGatewayTest extends TestCase
public function testCaptureAuthorizedPayment() {
expect('is_admin')->andReturn(false);
$transactionId = 'abcd1234';
$wcOrder = Mockery::mock(\WC_Order::class);
$wcOrder
->expects('add_order_note');
@ -233,13 +239,20 @@ class WcGatewayTest extends TestCase
$wcOrder
->expects('payment_complete');
$wcOrder
->expects('save');
->expects('set_transaction_id')
->with($transactionId);
$wcOrder
->shouldReceive('save')
->atLeast()->once();
$settingsRenderer = Mockery::mock(SettingsRenderer::class);
$orderProcessor = Mockery::mock(OrderProcessor::class);
$capture = Mockery::mock(Capture::class);
$capture
->shouldReceive('status')
->andReturn(new CaptureStatus(CaptureStatus::COMPLETED));
$capture
->shouldReceive('id')
->andReturn($transactionId);
$authorizedPaymentsProcessor = Mockery::mock(AuthorizedPaymentsProcessor::class);
$authorizedPaymentsProcessor
->expects('process')
@ -276,7 +289,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
$this->assertTrue($testee->capture_authorized_payment($wcOrder));
@ -332,7 +346,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
$this->assertTrue($testee->capture_authorized_payment($wcOrder));
@ -385,7 +400,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
$this->assertFalse($testee->capture_authorized_payment($wcOrder));
@ -426,7 +442,8 @@ class WcGatewayTest extends TestCase
$transactionUrlProvider,
$subscriptionHelper,
PayPalGateway::ID,
$this->environment
$this->environment,
new NullLogger()
);
$this->assertSame($needSetup, $testee->needs_setup());