QueueTest.php 3.13 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
use Carbon\Carbon;
5 6
use Jenssegers\Mongodb\Queue\Failed\MongoFailedJobProvider;

Jens Segers's avatar
Jens Segers committed
7 8
class QueueTest extends TestCase
{
Stas's avatar
Stas committed
9
    public function setUp(): void
Jens Segers's avatar
Jens Segers committed
10
    {
Fady Khalife's avatar
Fady Khalife committed
11 12 13 14 15 16 17
        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
18
    public function testQueueJobLifeCycle(): void
Fady Khalife's avatar
Fady Khalife committed
19 20
    {
        $id = Queue::push('test', ['action' => 'QueueJobLifeCycle'], 'test');
Jens Segers's avatar
Jens Segers committed
21 22
        $this->assertNotNull($id);

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

        // 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
41
    public function testQueueJobExpired(): void
Fady Khalife's avatar
Fady Khalife committed
42 43 44 45 46
    {
        $id = Queue::push('test', ['action' => 'QueueJobExpired'], 'test');
        $this->assertNotNull($id);

        // Expire the test job
47
        $expiry = Carbon::now()->subSeconds(Config::get('queue.connections.database.expire'))->getTimestamp();
48 49 50 51
        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
52 53 54

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

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

62 63
    public function testFailQueueJob(): void
    {
Denisson Leal's avatar
Denisson Leal committed
64
        $provider = app('queue.failer');
65

Denisson Leal's avatar
Denisson Leal committed
66
        $this->assertInstanceOf(MongoFailedJobProvider::class, $provider);
67
    }
68

69 70 71 72 73 74 75
    public function testFindFailJobNull(): void
    {
        Config::set('queue.failed.database', 'mongodb');
        $provider = app('queue.failer');

        $this->assertNull($provider->find(1));
    }
76 77 78

    public function testIncrementAttempts(): void
    {
Denisson Leal's avatar
Denisson Leal committed
79
        $job_id = Queue::push('test1', ['action' => 'QueueJobExpired'], 'test');
Denisson Leal's avatar
Denisson Leal committed
80
        $this->assertNotNull($job_id);
Denisson Leal's avatar
Denisson Leal committed
81
        $job_id = Queue::push('test2', ['action' => 'QueueJobExpired'], 'test');
82
        $this->assertNotNull($job_id);
83

Denisson Leal's avatar
Denisson Leal committed
84 85 86
        $job = Queue::pop('test');
        $this->assertEquals(1, $job->attempts());
        $job->delete();
87

Denisson Leal's avatar
Denisson Leal committed
88
        $others_jobs = Queue::getDatabase()
89 90 91
            ->table(Config::get('queue.connections.database.table'))
            ->get();

Denisson Leal's avatar
Denisson Leal committed
92 93
        $this->assertCount(1, $others_jobs);
        $this->assertEquals(0, $others_jobs[0]['attempts']);
94
    }
Jens Segers's avatar
Jens Segers committed
95
}