1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
<?php
namespace Illuminate\Support\Testing\Fakes;
use Illuminate\Contracts\Bus\Dispatcher; use PHPUnit\Framework\Assert as PHPUnit;
class BusFake implements Dispatcher { /** * The commands that have been dispatched. * * @var array */ protected $commands = [];
/** * Assert if a job was dispatched based on a truth-test callback. * * @param string $command * @param callable|null $callback * @return void */ public function assertDispatched($command, $callback = null) { PHPUnit::assertTrue( $this->dispatched($command, $callback)->count() > 0, "The expected [{$command}] job was not dispatched." ); }
/** * Determine if a job was dispatched based on a truth-test callback. * * @param string $command * @param callable|null $callback * @return void */ public function assertNotDispatched($command, $callback = null) { PHPUnit::assertTrue( $this->dispatched($command, $callback)->count() === 0, "The unexpected [{$command}] job was dispatched." ); }
/** * Get all of the jobs matching a truth-test callback. * * @param string $command * @param callable|null $callback * @return \Illuminate\Support\Collection */ public function dispatched($command, $callback = null) { if (! $this->hasDispatched($command)) { return collect(); }
$callback = $callback ?: function () { return true; };
return collect($this->commands[$command])->filter(function ($command) use ($callback) { return $callback($command); }); }
/** * Determine if there are any stored commands for a given class. * * @param string $command * @return bool */ public function hasDispatched($command) { return isset($this->commands[$command]) && ! empty($this->commands[$command]); }
/** * Dispatch a command to its appropriate handler. * * @param mixed $command * @return mixed */ public function dispatch($command) { return $this->dispatchNow($command); }
/** * Dispatch a command to its appropriate handler in the current process. * * @param mixed $command * @param mixed $handler * @return mixed */ public function dispatchNow($command, $handler = null) { $this->commands[get_class($command)][] = $command; }
/** * Set the pipes commands should be piped through before dispatching. * * @param array $pipes * @return $this */ public function pipeThrough(array $pipes) { // } }
|