Skip to content

Commit

Permalink
fix(2228): added transaction free deleteAndRelease() Method (#2229)
Browse files Browse the repository at this point in the history
* fix(2228): added transaction free deleteAndRelease() Method

* fix(2228): added test for queue deleteAndRelease Method

* fix(2228): style fix

* fix(2228): restructure queue tests

Co-authored-by: Stephen Odoardi <stephen.odoardi@wohnsinn.com>
Co-authored-by: Divine <48183131+divine@users.noreply.github.com>
  • Loading branch information
3 people committed May 2, 2021
1 parent 753cfde commit 5d1416d
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/Queue/MongoQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,13 @@ public function deleteReserved($queue, $id)
{
$this->database->collection($this->table)->where('_id', $id)->delete();
}

/**
* @inheritdoc
*/
public function deleteAndRelease($queue, $job, $delay)
{
$this->deleteReserved($queue, $job->getJobId());
$this->release($queue, $job->getJobRecord(), $delay);
}
}
72 changes: 72 additions & 0 deletions tests/QueueTest.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
<?php

declare(strict_types=1);

use Carbon\Carbon;
use Illuminate\Support\Str;
use Jenssegers\Mongodb\Queue\Failed\MongoFailedJobProvider;
use Jenssegers\Mongodb\Queue\MongoQueue;

class QueueTest extends TestCase
{
Expand Down Expand Up @@ -103,4 +105,74 @@ public function testIncrementAttempts(): void
$this->assertCount(1, $others_jobs);
$this->assertEquals(0, $others_jobs[0]['attempts']);
}

public function testJobRelease(): void
{
$queue = 'test';
$job_id = Queue::push($queue, ['action' => 'QueueJobRelease'], 'test');
$this->assertNotNull($job_id);

$job = Queue::pop($queue);
$job->release();

$jobs = Queue::getDatabase()
->table(Config::get('queue.connections.database.table'))
->get();

$this->assertCount(1, $jobs);
$this->assertEquals(1, $jobs[0]['attempts']);
}

public function testQueueDeleteReserved(): void
{
$queue = 'test';
$job_id = Queue::push($queue, ['action' => 'QueueDeleteReserved'], 'test');

Queue::deleteReserved($queue, $job_id, 0);
$jobs = Queue::getDatabase()
->table(Config::get('queue.connections.database.table'))
->get();

$this->assertCount(0, $jobs);
}

public function testQueueRelease(): void
{
Carbon::setTestNow();
$queue = 'test';
$delay = 123;
Queue::push($queue, ['action' => 'QueueRelease'], 'test');

$job = Queue::pop($queue);
$released_job_id = Queue::release($queue, $job->getJobRecord(), $delay);

$released_job = Queue::getDatabase()
->table(Config::get('queue.connections.database.table'))
->where('_id', $released_job_id)
->first();

$this->assertEquals($queue, $released_job['queue']);
$this->assertEquals(1, $released_job['attempts']);
$this->assertNull($released_job['reserved_at']);
$this->assertEquals(
Carbon::now()->addRealSeconds($delay)->getTimestamp(),
$released_job['available_at']
);
$this->assertEquals(Carbon::now()->getTimestamp(), $released_job['created_at']);
$this->assertEquals($job->getRawBody(), $released_job['payload']);
}

public function testQueueDeleteAndRelease(): void
{
$queue = 'test';
$delay = 123;
Queue::push($queue, ['action' => 'QueueDeleteAndRelease'], 'test');
$job = Queue::pop($queue);

$mock = Mockery::mock(MongoQueue::class)->makePartial();
$mock->expects('deleteReserved')->once()->with($queue, $job->getJobId());
$mock->expects('release')->once()->with($queue, $job->getJobRecord(), $delay);

$mock->deleteAndRelease($queue, $job, $delay);
}
}

0 comments on commit 5d1416d

Please sign in to comment.