diff --git a/modules/ppcp-api-client/src/Entity/class-token.php b/modules/ppcp-api-client/src/Entity/class-token.php index 45e808804..8cb8e299f 100644 --- a/modules/ppcp-api-client/src/Entity/class-token.php +++ b/modules/ppcp-api-client/src/Entity/class-token.php @@ -104,7 +104,11 @@ class Token { * * @return bool Whether vaulting features are enabled or not. */ - public function vaulting_available() { + public function vaulting_available(): bool { + if ( ! isset( $this->json->scope ) ) { + return false; + } + if ( strpos( $this->json->scope, 'https://uri.paypal.com/services/vault/payment-tokens/readwrite' diff --git a/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php b/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php index 6963defc9..9560917ff 100644 --- a/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php +++ b/modules/ppcp-wc-gateway/src/Settings/class-settingslistener.php @@ -147,15 +147,11 @@ class SettingsListener { return; } - $redirect_url = admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=ppcp-gateway' ); - $token = $this->bearer->bearer(); if ( ! $token->vaulting_available() ) { $this->settings->set( 'vault_enabled', false ); $this->settings->persist(); - - wp_safe_redirect( $redirect_url, 302 ); - exit; + return; } /** diff --git a/tests/PHPUnit/WcGateway/Settings/SettingsListenerTest.php b/tests/PHPUnit/WcGateway/Settings/SettingsListenerTest.php new file mode 100644 index 000000000..ac4265c57 --- /dev/null +++ b/tests/PHPUnit/WcGateway/Settings/SettingsListenerTest.php @@ -0,0 +1,59 @@ + 'client_id', + ]; + when('sanitize_text_field')->justReturn('ppcp-gateway'); + when('wp_unslash')->justReturn('ppcp-gateway'); + when('current_user_can')->justReturn(true); + when('wp_verify_nonce')->justReturn(true); + + $settings->shouldReceive('has') + ->with('client_id') + ->andReturn('client_id'); + $settings->shouldReceive('get') + ->with('client_id') + ->andReturn('client_id'); + $settings->shouldReceive('has') + ->with('client_secret') + ->andReturn('client_secret'); + $settings->shouldReceive('get') + ->with('client_secret') + ->andReturn('client_secret'); + + // run + $testee->listen(); + + // assert + $this->assertTrue(true); + } +}