From 1206762bb0dcb0cb14050b058f3baa275c361c62 Mon Sep 17 00:00:00 2001 From: David Stone Date: Tue, 26 May 2026 23:55:34 -0600 Subject: [PATCH] wip: invalidate skipped cart initialization --- inc/checkout/class-cart.php | 10 +++++++++- tests/WP_Ultimo/Checkout/Checkout_Test.php | 16 ++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/inc/checkout/class-cart.php b/inc/checkout/class-cart.php index 5acd7eed..91ca2ce9 100644 --- a/inc/checkout/class-cart.php +++ b/inc/checkout/class-cart.php @@ -351,7 +351,15 @@ public function __construct($args) { */ $this->attributes = (object) $args; - if (apply_filters('wu_cart_skip_initialization', false, $args, $this)) { + $skip_initialization = apply_filters('wu_cart_skip_initialization', false, $args, $this); + + if ($skip_initialization) { + if ($skip_initialization instanceof \WP_Error) { + $this->errors->merge_from($skip_initialization); + } elseif ( ! $this->errors->has_errors()) { + $this->errors->add('cart_initialization_skipped', __('This checkout is not available.', 'ultimate-multisite')); + } + return; } diff --git a/tests/WP_Ultimo/Checkout/Checkout_Test.php b/tests/WP_Ultimo/Checkout/Checkout_Test.php index ee8b2fcd..155c9996 100644 --- a/tests/WP_Ultimo/Checkout/Checkout_Test.php +++ b/tests/WP_Ultimo/Checkout/Checkout_Test.php @@ -90,6 +90,7 @@ protected function tearDown(): void { remove_filter('wu_checkout_skip_user_exists_check', [$this, 'skip_checkout']); remove_filter('wu_checkout_skip_inline_login', [$this, 'skip_checkout']); remove_filter('wu_cart_skip_initialization', [$this, 'set_cart_error']); + remove_filter('wu_cart_skip_initialization', '__return_true'); parent::tearDown(); } @@ -5484,6 +5485,21 @@ public function test_cart_constructor_sets_error_when_skip_filter_responds(): vo $this->assertEquals('checkout_disabled', $cart->errors->get_error_code()); } + /** + * Test that Cart constructor marks skipped initialization as invalid. + */ + public function test_cart_constructor_sets_default_error_when_skip_filter_returns_true(): void { + + add_filter('wu_cart_skip_initialization', '__return_true'); + + $cart = new Cart([ + 'products' => [], + ]); + + $this->assertFalse($cart->is_valid()); + $this->assertEquals('cart_initialization_skipped', $cart->errors->get_error_code()); + } + // ------------------------------------------------------------------------- // Teardown // -------------------------------------------------------------------------