Commit d664ee8287 for woocommerce
commit d664ee82879b8ef5fd6c3b714276b2f743110081
Author: Marin Atanasov <8436925+tyxla@users.noreply.github.com>
Date: Thu Dec 11 11:53:54 2025 +0200
Mini Cart: Add compatibility with Coming Soon (#62388)
* Mini Cart: Add compatibility with Coming Soon
* Add some tests
* Add changefile(s) from automation for the following project(s): woocommerce
---------
Co-authored-by: github-actions <github-actions@github.com>
diff --git a/plugins/woocommerce/changelog/62388-update-mini-cart-coming-soon-compat b/plugins/woocommerce/changelog/62388-update-mini-cart-coming-soon-compat
new file mode 100644
index 0000000000..44606eeccd
--- /dev/null
+++ b/plugins/woocommerce/changelog/62388-update-mini-cart-coming-soon-compat
@@ -0,0 +1,4 @@
+Significance: patch
+Type: fix
+Comment: Mini Cart: Add compatibility with Coming Soon
+
diff --git a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
index afff696358..bfc98ba695 100644
--- a/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
+++ b/plugins/woocommerce/src/Blocks/BlockTypes/MiniCart.php
@@ -15,6 +15,7 @@ use Automattic\WooCommerce\Blocks\Utils\MiniCartUtils;
use Automattic\WooCommerce\Blocks\Utils\BlockHooksTrait;
use Automattic\WooCommerce\Admin\Features\Features;
use Automattic\WooCommerce\Blocks\Utils\BlocksSharedState;
+use Automattic\WooCommerce\Internal\ComingSoon\ComingSoonHelper;
use Automattic\Block_Delimiter;
/**
@@ -471,6 +472,14 @@ class MiniCart extends AbstractBlock {
* @return string Rendered block type output.
*/
protected function render( $attributes, $content, $block ) {
+ /**
+ * Do not render for logged-out users if the Coming Soon mode is enabled for store pages only.
+ */
+ $coming_soon_helper = wc_get_container()->get( ComingSoonHelper::class );
+ if ( ! is_user_logged_in() && ! WC()->is_rest_api_request() && $coming_soon_helper->is_store_coming_soon() ) {
+ return '';
+ }
+
/**
* In the cart and checkout pages, the block is either rendered hidden or removed.
* It is not interactive, so it can fall back to the existing implementation.
diff --git a/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/MiniCart.php b/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/MiniCart.php
index a11b5149f9..58d6e178cf 100644
--- a/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/MiniCart.php
+++ b/plugins/woocommerce/tests/php/src/Blocks/BlockTypes/MiniCart.php
@@ -308,4 +308,98 @@ class MiniCart extends \WP_UnitTestCase {
)
);
}
+
+ /**
+ * Test that mini-cart does not render for logged-out users when coming soon mode is enabled for store pages only.
+ *
+ * @return void
+ */
+ public function test_mini_cart_does_not_render_for_logged_out_users_when_store_coming_soon() {
+ // Set up coming soon mode for store pages only.
+ update_option( 'woocommerce_coming_soon', 'yes' );
+ update_option( 'woocommerce_store_pages_only', 'yes' );
+
+ // Ensure user is logged out.
+ wp_set_current_user( 0 );
+
+ $block = parse_blocks( '<!-- wp:woocommerce/mini-cart /-->' );
+ $output = render_block( $block[0] );
+
+ // Mini-cart should not render (empty output).
+ $this->assertEmpty( $output, 'Mini-cart should not render for logged-out users when store is in coming soon mode.' );
+
+ // Clean up.
+ update_option( 'woocommerce_coming_soon', 'no' );
+ update_option( 'woocommerce_store_pages_only', 'no' );
+ }
+
+ /**
+ * Test that mini-cart renders for logged-in users when coming soon mode is enabled for store pages only.
+ *
+ * @return void
+ */
+ public function test_mini_cart_renders_for_logged_in_users_when_store_coming_soon() {
+ // Set up coming soon mode for store pages only.
+ update_option( 'woocommerce_coming_soon', 'yes' );
+ update_option( 'woocommerce_store_pages_only', 'yes' );
+
+ // Create and log in a user.
+ $user_id = $this->factory->user->create( array( 'role' => 'customer' ) );
+ wp_set_current_user( $user_id );
+
+ $block = parse_blocks( '<!-- wp:woocommerce/mini-cart /-->' );
+ $output = render_block( $block[0] );
+
+ // Mini-cart should render (non-empty output).
+ $this->assertNotEmpty( $output, 'Mini-cart should render for logged-in users even when store is in coming soon mode.' );
+
+ // Clean up.
+ wp_set_current_user( 0 );
+ update_option( 'woocommerce_coming_soon', 'no' );
+ update_option( 'woocommerce_store_pages_only', 'no' );
+ }
+
+ /**
+ * Test that mini-cart renders for logged-out users when coming soon mode is disabled.
+ *
+ * @return void
+ */
+ public function test_mini_cart_renders_for_logged_out_users_when_coming_soon_disabled() {
+ // Ensure coming soon mode is disabled.
+ update_option( 'woocommerce_coming_soon', 'no' );
+ update_option( 'woocommerce_store_pages_only', 'no' );
+
+ // Ensure user is logged out.
+ wp_set_current_user( 0 );
+
+ $block = parse_blocks( '<!-- wp:woocommerce/mini-cart /-->' );
+ $output = render_block( $block[0] );
+
+ // Mini-cart should render (non-empty output).
+ $this->assertNotEmpty( $output, 'Mini-cart should render for logged-out users when coming soon mode is disabled.' );
+ }
+
+ /**
+ * Test that mini-cart renders for logged-out users when site-wide coming soon mode is enabled (not store pages only).
+ *
+ * @return void
+ */
+ public function test_mini_cart_renders_when_site_wide_coming_soon_not_store_only() {
+ // Set up site-wide coming soon mode (not store pages only).
+ update_option( 'woocommerce_coming_soon', 'yes' );
+ update_option( 'woocommerce_store_pages_only', 'no' );
+
+ // Ensure user is logged out.
+ wp_set_current_user( 0 );
+
+ $block = parse_blocks( '<!-- wp:woocommerce/mini-cart /-->' );
+ $output = render_block( $block[0] );
+
+ // Mini-cart should render (non-empty output) because the logic only checks for store pages coming soon.
+ $this->assertNotEmpty( $output, 'Mini-cart should render when site-wide coming soon is enabled but not store pages only.' );
+
+ // Clean up.
+ update_option( 'woocommerce_coming_soon', 'no' );
+ update_option( 'woocommerce_store_pages_only', 'no' );
+ }
}