QueueTest.php 1.85 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1 2 3 4
<?php

class QueueTest extends TestCase
{
Fady Khalife's avatar
Fady Khalife committed
5
    public function setUp()
Jens Segers's avatar
Jens Segers committed
6
    {
Fady Khalife's avatar
Fady Khalife committed
7 8 9 10 11 12 13 14 15 16
        parent::setUp();

        // Always start with a clean slate
        Queue::getDatabase()->table(Config::get('queue.connections.database.table'))->truncate();
        Queue::getDatabase()->table(Config::get('queue.failed.table'))->truncate();
    }

    public function testQueueJobLifeCycle()
    {
        $id = Queue::push('test', ['action' => 'QueueJobLifeCycle'], 'test');
Jens Segers's avatar
Jens Segers committed
17 18
        $this->assertNotNull($id);

Fady Khalife's avatar
Fady Khalife committed
19
        // Get and reserve the test job (next available)
Jens Segers's avatar
Jens Segers committed
20 21
        $job = Queue::pop('test');
        $this->assertInstanceOf('Illuminate\Queue\Jobs\DatabaseJob', $job);
Fady Khalife's avatar
Fady Khalife committed
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
        $this->assertEquals(1, $job->getDatabaseJob()->reserved);
        $this->assertEquals(json_encode(['job' => 'test', 'data' => ['action' => 'QueueJobLifeCycle']]), $job->getRawBody());

        // Remove reserved job
        $job->delete();
        $this->assertEquals(0, Queue::getDatabase()->table(Config::get('queue.connections.database.table'))->count());
    }

    public function testQueueJobExpired()
    {
        $id = Queue::push('test', ['action' => 'QueueJobExpired'], 'test');
        $this->assertNotNull($id);

        // Expire the test job
        $expiry = \Carbon\Carbon::now()->subSeconds(Config::get('queue.connections.database.expire'))->getTimestamp();
        Queue::getDatabase()->table(Config::get('queue.connections.database.table'))->where('_id', $id)->update(['reserved' => 1, 'reserved_at' => $expiry]);

        // Expect an attempted older job in the queue
        $job = Queue::pop('test');
Pooya Parsa's avatar
Pooya Parsa committed
41
        $this->assertEquals(1, $job->getDatabaseJob()->attempts);
Fady Khalife's avatar
Fady Khalife committed
42 43 44 45
        $this->assertGreaterThan($expiry, $job->getDatabaseJob()->reserved_at);

        $job->delete();
        $this->assertEquals(0, Queue::getDatabase()->table(Config::get('queue.connections.database.table'))->count());
Jens Segers's avatar
Jens Segers committed
46 47
    }
}