From 2cab1cd369be2b7f5cfb7945617ba8160bc828bc Mon Sep 17 00:00:00 2001 From: Eason Su Date: Wed, 12 Jul 2023 17:58:05 +0800 Subject: [PATCH] Provide a more detailed reason when unable to verify a site token via `SiteVerification::insert`. --- src/API/Google/SiteVerification.php | 14 +++++++++---- .../Unit/API/Google/SiteVerificationTest.php | 21 ++++++++----------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/API/Google/SiteVerification.php b/src/API/Google/SiteVerification.php index da44ecfd44..96fc978bb5 100644 --- a/src/API/Google/SiteVerification.php +++ b/src/API/Google/SiteVerification.php @@ -139,7 +139,7 @@ protected function get_token( string $identifier ): string { * * @param string $identifier The URL of the site to verify (including protocol). * - * @throws Exception When unable to verify token. + * @throws ExceptionWithResponseData When unable to verify token. */ protected function insert( string $identifier ) { /** @var SiteVerificationService $service */ @@ -160,9 +160,15 @@ protected function insert( string $identifier ) { $service->webResource->insert( self::VERIFICATION_METHOD, $post_body ); } catch ( GoogleServiceException $e ) { do_action( 'woocommerce_gla_sv_client_exception', $e, __METHOD__ ); - throw new Exception( - __( 'Unable to insert site verification.', 'google-listings-and-ads' ), - $e->getCode() + + $errors = $this->get_exception_errors( $e ); + + throw new ExceptionWithResponseData( + /* translators: %s Error message */ + sprintf( __( 'Unable to insert site verification: %s', 'google-listings-and-ads' ), reset( $errors ) ), + $e->getCode(), + null, + [ 'errors' => $errors ] ); } } diff --git a/tests/Unit/API/Google/SiteVerificationTest.php b/tests/Unit/API/Google/SiteVerificationTest.php index 0a2fe51f12..1e1af42502 100644 --- a/tests/Unit/API/Google/SiteVerificationTest.php +++ b/tests/Unit/API/Google/SiteVerificationTest.php @@ -91,18 +91,15 @@ public function test_verify_site_insert_exception() { $this->verification_service->webResource ->method( 'insert' ) - ->willThrowException( new GoogleServiceException( 'error', 400 ) ); - - try { - $this->verification->verify_site( $this->site_url ); - } catch ( Exception $e ) { - $this->assertEquals( 1, did_action( 'woocommerce_gla_site_verify_failure' ) ); - $this->assertEquals( 400, $e->getCode() ); - $this->assertEquals( - 'Unable to insert site verification.', - $e->getMessage() - ); - } + ->willThrowException( $this->get_google_service_exception( 400, 'No necessary verification token.' ) ); + + $this->expectException( ExceptionWithResponseData::class ); + $this->expectExceptionCode( 400 ); + $this->expectExceptionMessage( 'Unable to insert site verification: No necessary verification token.' ); + + $this->verification->verify_site( $this->site_url ); + + $this->assertEquals( 1, did_action( 'woocommerce_gla_site_verify_failure' ) ); } public function test_verify_site() {