From 32909f1b9825927d8e4c608744bc68af7df30b64 Mon Sep 17 00:00:00 2001 From: Timur Karimov Date: Mon, 18 Mar 2024 17:04:53 +0100 Subject: [PATCH] settings update fixes --- ...s-wc-rest-payments-settings-controller.php | 22 ++++++++++++++----- includes/class-wc-payments.php | 9 ++++++++ ...s-wc-rest-payments-settings-controller.php | 12 +++++----- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/includes/admin/class-wc-rest-payments-settings-controller.php b/includes/admin/class-wc-rest-payments-settings-controller.php index 94c34909162..f680f14ea32 100644 --- a/includes/admin/class-wc-rest-payments-settings-controller.php +++ b/includes/admin/class-wc-rest-payments-settings-controller.php @@ -606,11 +606,11 @@ function ( $payment_method ) use ( $available_payment_methods ) { ) ); - if ( function_exists( 'wc_admin_record_tracks_event' ) ) { - $active_payment_methods = $this->wcpay_gateway->get_upe_enabled_payment_method_ids(); - $disabled_payment_methods = array_diff( $active_payment_methods, $payment_method_ids_to_enable ); - $enabled_payment_methods = array_diff( $payment_method_ids_to_enable, $active_payment_methods ); + $active_payment_methods = $this->wcpay_gateway->get_upe_enabled_payment_method_ids(); + $disabled_payment_methods = array_diff( $active_payment_methods, $payment_method_ids_to_enable ); + $enabled_payment_methods = array_diff( $payment_method_ids_to_enable, $active_payment_methods ); + if ( function_exists( 'wc_admin_record_tracks_event' ) ) { foreach ( $disabled_payment_methods as $disabled_payment_method ) { wc_admin_record_tracks_event( Track_Events::PAYMENT_METHOD_DISABLED, @@ -630,9 +630,19 @@ function ( $payment_method ) use ( $available_payment_methods ) { } } - foreach ( $payment_method_ids_to_enable as $payment_method_id ) { + foreach ( $enabled_payment_methods as $payment_method_id ) { $gateway = WC_Payments::get_payment_gateway_by_id( $payment_method_id ); - $gateway->update_option( 'upe_enabled_payment_method_ids', $payment_method_ids_to_enable ); + $gateway->enable(); + } + + foreach ( $disabled_payment_methods as $payment_method_id ) { + $gateway = WC_Payments::get_payment_gateway_by_id( $payment_method_id ); + $gateway->disable(); + } + + // Keep the enabled payment method IDs list synchronized across gateway setting objects unless we remove this list with all dependencies. + foreach ( WC_Payments::get_payment_gateway_map() as $payment_gateway ) { + $payment_gateway->update_option( 'upe_enabled_payment_method_ids', $payment_method_ids_to_enable ); } if ( $payment_method_ids_to_enable ) { diff --git a/includes/class-wc-payments.php b/includes/class-wc-payments.php index 42d19928d3d..77e9f5afd72 100644 --- a/includes/class-wc-payments.php +++ b/includes/class-wc-payments.php @@ -1135,6 +1135,15 @@ public static function get_payment_method_map() { return self::$payment_method_map; } + /** + * Returns Payment Gateway map. + * + * @return array + */ + public static function get_payment_gateway_map() { + return self::$payment_gateway_map; + } + /** * Returns the WC_Payment_Gateway_WCPay instance * diff --git a/tests/unit/admin/test-class-wc-rest-payments-settings-controller.php b/tests/unit/admin/test-class-wc-rest-payments-settings-controller.php index 0f8714c6b6b..7acffe22944 100644 --- a/tests/unit/admin/test-class-wc-rest-payments-settings-controller.php +++ b/tests/unit/admin/test-class-wc-rest-payments-settings-controller.php @@ -350,15 +350,15 @@ public function test_update_settings_returns_error_on_non_bool_is_wcpay_enabled_ $this->assertEquals( 400, $response->get_status() ); } - public function test_update_settings_saves_enabled_payment_methods() { - $this->gateway->update_option( 'upe_enabled_payment_method_ids', [ Payment_Method::CARD ] ); + public function test_timur_testing() { + WC_Payments::get_gateway()->update_option( 'upe_enabled_payment_method_ids', [ Payment_Method::CARD ] ); - $request = new WP_REST_Request(); - $request->set_param( 'enabled_payment_method_ids', [ Payment_Method::CARD, Payment_Method::GIROPAY ] ); + $request = new WP_REST_Request(); + $request->set_param( 'enabled_payment_method_ids', [ Payment_Method::CARD, Payment_Method::GIROPAY ] ); - $this->controller->update_settings( $request ); + $this->controller->update_settings( $request ); - $this->assertEquals( [ Payment_Method::CARD, Payment_Method::GIROPAY ], $this->gateway->get_option( 'upe_enabled_payment_method_ids' ) ); + $this->assertEquals( [ Payment_Method::CARD, Payment_Method::GIROPAY ], WC_Payments::get_gateway()->get_option( 'upe_enabled_payment_method_ids' ) ); } public function test_update_settings_fails_if_user_cannot_manage_woocommerce() {