From 75a34da3b83ab39f0f3b76ba6a09c721a6efc1fa Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:03:48 +0100 Subject: [PATCH 01/11] Update ArrayToObjectMapper.php --- src/Tempest/Mapper/src/Mappers/ArrayToObjectMapper.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Tempest/Mapper/src/Mappers/ArrayToObjectMapper.php b/src/Tempest/Mapper/src/Mappers/ArrayToObjectMapper.php index dfce572eb..78f59d84f 100644 --- a/src/Tempest/Mapper/src/Mappers/ArrayToObjectMapper.php +++ b/src/Tempest/Mapper/src/Mappers/ArrayToObjectMapper.php @@ -160,9 +160,9 @@ private function resolveValueFromArray( $caster = $this->casterFactory->forProperty($property); - foreach ($data as $item) { + foreach ($data as $key => $item) { if (! is_array($item)) { - $values[] = $caster?->cast($item) ?? $item; + $values[$key] = $caster?->cast($item) ?? $item; continue; } From 4e6f43dd59aac7316f6494dbbc73c7d97b2c3588 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Fri, 8 Nov 2024 17:14:54 +0100 Subject: [PATCH 02/11] Update PsrRequestToRequestMapper.php make Upload files available, to easily resolve properties. --- src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php b/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php index 7e8e40981..e0c97aef1 100644 --- a/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php +++ b/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php @@ -53,7 +53,7 @@ public function map(mixed $from, mixed $to): array|object 'path' => $from->getUri()->getPath(), 'query' => $query, 'files' => $uploads, - ...$data, + ...$data + $uploads, ])->to($requestClass); $validator = new Validator(); From ae5e2efd0c90b3415e6d3b0622fb79d43ac971dc Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Fri, 8 Nov 2024 19:22:26 +0100 Subject: [PATCH 03/11] Update PsrRequestToRequestMapper.php --- src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php b/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php index e0c97aef1..c66ae5399 100644 --- a/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php +++ b/src/Tempest/Http/src/Mappers/PsrRequestToRequestMapper.php @@ -53,7 +53,8 @@ public function map(mixed $from, mixed $to): array|object 'path' => $from->getUri()->getPath(), 'query' => $query, 'files' => $uploads, - ...$data + $uploads, + ...$data, + ...$uploads, ])->to($requestClass); $validator = new Validator(); From eece0d1501fa04c04c40b527e88ad8b405631445 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:48:54 +0100 Subject: [PATCH 04/11] tests --- .../Mapper/PsrRequestToRequestMapperTest.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php index 163a2d2b8..f2e620e0e 100644 --- a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php +++ b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php @@ -11,7 +11,9 @@ use Tempest\Http\Upload; use Tempest\Mapper\Exceptions\MissingValuesException; use Tests\Tempest\Fixtures\Modules\Posts\PostRequest; +use Tests\Tempest\Fixtures\Modules\Books\Requests\CreateBookRequest; use Tests\Tempest\Integration\FrameworkIntegrationTestCase; +use function Tempest\Support\arr; /** * @internal @@ -113,4 +115,33 @@ public function test_files(): void $this->assertSame('hello', $upload->getClientFilename()); $this->assertSame('application/octet-stream', $upload->getClientMediaType()); } + + public function test_map_upload_file_into_request_property(): void + { + $currentPath = __DIR__ . '/Fixtures/upload.txt'; + + $mapper = new PsrRequestToRequestMapper(); + + $psrRequest = $this->http->makePsrRequest( + uri: '/books', + body: ['title' => 'Timeline Taxi'], + files: ['cover' => new UploadedFile( + streamOrFile: $currentPath, + size: null, + errorStatus: UPLOAD_ERR_OK, + )] + ); + + $request = $mapper->map( + from: $psrRequest, + to: CreateBookRequest::class + ); + + + $this->assertInstanceOf(CreateBookRequest::class, $request); + $this->assertInstanceOf(Upload::class, $request->cover); + + $this->assertTrue(arr($request->getFiles())->isAssoc()); + $this->assertSame('cover', array_key_first($request->getFiles())); + } } From dc13ae1bf104777d94e668cbe1b6708448384df3 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Fri, 8 Nov 2024 20:54:12 +0100 Subject: [PATCH 05/11] tests --- tests/Fixtures/Modules/Books/Requests/CreateBookRequest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/Fixtures/Modules/Books/Requests/CreateBookRequest.php b/tests/Fixtures/Modules/Books/Requests/CreateBookRequest.php index 245cb9d9d..48db7fc94 100644 --- a/tests/Fixtures/Modules/Books/Requests/CreateBookRequest.php +++ b/tests/Fixtures/Modules/Books/Requests/CreateBookRequest.php @@ -6,10 +6,13 @@ use Tempest\Http\IsRequest; use Tempest\Http\Request; +use Tempest\Http\Upload; final class CreateBookRequest implements Request { use IsRequest; public string $title; + + public Upload $cover; } From ac1190f4450e6e7fbdb76529d7ff68a7582398a6 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Sat, 9 Nov 2024 03:11:06 +0100 Subject: [PATCH 06/11] fix ci --- tests/Integration/Mapper/PsrRequestToRequestMapperTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php index f2e620e0e..6ca8b30a9 100644 --- a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php +++ b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php @@ -10,8 +10,8 @@ use Tempest\Http\Request; use Tempest\Http\Upload; use Tempest\Mapper\Exceptions\MissingValuesException; -use Tests\Tempest\Fixtures\Modules\Posts\PostRequest; use Tests\Tempest\Fixtures\Modules\Books\Requests\CreateBookRequest; +use Tests\Tempest\Fixtures\Modules\Posts\PostRequest; use Tests\Tempest\Integration\FrameworkIntegrationTestCase; use function Tempest\Support\arr; From e934982bb3244713e98b58a1daf559dfb45753c4 Mon Sep 17 00:00:00 2001 From: yassinebel Date: Sat, 9 Nov 2024 03:30:56 +0100 Subject: [PATCH 07/11] fix --- tests/Integration/Mapper/PsrRequestToRequestMapperTest.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php index 6ca8b30a9..ad8d3592b 100644 --- a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php +++ b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php @@ -4,6 +4,7 @@ namespace Tests\Tempest\Integration\Mapper; +use function Tempest\Support\arr; use Laminas\Diactoros\UploadedFile; use Tempest\Http\GenericRequest; use Tempest\Http\Mappers\PsrRequestToRequestMapper; @@ -13,7 +14,6 @@ use Tests\Tempest\Fixtures\Modules\Books\Requests\CreateBookRequest; use Tests\Tempest\Fixtures\Modules\Posts\PostRequest; use Tests\Tempest\Integration\FrameworkIntegrationTestCase; -use function Tempest\Support\arr; /** * @internal @@ -137,11 +137,9 @@ public function test_map_upload_file_into_request_property(): void to: CreateBookRequest::class ); - $this->assertInstanceOf(CreateBookRequest::class, $request); $this->assertInstanceOf(Upload::class, $request->cover); - $this->assertTrue(arr($request->getFiles())->isAssoc()); - $this->assertSame('cover', array_key_first($request->getFiles())); + $this->assertEquals('cover', array_key_first($request->getFiles())); } } From 50ba6b2d139dc00ef265fbf7f1fbea5ba183eb92 Mon Sep 17 00:00:00 2001 From: yassinebel Date: Sat, 9 Nov 2024 03:34:02 +0100 Subject: [PATCH 08/11] Update test and fix coding standards --- tests/Integration/Mapper/PsrRequestToRequestMapperTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php index ad8d3592b..32be44d9e 100644 --- a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php +++ b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php @@ -141,5 +141,6 @@ public function test_map_upload_file_into_request_property(): void $this->assertInstanceOf(Upload::class, $request->cover); $this->assertEquals('cover', array_key_first($request->getFiles())); + $this->assertTrue(arr($request->getFiles())->isAssoc()); } } From c6a2967a57af5e81e527466ec3c3493a24170f11 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Sat, 9 Nov 2024 03:53:52 +0100 Subject: [PATCH 09/11] Update PsrRequestToRequestMapperTest.php fixing CS --- tests/Integration/Mapper/PsrRequestToRequestMapperTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php index 32be44d9e..0a6c1f634 100644 --- a/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php +++ b/tests/Integration/Mapper/PsrRequestToRequestMapperTest.php @@ -4,13 +4,13 @@ namespace Tests\Tempest\Integration\Mapper; -use function Tempest\Support\arr; use Laminas\Diactoros\UploadedFile; use Tempest\Http\GenericRequest; use Tempest\Http\Mappers\PsrRequestToRequestMapper; use Tempest\Http\Request; use Tempest\Http\Upload; use Tempest\Mapper\Exceptions\MissingValuesException; +use function Tempest\Support\arr; use Tests\Tempest\Fixtures\Modules\Books\Requests\CreateBookRequest; use Tests\Tempest\Fixtures\Modules\Posts\PostRequest; use Tests\Tempest\Integration\FrameworkIntegrationTestCase; From 8d0d689f79ee54a30eb74517416958e7ab234b78 Mon Sep 17 00:00:00 2001 From: Yassine <108750248+yassiNebeL@users.noreply.github.com> Date: Sat, 9 Nov 2024 04:04:40 +0100 Subject: [PATCH 10/11] Update RequestToPsrRequestMapper.php streamline the reversible mapping way. --- src/Tempest/Http/src/Mappers/RequestToPsrRequestMapper.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tempest/Http/src/Mappers/RequestToPsrRequestMapper.php b/src/Tempest/Http/src/Mappers/RequestToPsrRequestMapper.php index cb5baecde..40476aba6 100644 --- a/src/Tempest/Http/src/Mappers/RequestToPsrRequestMapper.php +++ b/src/Tempest/Http/src/Mappers/RequestToPsrRequestMapper.php @@ -27,6 +27,7 @@ public function map(mixed $from, mixed $to): PsrRequest cookieParams: $from->getCookies(), queryParams: $from->getQuery(), parsedBody: $from->getBody(), + uploadedFiles: $from->getFiles() ); } } From a4eed6da819435015c1394c2831a15f80b35074e Mon Sep 17 00:00:00 2001 From: yassiNebeL Date: Sat, 9 Nov 2024 18:35:44 +0100 Subject: [PATCH 11/11] fix CS run --- src/Tempest/Http/src/IsRequest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tempest/Http/src/IsRequest.php b/src/Tempest/Http/src/IsRequest.php index 55f4eeeff..8631c1f2e 100644 --- a/src/Tempest/Http/src/IsRequest.php +++ b/src/Tempest/Http/src/IsRequest.php @@ -27,6 +27,7 @@ public function __construct( ) { $this->path ??= $this->resolvePath(); $this->query ??= $this->resolveQuery(); + $this->files ??= []; } public function get(string $key, mixed $default = null): mixed