Skip to content

Commit

Permalink
Provide a more detailed reason when unable to retrieve a site meta to…
Browse files Browse the repository at this point in the history
…ken via `SiteVerification::get_token`.
  • Loading branch information
eason9487 committed Jul 12, 2023
1 parent 38b94ec commit df29aea
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 15 deletions.
16 changes: 12 additions & 4 deletions src/API/Google/SiteVerification.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

namespace Automattic\WooCommerce\GoogleListingsAndAds\API\Google;

use Automattic\WooCommerce\GoogleListingsAndAds\Exception\ExceptionWithResponseData;
use Automattic\WooCommerce\GoogleListingsAndAds\Internal\ContainerAwareTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\Internal\Interfaces\ContainerAwareInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsAwareInterface;
Expand All @@ -27,6 +28,7 @@
class SiteVerification implements ContainerAwareInterface, OptionsAwareInterface {

use ContainerAwareTrait;
use ExceptionTrait;
use OptionsAwareTrait;
use PluginHelper;

Expand Down Expand Up @@ -94,7 +96,7 @@ public function verify_site( string $site_url ) {
* @param string $identifier The URL of the site to verify (including protocol).
*
* @return string The meta tag to be used for verification.
* @throws Exception When unable to retrieve meta token.
* @throws ExceptionWithResponseData When unable to retrieve meta token.
*/
protected function get_token( string $identifier ): string {
/** @var SiteVerificationService $service */
Expand All @@ -116,9 +118,15 @@ protected function get_token( string $identifier ): string {
$response = $service->webResource->getToken( $post_body );
} catch ( GoogleServiceException $e ) {
do_action( 'woocommerce_gla_sv_client_exception', $e, __METHOD__ );
throw new Exception(
__( 'Unable to retrieve site verification token.', 'google-listings-and-ads' ),
$e->getCode()

$errors = $this->get_exception_errors( $e );

throw new ExceptionWithResponseData(
/* translators: %s Error message */
sprintf( __( 'Unable to retrieve site verification token: %s', 'google-listings-and-ads' ), reset( $errors ) ),
$e->getCode(),
null,
[ 'errors' => $errors ]
);
}

Expand Down
23 changes: 12 additions & 11 deletions tests/Unit/API/Google/SiteVerificationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@
namespace Automattic\WooCommerce\GoogleListingsAndAds\Tests\Unit\API\Google;

use Automattic\WooCommerce\GoogleListingsAndAds\API\Google\SiteVerification;
use Automattic\WooCommerce\GoogleListingsAndAds\Exception\ExceptionWithResponseData;
use Automattic\WooCommerce\GoogleListingsAndAds\Options\OptionsInterface;
use Automattic\WooCommerce\GoogleListingsAndAds\Tests\Framework\UnitTest;
use Automattic\WooCommerce\GoogleListingsAndAds\Tests\Tools\HelperTrait\MerchantTrait;
use Automattic\WooCommerce\GoogleListingsAndAds\Vendor\League\Container\Container;
use Automattic\WooCommerce\GoogleListingsAndAds\Vendor\Google\Service\Exception as GoogleServiceException;
use Automattic\WooCommerce\GoogleListingsAndAds\Vendor\Google\Service\SiteVerification as SiteVerificationService;
Expand All @@ -23,6 +25,8 @@
*/
class SiteVerificationTest extends UnitTest {

use MerchantTrait;

/** @var MockObject|OptionsInterface $options */
protected $options;

Expand Down Expand Up @@ -71,18 +75,15 @@ public function test_verify_site_invalid_url() {
public function test_verify_site_token_exception() {
$this->verification_service->webResource
->method( 'getToken' )
->willThrowException( new GoogleServiceException( 'error', 400 ) );
->willThrowException( $this->get_google_service_exception( 400, 'No available tokens' ) );

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 retrieve site verification token.',
$e->getMessage()
);
}
$this->expectException( ExceptionWithResponseData::class );
$this->expectExceptionCode( 400 );
$this->expectExceptionMessage( 'Unable to retrieve site verification token: No available tokens' );

$this->verification->verify_site( $this->site_url );

$this->assertEquals( 1, did_action( 'woocommerce_gla_site_verify_failure' ) );
}

public function test_verify_site_insert_exception() {
Expand Down

0 comments on commit df29aea

Please sign in to comment.