| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- namespace Tests\Feature;
- use App\Models\File;
- use App\Models\Import;
- use App\Models\User;
- use Illuminate\Foundation\Testing\RefreshDatabase;
- use Illuminate\Support\Facades\Artisan;
- use Illuminate\Support\Facades\Storage;
- use Tests\TestCase;
- class CleanupGeneratedDocumentsCommandTest extends TestCase
- {
- use RefreshDatabase;
- public function test_cleanup_generated_documents_removes_only_old_generated_files(): void
- {
- Storage::fake('public');
- $user = User::factory()->create();
- $generated = File::factory()->create([
- 'user_id' => $user->id,
- 'original_name' => 'Монтаж тест.zip',
- 'mime_type' => 'application/zip',
- 'path' => 'orders/10/Монтаж тест.zip',
- 'link' => url('/storage/orders/10/Монтаж тест.zip'),
- 'is_generated' => true,
- 'created_at' => now()->subDays(15),
- 'updated_at' => now()->subDays(15),
- ]);
- $uploaded = File::factory()->create([
- 'user_id' => $user->id,
- 'original_name' => 'manual.zip',
- 'mime_type' => 'application/zip',
- 'path' => 'orders/10/document/manual.zip',
- 'link' => url('/storage/orders/10/document/manual.zip'),
- 'is_generated' => false,
- 'created_at' => now()->subDays(30),
- 'updated_at' => now()->subDays(30),
- ]);
- $freshGenerated = File::factory()->create([
- 'user_id' => $user->id,
- 'original_name' => 'Сдача свежий.zip',
- 'mime_type' => 'application/zip',
- 'path' => 'orders/11/Сдача свежий.zip',
- 'link' => url('/storage/orders/11/Сдача свежий.zip'),
- 'is_generated' => true,
- 'created_at' => now()->subDays(2),
- 'updated_at' => now()->subDays(2),
- ]);
- Storage::disk('public')->put($generated->path, 'generated');
- Storage::disk('public')->put($uploaded->path, 'uploaded');
- Storage::disk('public')->put($freshGenerated->path, 'fresh');
- $exitCode = Artisan::call('documents:cleanup-generated', ['--days' => 14]);
- $this->assertSame(0, $exitCode);
- $this->assertDatabaseMissing('files', ['id' => $generated->id]);
- $this->assertDatabaseHas('files', ['id' => $uploaded->id]);
- $this->assertDatabaseHas('files', ['id' => $freshGenerated->id]);
- Storage::disk('public')->assertMissing($generated->path);
- Storage::disk('public')->assertExists($uploaded->path);
- Storage::disk('public')->assertExists($freshGenerated->path);
- }
- public function test_cleanup_generated_documents_removes_legacy_tmp_archive_path(): void
- {
- Storage::fake('public');
- $user = User::factory()->create();
- $file = File::factory()->create([
- 'user_id' => $user->id,
- 'original_name' => 'Рекламация тест.zip',
- 'mime_type' => 'application/zip',
- 'path' => 'reclamations/20/tmp/Рекламация тест.zip',
- 'link' => url('/storage/reclamations/20/Рекламация тест.zip'),
- 'is_generated' => true,
- 'created_at' => now()->subDays(15),
- 'updated_at' => now()->subDays(15),
- ]);
- Storage::disk('public')->put('reclamations/20/Рекламация тест.zip', 'legacy archive');
- $exitCode = Artisan::call('documents:cleanup-generated', ['--days' => 14]);
- $this->assertSame(0, $exitCode);
- $this->assertDatabaseMissing('files', ['id' => $file->id]);
- Storage::disk('public')->assertMissing('reclamations/20/Рекламация тест.zip');
- }
- public function test_cleanup_generated_documents_removes_old_orphan_generated_archive(): void
- {
- Storage::fake('public');
- Storage::fake('upload');
- Storage::disk('public')->put('orders/15/Монтаж сирота.zip', 'orphan archive');
- touch(Storage::disk('public')->path('orders/15/Монтаж сирота.zip'), now()->subDays(20)->timestamp);
- Storage::disk('public')->put('orders/15/document/manual.zip', 'manual archive');
- touch(Storage::disk('public')->path('orders/15/document/manual.zip'), now()->subDays(20)->timestamp);
- $exitCode = Artisan::call('documents:cleanup-generated', ['--days' => 14]);
- $this->assertSame(0, $exitCode);
- Storage::disk('public')->assertMissing('orders/15/Монтаж сирота.zip');
- Storage::disk('public')->assertExists('orders/15/document/manual.zip');
- }
- public function test_cleanup_generated_documents_removes_old_import_files_and_orphans(): void
- {
- Storage::fake('public');
- Storage::fake('upload');
- $oldImport = Import::factory()->create([
- 'filename' => 'ab/old-import.xlsx',
- 'created_at' => now()->subDays(20),
- 'updated_at' => now()->subDays(20),
- ]);
- $freshImport = Import::factory()->create([
- 'filename' => 'cd/fresh-import.xlsx',
- 'created_at' => now()->subDays(2),
- 'updated_at' => now()->subDays(2),
- ]);
- Storage::disk('upload')->put($oldImport->filename, 'old import');
- Storage::disk('upload')->put($freshImport->filename, 'fresh import');
- Storage::disk('upload')->put('ef/orphan-import.xlsx', 'orphan import');
- touch(Storage::disk('upload')->path('ef/orphan-import.xlsx'), now()->subDays(20)->timestamp);
- $exitCode = Artisan::call('documents:cleanup-generated', [
- '--days' => 14,
- '--import-days' => 14,
- ]);
- $this->assertSame(0, $exitCode);
- Storage::disk('upload')->assertMissing($oldImport->filename);
- Storage::disk('upload')->assertExists($freshImport->filename);
- Storage::disk('upload')->assertMissing('ef/orphan-import.xlsx');
- }
- }
|