Update AdditionalPayments task to use default gateway suggestion (#50674)
* Add new default spec function * Changelog * Add a new method to get cached or default * Add test * Update comment * Revert comment * Update docblock * Lint * Typo * Set specs to default when marketplace suggestion is disabled * Update tests
This commit is contained in:
parent
34d40f9a63
commit
ad1b233a9c
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: patch
|
||||||
|
Type: update
|
||||||
|
|
||||||
|
Update AdditionalPayments task to use default payment gateways
|
|
@ -188,7 +188,7 @@ class AdditionalPayments extends Payments {
|
||||||
*/
|
*/
|
||||||
private static function get_suggestion_gateways( $filter_by = 'category_additional' ) {
|
private static function get_suggestion_gateways( $filter_by = 'category_additional' ) {
|
||||||
$country = wc_get_base_location()['country'];
|
$country = wc_get_base_location()['country'];
|
||||||
$plugin_suggestions = Init::get_suggestions();
|
$plugin_suggestions = Init::get_cached_or_default_suggestions();
|
||||||
$plugin_suggestions = array_filter(
|
$plugin_suggestions = array_filter(
|
||||||
$plugin_suggestions,
|
$plugin_suggestions,
|
||||||
function( $plugin ) use ( $country, $filter_by ) {
|
function( $plugin ) use ( $country, $filter_by ) {
|
||||||
|
|
|
@ -61,6 +61,31 @@ class Init extends RemoteSpecsEngine {
|
||||||
return $specs_to_return;
|
return $specs_to_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets either cached or default suggestions.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function get_cached_or_default_suggestions() {
|
||||||
|
$specs = 'no' === get_option( 'woocommerce_show_marketplace_suggestions', 'yes' )
|
||||||
|
? DefaultPaymentGateways::get_all()
|
||||||
|
: PaymentGatewaySuggestionsDataSourcePoller::get_instance()->get_cached_specs();
|
||||||
|
|
||||||
|
if ( ! is_array( $specs ) || 0 === count( $specs ) ) {
|
||||||
|
$specs = DefaultPaymentGateways::get_all();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Allows filtering of payment gateway suggestion specs
|
||||||
|
*
|
||||||
|
* @since 6.4.0
|
||||||
|
*
|
||||||
|
* @param array Gateway specs.
|
||||||
|
*/
|
||||||
|
$specs = apply_filters( 'woocommerce_admin_payment_gateway_suggestion_specs', $specs );
|
||||||
|
$results = EvaluateSuggestion::evaluate_specs( $specs );
|
||||||
|
return $results['suggestions'];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete the specs transient.
|
* Delete the specs transient.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace Automattic\WooCommerce\Admin\Features\PaymentGatewaySuggestions;
|
namespace Automattic\WooCommerce\Admin\Features\PaymentGatewaySuggestions;
|
||||||
|
|
||||||
use Automattic\WooCommerce\Admin\DataSourcePoller;
|
use Automattic\WooCommerce\Admin\RemoteSpecs\DataSourcePoller;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specs data source poller class for payment gateway suggestions.
|
* Specs data source poller class for payment gateway suggestions.
|
||||||
|
|
|
@ -126,6 +126,29 @@ abstract class DataSourcePoller {
|
||||||
return false !== $specs ? $specs : array();
|
return false !== $specs ? $specs : array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets specs from cache if it exists.
|
||||||
|
*
|
||||||
|
* @return array list of specs.
|
||||||
|
*/
|
||||||
|
public function get_cached_specs() {
|
||||||
|
$locale = get_user_locale();
|
||||||
|
$specs_group = get_transient( $this->args['transient_name'] ) ?? array();
|
||||||
|
$specs = isset( $specs_group[ $locale ] ) ? $specs_group[ $locale ] : null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Filter specs.
|
||||||
|
*
|
||||||
|
* @param array $specs List of specs.
|
||||||
|
* @param string $this->id Spec identifier.
|
||||||
|
*
|
||||||
|
* @since 8.8.0
|
||||||
|
*/
|
||||||
|
$specs = apply_filters( self::FILTER_NAME_SPECS, $specs, $this->id );
|
||||||
|
|
||||||
|
return false !== $specs ? $specs : array();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads the data sources for specs and persists those specs.
|
* Reads the data sources for specs and persists those specs.
|
||||||
*
|
*
|
||||||
|
|
|
@ -117,6 +117,69 @@ class WC_Admin_Tests_PaymentGatewaySuggestions_Init extends WC_Unit_Test_Case {
|
||||||
$this->assertEquals( $expected_suggestions[1]['id'], $suggestions[1]->id );
|
$this->assertEquals( $expected_suggestions[1]['id'], $suggestions[1]->id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that specs are read from cache when they exist.
|
||||||
|
*/
|
||||||
|
public function test_cached_or_default_suggestions_when_cache_exist() {
|
||||||
|
// Arrange.
|
||||||
|
$expected_suggestions = array(
|
||||||
|
array(
|
||||||
|
'id' => 'mock-gateway1',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'id' => 'mock-gateway2',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
set_transient(
|
||||||
|
'woocommerce_admin_' . PaymentGatewaySuggestionsDataSourcePoller::ID . '_specs',
|
||||||
|
array(
|
||||||
|
'en_US' => $expected_suggestions,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Act.
|
||||||
|
$suggestions = PaymentGatewaySuggestions::get_cached_or_default_suggestions();
|
||||||
|
|
||||||
|
// Assert.
|
||||||
|
$this->assertCount( count( $expected_suggestions ), $suggestions );
|
||||||
|
$this->assertEquals( $expected_suggestions[0]['id'], $suggestions[0]->id );
|
||||||
|
$this->assertEquals( $expected_suggestions[1]['id'], $suggestions[1]->id );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that specs are read from default when cache is empty.
|
||||||
|
*/
|
||||||
|
public function test_cached_or_default_suggestions_when_cache_empty() {
|
||||||
|
// Arrange.
|
||||||
|
PaymentGatewaySuggestionsDataSourcePoller::get_instance()->delete_specs_transient();
|
||||||
|
|
||||||
|
// Act.
|
||||||
|
$suggestions = PaymentGatewaySuggestions::get_cached_or_default_suggestions();
|
||||||
|
|
||||||
|
// Assert.
|
||||||
|
$default_suggestions = EvaluateSuggestion::evaluate_specs( DefaultPaymentGateways::get_all() )['suggestions'];
|
||||||
|
|
||||||
|
$this->assertEquals( $default_suggestions, $suggestions );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that default gateways are provided when remote sources don't exist.
|
||||||
|
*/
|
||||||
|
public function test_cached_or_default_suggestions_when_marketplace_suggestions_off() {
|
||||||
|
// Arrange.
|
||||||
|
update_option( 'woocommerce_show_marketplace_suggestions', 'no' );
|
||||||
|
PaymentGatewaySuggestionsDataSourcePoller::get_instance()->delete_specs_transient();
|
||||||
|
|
||||||
|
// Act.
|
||||||
|
$suggestions = PaymentGatewaySuggestions::get_cached_or_default_suggestions();
|
||||||
|
$default_suggestions = EvaluateSuggestion::evaluate_specs( DefaultPaymentGateways::get_all() )['suggestions'];
|
||||||
|
|
||||||
|
// Assert.
|
||||||
|
$this->assertEquals( $suggestions, $default_suggestions );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test that non-matched suggestions are not shown.
|
* Test that non-matched suggestions are not shown.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue