QueueTest.php 2.05 KB
Newer Older
Jens Segers's avatar
Jens Segers committed
1
<?php
Simon Schaufelberger's avatar
Simon Schaufelberger committed
2
declare(strict_types=1);
Jens Segers's avatar
Jens Segers committed
3 4 5

class QueueTest extends TestCase
{
Stas's avatar
Stas committed
6
    public function setUp(): void
Jens Segers's avatar
Jens Segers committed
7
    {
Fady Khalife's avatar
Fady Khalife committed
8 9 10 11 12 13 14
        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();
    }

Simon Schaufelberger's avatar
Simon Schaufelberger committed
15
    public function testQueueJobLifeCycle(): void
Fady Khalife's avatar
Fady Khalife committed
16 17
    {
        $id = Queue::push('test', ['action' => 'QueueJobLifeCycle'], 'test');
Jens Segers's avatar
Jens Segers committed
18 19
        $this->assertNotNull($id);

Fady Khalife's avatar
Fady Khalife committed
20
        // Get and reserve the test job (next available)
Jens Segers's avatar
Jens Segers committed
21
        $job = Queue::pop('test');
22 23 24 25 26 27
        $this->assertInstanceOf(Jenssegers\Mongodb\Queue\MongoJob::class, $job);
        $this->assertEquals(1, $job->isReserved());
        $this->assertEquals(json_encode([
            'displayName' => 'test',
            'job' => 'test',
            'maxTries' => null,
28
            'delay' => null,
29 30 31
            'timeout' => null,
            'data' => ['action' => 'QueueJobLifeCycle'],
        ]), $job->getRawBody());
Fady Khalife's avatar
Fady Khalife committed
32 33 34 35 36 37

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

Simon Schaufelberger's avatar
Simon Schaufelberger committed
38
    public function testQueueJobExpired(): void
Fady Khalife's avatar
Fady Khalife committed
39 40 41 42 43 44
    {
        $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();
45 46 47 48
        Queue::getDatabase()
            ->table(Config::get('queue.connections.database.table'))
            ->where('_id', $id)
            ->update(['reserved' => 1, 'reserved_at' => $expiry]);
Fady Khalife's avatar
Fady Khalife committed
49 50 51

        // Expect an attempted older job in the queue
        $job = Queue::pop('test');
52 53
        $this->assertEquals(1, $job->attempts());
        $this->assertGreaterThan($expiry, $job->reservedAt());
Fady Khalife's avatar
Fady Khalife committed
54 55 56

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