From f1bf398babd9a8500778252d496cc2e6a5cc7cfd Mon Sep 17 00:00:00 2001 From: neznaika0 Date: Sun, 3 Nov 2024 21:16:45 +0300 Subject: [PATCH] fix: Allows get by numeric key --- system/HTTP/RequestTrait.php | 4 ++-- tests/system/HTTP/RequestTest.php | 15 +++++++++++++++ tests/system/Test/FeatureTestTraitTest.php | 20 ++++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/system/HTTP/RequestTrait.php b/system/HTTP/RequestTrait.php index 43a4f23a0e87..51de3ea5c0fc 100644 --- a/system/HTTP/RequestTrait.php +++ b/system/HTTP/RequestTrait.php @@ -249,7 +249,7 @@ public function setGlobal(string $name, $value) * * @param string $name Supergrlobal name (lowercase) * @phpstan-param 'get'|'post'|'request'|'cookie'|'server' $name - * @param array|string|null $index + * @param array|int|string|null $index * @param int|null $filter Filter constant * @param array|int|null $flags Options * @@ -290,7 +290,7 @@ public function fetchGlobal(string $name, $index = null, ?int $filter = null, $f } // Does the index contain array notation? - if (($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1) { + if (is_string($index) && ($count = preg_match_all('/(?:^[^\[]+)|\[[^]]*\]/', $index, $matches)) > 1) { $value = $this->globals[$name]; for ($i = 0; $i < $count; $i++) { diff --git a/tests/system/HTTP/RequestTest.php b/tests/system/HTTP/RequestTest.php index e2073268d794..2205f29dfe19 100644 --- a/tests/system/HTTP/RequestTest.php +++ b/tests/system/HTTP/RequestTest.php @@ -196,6 +196,21 @@ public function testFetchGlobalReturnsArrayValues(): void $this->assertCount(2, $result['ANNOUNCEMENTS']); } + public function testFetchGlobalReturnsWithListValues(): void + { + $post = [ + ['foo' => 0], + ['bar' => 1], + ['baz' => 2], + ]; + + $this->request->setGlobal('post', $post); + $result = $this->request->fetchGlobal('post'); + + $this->assertIsList($result); + $this->assertSame($post, $result); + } + public function testFetchGlobalWithArrayTop(): void { $post = [ diff --git a/tests/system/Test/FeatureTestTraitTest.php b/tests/system/Test/FeatureTestTraitTest.php index be3d590bd15a..9a5cadd1fb9d 100644 --- a/tests/system/Test/FeatureTestTraitTest.php +++ b/tests/system/Test/FeatureTestTraitTest.php @@ -581,6 +581,26 @@ public function testCallWithJsonRequest(): void $response->assertJSONExact($data); } + public function testCallWithListJsonRequest(): void + { + $this->withRoutes([ + [ + 'POST', + 'home', + '\Tests\Support\Controllers\Popcorn::echoJson', + ], + ]); + $data = [ + ['one' => 1, 'two' => 2], + ['one' => 3, 'two' => 4], + ]; + $response = $this->withBodyFormat('json') + ->call(Method::POST, 'home', $data); + + $response->assertOK(); + $response->assertJSONExact($data); + } + public function testSetupRequestBodyWithParams(): void { $request = $this->setupRequest('post', 'home');