Skip to content

Commit dc5323b

Browse files
authored
feat(http): empty request values are converted to null (tempestphp#976)
1 parent 118eeb5 commit dc5323b

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

src/Tempest/Router/src/Mappers/PsrRequestToRequestMapper.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ public function map(mixed $from, mixed $to): array|object
4242
}
4343
}
4444

45+
$data = arr($data)
46+
->map(fn (mixed $value) => $value === '' ? null : $value)
47+
->toArray();
48+
4549
$headersAsString = array_map(
4650
fn (array $items) => implode(',', $items),
4751
$from->getHeaders(),

tests/Fixtures/Modules/Posts/PostRequest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@ final class PostRequest implements Request
1515

1616
public string $title;
1717

18-
public string $text;
18+
public ?string $text;
1919
}

tests/Integration/Mapper/PsrRequestToRequestMapperTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ public function test_map_with(): void
4646
$this->assertEquals('b', $request->text);
4747
$this->assertEquals(['x-test' => 'test'], $request->headers);
4848
}
49+
50+
public function test_empty_strings_are_converted_to_null(): void
51+
{
52+
$mapper = new PsrRequestToRequestMapper();
53+
54+
/** @var PostRequest $request */
55+
$request = $mapper->map(
56+
from: $this->http->makePsrRequest(
57+
uri: '/',
58+
body: ['title' => 'a', 'text' => ''],
59+
),
60+
to: PostRequest::class,
61+
);
62+
63+
$this->assertNull($request->text);
64+
}
4965

5066
public function test_map_with_with_missing_data(): void
5167
{

0 commit comments

Comments
 (0)