From 4727b267094584907ccc21d70dad1c1377a43607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20H=C3=BCbner?= Date: Tue, 27 Jan 2026 19:10:41 +0100 Subject: [PATCH 1/2] Handle array query parameters in list converters PHP parses query strings like ?param[]=a¶m[]=b as arrays. RequestToListConverter and ArrayToListConverter now join array values with comma before adding to RequestParameterList. Co-Authored-By: Claude Opus 4.5 --- src/RequestParameterList/ArrayToListConverter.php | 6 +++++- src/RequestParameterList/RequestToListConverter.php | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/RequestParameterList/ArrayToListConverter.php b/src/RequestParameterList/ArrayToListConverter.php index 9d05229..f7dfcbe 100644 --- a/src/RequestParameterList/ArrayToListConverter.php +++ b/src/RequestParameterList/ArrayToListConverter.php @@ -14,7 +14,11 @@ public static function convert(array $array): RequestParameterList $requestParameterList = new RequestParameterList(); foreach ($array as $key => $value) { - $requestParameterList->add($key, $value); + if (is_array($value)) { + $value = implode(',', $value); + } + + $requestParameterList->add($key, (string) $value); } return $requestParameterList; diff --git a/src/RequestParameterList/RequestToListConverter.php b/src/RequestParameterList/RequestToListConverter.php index 3dd7046..e1ea5f1 100644 --- a/src/RequestParameterList/RequestToListConverter.php +++ b/src/RequestParameterList/RequestToListConverter.php @@ -16,7 +16,11 @@ public static function convert(Request $request): RequestParameterList $requestParameterList = new RequestParameterList(); foreach ($request->query->all() as $key => $value) { - $requestParameterList->add($key, $value); + if (is_array($value)) { + $value = implode(',', $value); + } + + $requestParameterList->add($key, (string) $value); } return $requestParameterList; From 5370e5bce062987189246cd42c7c12084139cd3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Malte=20H=C3=BCbner?= Date: Tue, 27 Jan 2026 20:50:03 +0100 Subject: [PATCH 2/2] Adapt tests to verify array and non-string parameter conversion Replace TypeError expectations with assertions that verify correct string conversion of arrays, integers, floats, and booleans in list converters. Co-Authored-By: Claude Opus 4.5 --- .../ArrayToListConverterTest.php | 35 ++++++++++++++++--- .../QueryStringToListConverterTest.php | 7 ++-- .../RequestToListConverterTest.php | 16 ++++----- 3 files changed, 43 insertions(+), 15 deletions(-) diff --git a/tests/RequestParameterList/ArrayToListConverterTest.php b/tests/RequestParameterList/ArrayToListConverterTest.php index 6c82c03..9cbe2ba 100644 --- a/tests/RequestParameterList/ArrayToListConverterTest.php +++ b/tests/RequestParameterList/ArrayToListConverterTest.php @@ -29,12 +29,39 @@ public function testConvertSimpleArray(): void $this->assertSame('6', $result->get('month')); } - public function testConvertNonStringValueThrowsTypeError(): void + public function testConvertIntegerValueToString(): void { - $this->expectException(\TypeError::class); - - ArrayToListConverter::convert([ + $result = ArrayToListConverter::convert([ 'size' => 25, ]); + + $this->assertSame('25', $result->get('size')); + } + + public function testConvertArrayValueToCommaSeparatedString(): void + { + $result = ArrayToListConverter::convert([ + 'tags' => ['foo', 'bar', 'baz'], + ]); + + $this->assertSame('foo,bar,baz', $result->get('tags')); + } + + public function testConvertFloatValueToString(): void + { + $result = ArrayToListConverter::convert([ + 'latitude' => 52.52, + ]); + + $this->assertSame('52.52', $result->get('latitude')); + } + + public function testConvertBooleanValueToString(): void + { + $result = ArrayToListConverter::convert([ + 'enabled' => true, + ]); + + $this->assertSame('1', $result->get('enabled')); } } diff --git a/tests/RequestParameterList/QueryStringToListConverterTest.php b/tests/RequestParameterList/QueryStringToListConverterTest.php index 61de54a..f142739 100644 --- a/tests/RequestParameterList/QueryStringToListConverterTest.php +++ b/tests/RequestParameterList/QueryStringToListConverterTest.php @@ -48,11 +48,12 @@ public function testConvertQueryStringWithUrlEncodedValues(): void $this->assertSame('München', $result->get('city')); } - public function testConvertQueryStringWithArrayParametersThrowsTypeError(): void + public function testConvertQueryStringWithArrayParameters(): void { - $this->expectException(\TypeError::class); + $result = QueryStringToListConverter::convert('tags[]=foo&tags[]=bar'); - QueryStringToListConverter::convert('tags[]=foo&tags[]=bar'); + $this->assertTrue($result->has('tags')); + $this->assertSame('foo,bar', $result->get('tags')); } public function testConvertQueryStringWithMultipleParameters(): void diff --git a/tests/RequestParameterList/RequestToListConverterTest.php b/tests/RequestParameterList/RequestToListConverterTest.php index 285ac09..255a5fe 100644 --- a/tests/RequestParameterList/RequestToListConverterTest.php +++ b/tests/RequestParameterList/RequestToListConverterTest.php @@ -29,22 +29,22 @@ public function testConvertEmptyRequest(): void $this->assertSame([], $result->getList()); } - public function testConvertRequestWithArrayQueryParameterThrowsTypeError(): void + public function testConvertRequestWithArrayQueryParameter(): void { - $this->expectException(\TypeError::class); - $request = Request::create('/test', 'GET', ['tags' => ['foo', 'bar']]); - RequestToListConverter::convert($request); + $result = RequestToListConverter::convert($request); + + $this->assertSame('foo,bar', $result->get('tags')); } - public function testConvertRequestWithIntegerQueryParameterThrowsTypeError(): void + public function testConvertRequestWithIntegerQueryParameter(): void { - $this->expectException(\TypeError::class); - $request = Request::create('/test', 'GET', ['size' => 25]); - RequestToListConverter::convert($request); + $result = RequestToListConverter::convert($request); + + $this->assertSame('25', $result->get('size')); } public function testConvertRequestWithMultipleParameters(): void