1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
<?php
namespace Illuminate\Tests\Integration\Queue;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Encryption\DecryptException;
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\Bus;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Queue;
use Illuminate\Support\Str;
use Illuminate\Tests\Integration\Database\DatabaseTestCase;
use Orchestra\Testbench\Attributes\WithMigration;
#[WithMigration('queue')]
class JobEncryptionTest extends DatabaseTestCase
{
use DatabaseMigrations;
protected function getEnvironmentSetUp($app)
{
parent::getEnvironmentSetUp($app);
$app['config']->set('app.key', Str::random(32));
$app['config']->set('queue.default', 'database');
}
protected function tearDown(): void
{
JobEncryptionTestEncryptedJob::$ran = false;
JobEncryptionTestNonEncryptedJob::$ran = false;
parent::tearDown();
}
public function testEncryptedJobPayloadIsStoredEncrypted()
{
Bus::dispatch(new JobEncryptionTestEncryptedJob);
$this->assertNotEmpty(
decrypt(json_decode(DB::table('jobs')->first()->payload)->data->command)
);
}
public function testNonEncryptedJobPayloadIsStoredRaw()
{
Bus::dispatch(new JobEncryptionTestNonEncryptedJob);
$this->expectException(DecryptException::class);
$this->expectExceptionMessage('The payload is invalid');
$this->assertInstanceOf(JobEncryptionTestNonEncryptedJob::class,
unserialize(json_decode(DB::table('jobs')->first()->payload)->data->command)
);
decrypt(json_decode(DB::table('jobs')->first()->payload)->data->command);
}
public function testQueueCanProcessEncryptedJob()
{
Bus::dispatch(new JobEncryptionTestEncryptedJob);
Queue::pop()->fire();
$this->assertTrue(JobEncryptionTestEncryptedJob::$ran);
}
public function testQueueCanProcessUnEncryptedJob()
{
Bus::dispatch(new JobEncryptionTestNonEncryptedJob);
Queue::pop()->fire();
$this->assertTrue(JobEncryptionTestNonEncryptedJob::$ran);
}
}
class JobEncryptionTestEncryptedJob implements ShouldQueue, ShouldBeEncrypted
{
use Dispatchable, Queueable;
public static $ran = false;
public function handle()
{
static::$ran = true;
}
}
class JobEncryptionTestNonEncryptedJob implements ShouldQueue
{
use Dispatchable, Queueable;
public static $ran = false;
public function handle()
{
static::$ran = true;
}
}
|