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' );
+	}
 }