Fix checking of ApplePay and GooglePay product status capabilities

This commit is contained in:
Pedro Silva 2024-02-14 11:20:49 +00:00
parent e37177725e
commit 4a98c01883
No known key found for this signature in database
GPG key ID: E2EE20C0669D24B3
5 changed files with 165 additions and 17 deletions

View file

@ -21,19 +21,37 @@ class SellerStatus {
*/
private $products;
/**
* The capabilities.
*
* @var SellerStatusCapability[]
*/
private $capabilities;
/**
* SellerStatus constructor.
*
* @param SellerStatusProduct[] $products The products.
* @param SellerStatusProduct[] $products The products.
* @param SellerStatusCapability[] $capabilities The capabilities.
*
* @psalm-suppress RedundantConditionGivenDocblockType
*/
public function __construct( array $products ) {
public function __construct( array $products, array $capabilities ) {
foreach ( $products as $key => $product ) {
if ( is_a( $product, SellerStatusProduct::class ) ) {
continue;
}
unset( $products[ $key ] );
}
$this->products = $products;
foreach ( $capabilities as $key => $capability ) {
if ( is_a( $capability, SellerStatusCapability::class ) ) {
continue;
}
unset( $capabilities[ $key ] );
}
$this->products = $products;
$this->capabilities = $capabilities;
}
/**
@ -45,6 +63,15 @@ class SellerStatus {
return $this->products;
}
/**
* Returns the capabilities.
*
* @return SellerStatusCapability[]
*/
public function capabilities() : array {
return $this->capabilities;
}
/**
* Returns the enitity as array.
*
@ -58,8 +85,16 @@ class SellerStatus {
$this->products()
);
$capabilities = array_map(
function( SellerStatusCapability $capability ) : array {
return $capability->to_array();
},
$this->capabilities()
);
return array(
'products' => $products,
'products' => $products,
'capabilities' => $capabilities,
);
}
}

View file

@ -0,0 +1,77 @@
<?php
/**
* The capabilities of a seller status.
*
* @package WooCommerce\PayPalCommerce\ApiClient\Entity
*/
declare( strict_types=1 );
namespace WooCommerce\PayPalCommerce\ApiClient\Entity;
/**
* Class SellerStatusCapability
*/
class SellerStatusCapability {
const STATUS_ACTIVE = 'ACTIVE';
/**
* The name of the product.
*
* @var string
*/
private $name;
/**
* The status of the capability.
*
* @var string
*/
private $status;
/**
* SellerStatusCapability constructor.
*
* @param string $name The name of the product.
* @param string $status The status of the capability.
*/
public function __construct(
string $name,
string $status
) {
$this->name = $name;
$this->status = $status;
}
/**
* Returns the name of the product.
*
* @return string
*/
public function name() : string {
return $this->name;
}
/**
* Returns the status for this capability.
*
* @return string
*/
public function status() : string {
return $this->status;
}
/**
* Returns the entity as array.
*
* @return array
*/
public function to_array() : array {
return array(
'name' => $this->name(),
'status' => $this->status(),
);
}
}

View file

@ -11,6 +11,7 @@ namespace WooCommerce\PayPalCommerce\ApiClient\Factory;
use WooCommerce\PayPalCommerce\ApiClient\Entity\SellerStatus;
use WooCommerce\PayPalCommerce\ApiClient\Entity\SellerStatusProduct;
use WooCommerce\PayPalCommerce\ApiClient\Entity\SellerStatusCapability;
/**
* Class SellerStatusFactory
@ -37,6 +38,17 @@ class SellerStatusFactory {
isset( $json->products ) ? (array) $json->products : array()
);
return new SellerStatus( $products );
$capabilities = array_map(
function( $json ) : SellerStatusCapability {
$capability = new SellerStatusCapability(
isset( $json->name ) ? (string) $json->name : '',
isset( $json->status ) ? (string) $json->status : ''
);
return $capability;
},
isset( $json->capabilities ) ? (array) $json->capabilities : array()
);
return new SellerStatus( $products, $capabilities );
}
}

View file

@ -11,6 +11,7 @@ namespace WooCommerce\PayPalCommerce\Applepay\Assets;
use Throwable;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PartnersEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\SellerStatusCapability;
use WooCommerce\PayPalCommerce\ApiClient\Helper\FailureRegistry;
use WooCommerce\PayPalCommerce\Onboarding\State;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
@ -133,21 +134,32 @@ class AppleProductStatus {
}
// Check the seller status for the intended capability.
$has_capability = false;
foreach ( $seller_status->products() as $product ) {
if ( $product->name() !== 'PAYMENT_METHODS' ) {
continue;
}
if ( in_array( self::CAPABILITY_NAME, $product->capabilities(), true ) ) {
// Capability found, persist status and return true.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED );
$this->settings->persist();
$this->current_status = true;
return $this->current_status;
$has_capability = true;
}
}
foreach ( $seller_status->capabilities() as $capability ) {
if ( $capability->name() === self::CAPABILITY_NAME && $capability->status() === SellerStatusCapability::STATUS_ACTIVE ) {
$has_capability = true;
}
}
if ( $has_capability ) {
// Capability found, persist status and return true.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED );
$this->settings->persist();
$this->current_status = true;
return $this->current_status;
}
// Capability not found, persist status and return false.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_DISABLED );
$this->settings->persist();

View file

@ -11,6 +11,7 @@ namespace WooCommerce\PayPalCommerce\Googlepay\Helper;
use Throwable;
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\PartnersEndpoint;
use WooCommerce\PayPalCommerce\ApiClient\Entity\SellerStatusCapability;
use WooCommerce\PayPalCommerce\ApiClient\Helper\FailureRegistry;
use WooCommerce\PayPalCommerce\Onboarding\State;
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
@ -133,21 +134,32 @@ class ApmProductStatus {
}
// Check the seller status for the intended capability.
$has_capability = false;
foreach ( $seller_status->products() as $product ) {
if ( $product->name() !== 'PAYMENT_METHODS' ) {
continue;
}
if ( in_array( self::CAPABILITY_NAME, $product->capabilities(), true ) ) {
// Capability found, persist status and return true.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED );
$this->settings->persist();
$this->current_status = true;
return $this->current_status;
$has_capability = true;
}
}
foreach ( $seller_status->capabilities() as $capability ) {
if ( $capability->name() === self::CAPABILITY_NAME && $capability->status() === SellerStatusCapability::STATUS_ACTIVE ) {
$has_capability = true;
}
}
if ( $has_capability ) {
// Capability found, persist status and return true.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_ENABLED );
$this->settings->persist();
$this->current_status = true;
return $this->current_status;
}
// Capability not found, persist status and return false.
$this->settings->set( self::SETTINGS_KEY, self::SETTINGS_VALUE_DISABLED );
$this->settings->persist();