Skip to content

Commit 427cef7

Browse files
authored
Merge branch 'master' into php-cs-fıxer
2 parents ba3492a + 5d1416d commit 427cef7

File tree

2 files changed

+81
-0
lines changed

2 files changed

+81
-0
lines changed

src/Queue/MongoQueue.php

+9
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,13 @@ public function deleteReserved($queue, $id)
131131
{
132132
$this->database->collection($this->table)->where('_id', $id)->delete();
133133
}
134+
135+
/**
136+
* @inheritdoc
137+
*/
138+
public function deleteAndRelease($queue, $job, $delay)
139+
{
140+
$this->deleteReserved($queue, $job->getJobId());
141+
$this->release($queue, $job->getJobRecord(), $delay);
142+
}
134143
}

tests/QueueTest.php

+72
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
<?php
2+
23
declare(strict_types=1);
34

45
use Carbon\Carbon;
56
use Illuminate\Support\Str;
67
use Jenssegers\Mongodb\Queue\Failed\MongoFailedJobProvider;
8+
use Jenssegers\Mongodb\Queue\MongoQueue;
79

810
class QueueTest extends TestCase
911
{
@@ -103,4 +105,74 @@ public function testIncrementAttempts(): void
103105
$this->assertCount(1, $others_jobs);
104106
$this->assertEquals(0, $others_jobs[0]['attempts']);
105107
}
108+
109+
public function testJobRelease(): void
110+
{
111+
$queue = 'test';
112+
$job_id = Queue::push($queue, ['action' => 'QueueJobRelease'], 'test');
113+
$this->assertNotNull($job_id);
114+
115+
$job = Queue::pop($queue);
116+
$job->release();
117+
118+
$jobs = Queue::getDatabase()
119+
->table(Config::get('queue.connections.database.table'))
120+
->get();
121+
122+
$this->assertCount(1, $jobs);
123+
$this->assertEquals(1, $jobs[0]['attempts']);
124+
}
125+
126+
public function testQueueDeleteReserved(): void
127+
{
128+
$queue = 'test';
129+
$job_id = Queue::push($queue, ['action' => 'QueueDeleteReserved'], 'test');
130+
131+
Queue::deleteReserved($queue, $job_id, 0);
132+
$jobs = Queue::getDatabase()
133+
->table(Config::get('queue.connections.database.table'))
134+
->get();
135+
136+
$this->assertCount(0, $jobs);
137+
}
138+
139+
public function testQueueRelease(): void
140+
{
141+
Carbon::setTestNow();
142+
$queue = 'test';
143+
$delay = 123;
144+
Queue::push($queue, ['action' => 'QueueRelease'], 'test');
145+
146+
$job = Queue::pop($queue);
147+
$released_job_id = Queue::release($queue, $job->getJobRecord(), $delay);
148+
149+
$released_job = Queue::getDatabase()
150+
->table(Config::get('queue.connections.database.table'))
151+
->where('_id', $released_job_id)
152+
->first();
153+
154+
$this->assertEquals($queue, $released_job['queue']);
155+
$this->assertEquals(1, $released_job['attempts']);
156+
$this->assertNull($released_job['reserved_at']);
157+
$this->assertEquals(
158+
Carbon::now()->addRealSeconds($delay)->getTimestamp(),
159+
$released_job['available_at']
160+
);
161+
$this->assertEquals(Carbon::now()->getTimestamp(), $released_job['created_at']);
162+
$this->assertEquals($job->getRawBody(), $released_job['payload']);
163+
}
164+
165+
public function testQueueDeleteAndRelease(): void
166+
{
167+
$queue = 'test';
168+
$delay = 123;
169+
Queue::push($queue, ['action' => 'QueueDeleteAndRelease'], 'test');
170+
$job = Queue::pop($queue);
171+
172+
$mock = Mockery::mock(MongoQueue::class)->makePartial();
173+
$mock->expects('deleteReserved')->once()->with($queue, $job->getJobId());
174+
$mock->expects('release')->once()->with($queue, $job->getJobRecord(), $delay);
175+
176+
$mock->deleteAndRelease($queue, $job, $delay);
177+
}
106178
}

0 commit comments

Comments
 (0)