diff --git a/src/shortcodes/product/class-page.php b/src/shortcodes/product/class-page.php index 270081b..9c1c7dd 100644 --- a/src/shortcodes/product/class-page.php +++ b/src/shortcodes/product/class-page.php @@ -44,6 +44,11 @@ public static function show( $container, $atts, $content, $tag ) { try { $product = $container['api.product_api']->fetch( $filtered_atts['product_id'] )['product']; + } catch ( \ColorMeShop\Swagger\ApiException $e ) { + if ( $container['WP_DEBUG_LOG'] ) { + error_log( '存在しない商品IDが指定された可能性があります。' . $e ); + } + return ''; } catch ( \RuntimeException $e ) { if ( $container['WP_DEBUG_LOG'] ) { error_log( $e ); diff --git a/tests/src/shortcodes/product/class-page-test.php b/tests/src/shortcodes/product/class-page-test.php index 9ad3568..d603be6 100644 --- a/tests/src/shortcodes/product/class-page-test.php +++ b/tests/src/shortcodes/product/class-page-test.php @@ -2,6 +2,30 @@ namespace ColorMeShop\Shortcodes\Product; class Page_Test extends \WP_UnitTestCase { + + /** @var \Pimple\Container */ + private $container; + + /** @var string */ + private $error_log; + + /** @var string */ + private $original_error_log; + + public function setUp() { + parent::setUp(); + + $this->container = _get_container(); + // ログ出力先 + $this->error_log = tempnam( sys_get_temp_dir(), 'TEST' ); + $this->original_error_log = ini_set( 'error_log', $this->error_log ); + } + + public function tearDown() { + parent::tearDown(); + ini_set( 'error_log', $this->original_error_log ); + } + /** * @test */ @@ -25,4 +49,30 @@ public function show_テンプレート名が不正な場合は空文字を返 ) ); } + + /** + * @test + */ + public function show_存在しない商品IDが指定された場合、デバッグが有効であればエラーメッセージを出力し、空文字を返す() { + $this->container['WP_DEBUG_LOG'] = function ( $c ) { + return true; + }; + + $pageShow = Page::show( + $this->container, + [ + 'template' => 'default', + 'product_id' => '00000000', + ], + null, + null + ); + + $this->assertSame( + '', + $pageShow + ); + + $this->assertStringContainsString( '存在しない商品IDが指定された可能性があります。', file_get_contents( $this->error_log ) ); + } }