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
|
<?php
namespace Illuminate\Tests\Integration\Database\Queue;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Support\Facades\DB;
use Illuminate\Tests\Integration\Database\DatabaseTestCase;
use Orchestra\Testbench\Attributes\WithMigration;
use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use Symfony\Component\Process\Exception\ProcessSignaledException;
use Throwable;
use function Orchestra\Testbench\remote;
#[RequiresPhpExtension('pcntl')]
#[WithMigration('laravel', 'queue')]
class QueueTransactionTest extends DatabaseTestCase
{
use DatabaseMigrations;
protected function defineEnvironment($app)
{
parent::defineEnvironment($app);
$config = $app['config'];
if ($config->get('database.default') === 'testing') {
$this->markTestSkipped('Test does not support using :memory: database connection');
}
$config->set(['queue.default' => 'database']);
}
public function testItCanHandleTimeoutJob()
{
dispatch(new Fixtures\TimeOutJobWithTransaction);
$this->assertSame(1, DB::table('jobs')->count());
$this->assertSame(0, DB::table('failed_jobs')->count());
try {
remote('queue:work --stop-when-empty', [
'DB_CONNECTION' => config('database.default'),
'QUEUE_CONNECTION' => config('queue.default'),
])->run();
} catch (Throwable $e) {
$this->assertInstanceOf(ProcessSignaledException::class, $e);
$this->assertSame('The process has been signaled with signal "9".', $e->getMessage());
}
$this->assertSame(0, DB::table('jobs')->count());
$this->assertSame(1, DB::table('failed_jobs')->count());
}
}
|