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; 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