@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Jobs\ScanDocumentForMalware;
|
||||
use App\Models\User;
|
||||
use App\Services\Malware\MalwareScanner;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Tests\TestCase;
|
||||
|
||||
class ClamDQueueWorkerIntegrationTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
public function test_database_queue_worker_processes_a_private_document_and_does_not_publish_it(): void
|
||||
{
|
||||
$scanner = app(MalwareScanner::class);
|
||||
$health = $scanner->health();
|
||||
Storage::fake('local');
|
||||
config(['queue.default' => 'database', 'portal.managers' => []]);
|
||||
$manager = User::factory()->create(['email_verified_at' => now()]);
|
||||
config(['portal.managers' => [$manager->email]]);
|
||||
|
||||
$this->actingAs($manager)->post('/management/portal-services/upload', [
|
||||
'file' => UploadedFile::fake()->createWithContent('queue-worker-qa.txt', 'Harmless private queue worker integration test.'),
|
||||
])->assertSessionHasNoErrors();
|
||||
$document = DB::table('documents')->where('file_name', 'queue-worker-qa.txt')->firstOrFail();
|
||||
$this->assertSame('pending', $document->malware_scan_status);
|
||||
$this->assertSame('quarantined', $document->status);
|
||||
|
||||
ScanDocumentForMalware::dispatch($document->id)->onConnection('database')->onQueue('default');
|
||||
Artisan::call('queue:work', ['connection' => 'database', '--once' => true, '--tries' => 3, '--timeout' => 150, '--queue' => 'default']);
|
||||
$document = DB::table('documents')->where('id', $document->id)->firstOrFail();
|
||||
|
||||
if ($health['available']) {
|
||||
$this->assertSame('clean', $document->malware_scan_status);
|
||||
$this->assertSame('active', $document->status);
|
||||
$this->assertSame($document->sha256, $document->malware_scanned_sha256);
|
||||
} else {
|
||||
$this->assertSame('inconclusive', $document->malware_scan_status);
|
||||
$this->assertSame('quarantined', $document->status);
|
||||
}
|
||||
$this->assertSame('internal', $document->data_classification);
|
||||
$this->assertSame(0, DB::table('portal_resources')->count());
|
||||
$this->assertDatabaseHas('document_malware_scans', ['document_id' => $document->id,
|
||||
'result' => $health['available'] ? 'clean' : 'inconclusive']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user