Skip to content

Commit 6d6e4e1

Browse files
authored
[12.x] QueueFake::listenersPushed() (#55063)
* QueueFake::listenersPushed() * import * payload
1 parent b1008af commit 6d6e4e1

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/Illuminate/Support/Testing/Fakes/QueueFake.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use BadMethodCallException;
66
use Closure;
77
use Illuminate\Contracts\Queue\Queue;
8+
use Illuminate\Events\CallQueuedListener;
89
use Illuminate\Queue\CallQueuedClosure;
910
use Illuminate\Queue\QueueManager;
1011
use Illuminate\Support\Collection;
@@ -349,6 +350,29 @@ public function pushedRaw($callback = null)
349350
return (new Collection($this->rawPushes))->filter(fn ($data) => $callback($data['payload'], $data['queue'], $data['options']));
350351
}
351352

353+
/**
354+
* Get all of the jobs by listener class, passing an optional truth-test callback.
355+
*
356+
* @param class-string $listenerClass
357+
* @param (\Closure(mixed, \Illuminate\Events\CallQueuedListener, string|null, mixed): bool)|null $callback
358+
* @return \Illuminate\Support\Collection<int, \Illuminate\Events\CallQueuedListener>
359+
*/
360+
public function listenersPushed($listenerClass, $callback = null)
361+
{
362+
if (! $this->hasPushed(CallQueuedListener::class)) {
363+
return new Collection;
364+
}
365+
366+
$collection = (new Collection($this->jobs[CallQueuedListener::class]))
367+
->filter(fn ($data) => $data['job']->class === $listenerClass);
368+
369+
if ($callback) {
370+
$collection = $collection->filter(fn ($data) => $callback($data['job']->data[0] ?? null, $data['job'], $data['queue'], $data['data']));
371+
}
372+
373+
return $collection->pluck('job');
374+
}
375+
352376
/**
353377
* Determine if there are any stored jobs for a given class.
354378
*

tests/Integration/Queue/QueuedListenersTest.php

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,32 @@ public function testListenersCanBeQueuedOptionally()
2525
return $job->class == QueuedListenersTestListenerShouldQueue::class;
2626
});
2727

28+
$this->assertCount(1, Queue::listenersPushed(QueuedListenersTestListenerShouldQueue::class));
29+
$this->assertCount(
30+
0,
31+
Queue::listenersPushed(
32+
QueuedListenersTestListenerShouldQueue::class,
33+
fn ($event, $handler, $queue, $data) => $queue === 'not-a-real-queue'
34+
)
35+
);
36+
$this->assertCount(
37+
1,
38+
Queue::listenersPushed(
39+
QueuedListenersTestListenerShouldQueue::class,
40+
fn (QueuedListenersTestEvent $event) => $event->value === 100
41+
)
42+
);
43+
2844
Queue::assertNotPushed(CallQueuedListener::class, function ($job) {
2945
return $job->class == QueuedListenersTestListenerShouldNotQueue::class;
3046
});
47+
$this->assertCount(0, Queue::listenersPushed(QueuedListenersTestListenerShouldNotQueue::class));
3148
}
3249
}
3350

3451
class QueuedListenersTestEvent
3552
{
36-
//
53+
public int $value = 100;
3754
}
3855

3956
class QueuedListenersTestListenerShouldQueue implements ShouldQueue

0 commit comments

Comments
 (0)