From f0bd5dda8136e660919fb73184ef0d914024d9ab Mon Sep 17 00:00:00 2001 From: KnifeLemon Date: Thu, 16 Oct 2025 15:03:54 +0900 Subject: [PATCH] fixed multiple file upload errors --- flight/net/Request.php | 8 +++---- tests/RequestTest.php | 52 +++++++++++++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/flight/net/Request.php b/flight/net/Request.php index c56f1f4..1397842 100644 --- a/flight/net/Request.php +++ b/flight/net/Request.php @@ -477,7 +477,7 @@ class Request */ public function getUploadedFiles(): array { - $files = []; + $uploadedFiles = []; $correctedFilesArray = $this->reArrayFiles($this->files); foreach ($correctedFilesArray as $keyName => $files) { foreach ($files as $file) { @@ -489,14 +489,14 @@ class Request $file['error'] ); if (count($files) > 1) { - $files[$keyName][] = $UploadedFile; + $uploadedFiles[$keyName][] = $UploadedFile; } else { - $files[$keyName] = $UploadedFile; + $uploadedFiles[$keyName] = $UploadedFile; } } } - return $files; + return $uploadedFiles; } /** diff --git a/tests/RequestTest.php b/tests/RequestTest.php index 214b26e..5dc1f1a 100644 --- a/tests/RequestTest.php +++ b/tests/RequestTest.php @@ -330,31 +330,57 @@ class RequestTest extends TestCase public function testGetMultiFileUpload(): void { - $_FILES['files'] = [ + // Arrange: Setup multiple file upload arrays + $_FILES['files_1'] = [ 'name' => ['file1.txt', 'file2.txt'], 'type' => ['text/plain', 'text/plain'], 'size' => [123, 456], 'tmp_name' => ['/tmp/php123', '/tmp/php456'], 'error' => [0, 0] ]; + $_FILES['files_2'] = [ + 'name' => ['file3.txt', 'file4.txt'], + 'type' => ['text/html', 'application/json'], + 'size' => [789, 321], + 'tmp_name' => ['/tmp/php789', '/tmp/php321'], + 'error' => [0, 0] + ]; + // Act $request = new Request(); + $uploadedFiles = $request->getUploadedFiles(); - $files = $request->getUploadedFiles()['files']; + // Assert: Verify first file group + $firstGroup = $uploadedFiles['files_1'] ?? []; + $this->assertCount(2, $firstGroup, 'First file group should contain 2 files'); - $this->assertCount(2, $files); + $this->assertUploadedFile($firstGroup[0], 'file1.txt', 'text/plain', 123, '/tmp/php123', 0); + $this->assertUploadedFile($firstGroup[1], 'file2.txt', 'text/plain', 456, '/tmp/php456', 0); - $this->assertEquals('file1.txt', $files[0]->getClientFilename()); - $this->assertEquals('text/plain', $files[0]->getClientMediaType()); - $this->assertEquals(123, $files[0]->getSize()); - $this->assertEquals('/tmp/php123', $files[0]->getTempName()); - $this->assertEquals(0, $files[0]->getError()); + // Assert: Verify second file group + $secondGroup = $uploadedFiles['files_2'] ?? []; + $this->assertCount(2, $secondGroup, 'Second file group should contain 2 files'); + + $this->assertUploadedFile($secondGroup[0], 'file3.txt', 'text/html', 789, '/tmp/php789', 0); + $this->assertUploadedFile($secondGroup[1], 'file4.txt', 'application/json', 321, '/tmp/php321', 0); + } - $this->assertEquals('file2.txt', $files[1]->getClientFilename()); - $this->assertEquals('text/plain', $files[1]->getClientMediaType()); - $this->assertEquals(456, $files[1]->getSize()); - $this->assertEquals('/tmp/php456', $files[1]->getTempName()); - $this->assertEquals(0, $files[1]->getError()); + /** + * Helper method to assert uploaded file properties + */ + private function assertUploadedFile( + $file, + string $expectedName, + string $expectedType, + int $expectedSize, + string $expectedTmpName, + int $expectedError + ): void { + $this->assertEquals($expectedName, $file->getClientFilename()); + $this->assertEquals($expectedType, $file->getClientMediaType()); + $this->assertEquals($expectedSize, $file->getSize()); + $this->assertEquals($expectedTmpName, $file->getTempName()); + $this->assertEquals($expectedError, $file->getError()); } public function testUrlWithAtSymbol(): void