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); } public function test_create_zip_archive_marks_file_as_generated_and_stores_archive_outside_tmp(): void { $user = User::factory()->create(); $path = 'tests/archive/tmp'; Storage::disk('public')->makeDirectory($path); Storage::disk('public')->put($path . '/file.txt', 'test content'); $archive = app(FileService::class)->createZipArchive($path, 'archive.zip', $user->id); $this->assertTrue($archive->is_generated); $this->assertEquals('tests/archive/archive.zip', $archive->path); $this->assertEquals(url('/storage/tests/archive/archive.zip'), $archive->link); Storage::disk('public')->assertExists('tests/archive/archive.zip'); Storage::disk('public')->deleteDirectory('tests/archive'); } }