create(); $this->actingAs($user); $filename = "Файл «отчет» 'смена' \"v3\".pdf"; $uploaded = UploadedFile::fake()->create($filename, 64, 'application/pdf'); $saved = app(FileService::class)->saveUploadedFile('tests/uploads', $uploaded); $this->assertEquals($filename, $saved->original_name); $this->assertEquals('tests/uploads/' . $filename, $saved->path); $this->assertEquals(url('/storage/tests/uploads/' . $filename), $saved->link); Storage::disk('public')->assertExists($saved->path); } public function test_save_uploaded_file_sanitizes_dangerous_name_parts(): void { Storage::fake('public'); $user = User::factory()->create(); $this->actingAs($user); $uploaded = UploadedFile::fake()->create('../../evil/..\\..\\doc?.pdf', 64, 'application/pdf'); $saved = app(FileService::class)->saveUploadedFile('tests/uploads', $uploaded); $this->assertEquals('doc?.pdf', $saved->original_name); $this->assertEquals('tests/uploads/doc_.pdf', $saved->path); $this->assertStringNotContainsString('..', $saved->path); Storage::disk('public')->assertExists($saved->path); } public function test_save_uploaded_file_avoids_overwrite_for_duplicate_names(): void { Storage::fake('public'); $user = User::factory()->create(); $this->actingAs($user); $firstUpload = UploadedFile::fake()->create('одинаковое имя.pdf', 64, 'application/pdf'); $secondUpload = UploadedFile::fake()->create('одинаковое имя.pdf', 64, 'application/pdf'); $first = app(FileService::class)->saveUploadedFile('tests/uploads', $firstUpload); $second = app(FileService::class)->saveUploadedFile('tests/uploads', $secondUpload); $this->assertEquals('tests/uploads/одинаковое имя.pdf', $first->path); $this->assertEquals('tests/uploads/одинаковое имя (1).pdf', $second->path); Storage::disk('public')->assertExists($first->path); Storage::disk('public')->assertExists($second->path); } public function test_save_uploaded_file_uses_fallback_when_basename_is_empty(): void { Storage::fake('public'); $user = User::factory()->create(); $this->actingAs($user); $uploaded = UploadedFile::fake()->create('.pdf', 64, 'application/pdf'); $saved = app(FileService::class)->saveUploadedFile('tests/uploads', $uploaded); $this->assertEquals('.pdf', $saved->original_name); $this->assertEquals('tests/uploads/file.pdf', $saved->path); Storage::disk('public')->assertExists($saved->path); } }