From b78ad758982a472cef8f273cf84e237b860bc6ad Mon Sep 17 00:00:00 2001 From: Narumon Nakkarit Date: Wed, 15 Jan 2025 00:37:21 +0700 Subject: [PATCH 1/2] Handle wp->request is empty for checkout page --- includes/class-omise-capabilities.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/includes/class-omise-capabilities.php b/includes/class-omise-capabilities.php index 4de958a7..86478b18 100644 --- a/includes/class-omise-capabilities.php +++ b/includes/class-omise-capabilities.php @@ -106,6 +106,18 @@ public static function isFromCheckoutPage() if (strpos($wp->request, $endpoint) === $len - strlen($endpoint)) { return true; } + } else { + $request_uri = $_SERVER['REQUEST_URI']; + $home_url = home_url(); + + $request_uri = strtok($request_uri, '?'); + $home_url_path = rtrim(parse_url($home_url, PHP_URL_PATH), '/'); + $path = trim(str_replace($home_url_path, '', $request_uri), '/'); + + $len = strlen($path); + if (strpos($path, $endpoint) === $len - strlen($endpoint)) { + return true; + } } if (isset($wp->query_vars['rest_route'])) { From b5fa77b8c87a530c4028f0e11e69d1326114a228 Mon Sep 17 00:00:00 2001 From: Narumon Nakkarit Date: Wed, 15 Jan 2025 03:49:49 +0700 Subject: [PATCH 2/2] Fix test --- .../class-omise-capabilities-test.php | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/tests/unit/includes/class-omise-capabilities-test.php b/tests/unit/includes/class-omise-capabilities-test.php index 0002f8b8..093c5cc0 100644 --- a/tests/unit/includes/class-omise-capabilities-test.php +++ b/tests/unit/includes/class-omise-capabilities-test.php @@ -114,14 +114,21 @@ public function truemoney_source_provider() * @dataProvider ajax_call_to_store_api_provider * @covers Omise_Capabilities */ - public function test_ajax_call_to_store_api_calls_omise_capability_api($request, $query_vars, $expected) + public function test_ajax_call_to_store_api_calls_omise_capability_api($request, $query_vars, $server_request_uri, $expected) { - if ($request || $query_vars) { + if ($request || $query_vars || $server_request_uri) { $wp = new stdClass(); $wp->request = $request; $wp->query_vars = $query_vars; $GLOBALS['wp'] = $wp; } + Brain\Monkey\Functions\expect('home_url') + ->andReturn('/'); + + $_SERVER['REQUEST_URI'] = '/'; + if ($server_request_uri) { + $_SERVER['REQUEST_URI'] = $server_request_uri; + } $capabilities = new Omise_Capabilities; $result = $capabilities::isFromCheckoutPage(); @@ -131,11 +138,13 @@ public function test_ajax_call_to_store_api_calls_omise_capability_api($request, public function ajax_call_to_store_api_provider() { return [ - [null, null, false], // empty to test empty wp - ['wp-json/wc/store/v1/batch', [], true], - ['wp-json/wc/store/v1/batch', ['rest_route' => '/wc/store/v1/batch'], true], - ['', ['rest_route' => '/wc/store/v1/batch'], true], - ['', '', false] + [null, null, null, false], // empty to test empty wp + ['wp-json/wc/store/v1/batch', [], null, true], + ['wp-json/wc/store/v1/batch', ['rest_route' => '/wc/store/v1/batch'], null, true], + ['', ['rest_route' => '/wc/store/v1/batch'], null, true], + ['', '', '/other/checkout', true], + ['', '', '/checkout/other', false], + ['', '', '/checkout?ewe=323', true], ]; } }