set('app.key', Str::random(32)); $app['config']->set('queue.default', 'database'); } protected function setUp(): void { parent::setUp(); Schema::create('jobs', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('queue')->index(); $table->longText('payload'); $table->unsignedTinyInteger('attempts'); $table->unsignedInteger('reserved_at')->nullable(); $table->unsignedInteger('available_at'); $table->unsignedInteger('created_at'); }); } 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; } }