Skip to content

Commit 46ba34b

Browse files
xEdelweissTavoNiievez
authored andcommitted
Add event dispatch assertions, event listener call assertions (deprecate existing ones)
1 parent beccd5e commit 46ba34b

File tree

1 file changed

+135
-13
lines changed

1 file changed

+135
-13
lines changed

src/Codeception/Module/Symfony/EventsAssertionsTrait.php

Lines changed: 135 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void
4646
}
4747

4848
/**
49-
* Verifies that one or more event listeners were not called during the test.
49+
* Verifies that one or more events were not dispatched during the test.
5050
*
5151
* ```php
5252
* <?php
@@ -58,7 +58,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void
5858
* @param object|string|string[] $expected
5959
* @deprecated Use `dontSeeEventListenerIsCalled()` instead.
6060
*/
61-
public function dontSeeEventTriggered(array|object|string $expected): void
61+
public function dontSeeEvent(array|object|string $expected): void
6262
{
6363
trigger_error('dontSeeEventTriggered is deprecated, please use dontSeeEventListenerIsCalled instead', E_USER_DEPRECATED);
6464
$this->dontSeeEventListenerIsCalled($expected);
@@ -87,6 +87,47 @@ public function dontSeeEventListenerIsCalled(array|object|string $expected): voi
8787
$this->assertEventNotTriggered($data, $expected);
8888
}
8989

90+
/**
91+
* Verifies that one or more event listeners were not called during the test.
92+
*
93+
* ```php
94+
* <?php
95+
* $I->dontSeeEventTriggered('App\MyEventSubscriber');
96+
* $I->dontSeeEventTriggered(new App\Events\MyEventSubscriber());
97+
* $I->dontSeeEventTriggered(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
98+
* ```
99+
*
100+
* @param object|string|string[] $expected
101+
* @deprecated Use `dontSeeEventListenerCalled` instead.
102+
*/
103+
public function dontSeeEventTriggered(array|object|string $expected): void
104+
{
105+
$this->dontSeeEventListenerCalled($expected);
106+
}
107+
108+
/**
109+
* Verifies that one or more event listeners were not called during the test.
110+
*
111+
* ```php
112+
* <?php
113+
* $I->dontSeeEventListenerCalled('App\MyEventSubscriber');
114+
* $I->dontSeeEventListenerCalled(new App\Events\MyEventSubscriber());
115+
* $I->dontSeeEventListenerCalled(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
116+
* ```
117+
*
118+
* @param object|string|string[] $expected
119+
*/
120+
public function dontSeeEventListenerCalled(array|object|string $expected): void
121+
{
122+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
123+
124+
/** @var Data $data */
125+
$data = $eventCollector->getCalledListeners();
126+
$expected = is_array($expected) ? $expected : [$expected];
127+
128+
$this->assertListenerNotCalled($data, $expected);
129+
}
130+
90131
/**
91132
* Verifies that one or more orphan events were dispatched during the test.
92133
*
@@ -115,19 +156,19 @@ public function seeOrphanEvent(array|object|string $expected): void
115156
}
116157

117158
/**
118-
* Verifies that one or more event listeners were called during the test.
159+
* Verifies that one or more events were dispatched during the test.
119160
*
120161
* ```php
121162
* <?php
122-
* $I->seeEventTriggered('App\MyEvent');
123-
* $I->seeEventTriggered(new App\Events\MyEvent());
124-
* $I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
163+
* $I->seeEvent('App\MyEvent');
164+
* $I->seeEvent(new App\Events\MyEvent());
165+
* $I->seeEvent(['App\MyEvent', 'App\MyOtherEvent']);
125166
* ```
126167
*
127168
* @param object|string|string[] $expected
128169
* @deprecated Use `seeEventListenerIsCalled()` instead.
129170
*/
130-
public function seeEventTriggered(array|object|string $expected): void
171+
public function seeEvent(array|object|string $expected): void
131172
{
132173
trigger_error('seeEventTriggered is deprecated, please use seeEventListenerIsCalled instead', E_USER_DEPRECATED);
133174
$this->seeEventListenerIsCalled($expected);
@@ -156,6 +197,47 @@ public function seeEventListenerIsCalled(array|object|string $expected): void
156197
$this->assertEventTriggered($data, $expected);
157198
}
158199

200+
/**
201+
* Verifies that one or more event listeners were called during the test.
202+
*
203+
* ```php
204+
* <?php
205+
* $I->seeEventTriggered('App\MyEventSubscriber');
206+
* $I->seeEventTriggered(new App\Events\MyEventSubscriber());
207+
* $I->seeEventTriggered(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
208+
* ```
209+
*
210+
* @param object|string|string[] $expected
211+
* @deprecated Use `seeEventListenerCalled` instead.
212+
*/
213+
public function seeEventTriggered(array|object|string $expected): void
214+
{
215+
$this->seeEventListenerCalled($expected);
216+
}
217+
218+
/**
219+
* Verifies that one or more event listeners were called during the test.
220+
*
221+
* ```php
222+
* <?php
223+
* $I->seeEventListenerCalled('App\MyEventSubscriber');
224+
* $I->seeEventListenerCalled(new App\Events\MyEventSubscriber());
225+
* $I->seeEventListenerCalled(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
226+
* ```
227+
*
228+
* @param object|string|string[] $expected
229+
*/
230+
public function seeEventListenerCalled(array|object|string $expected): void
231+
{
232+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
233+
234+
/** @var Data $data */
235+
$data = $eventCollector->getCalledListeners();
236+
$expected = is_array($expected) ? $expected : [$expected];
237+
238+
$this->assertListenerCalled($data, $expected);
239+
}
240+
159241
protected function assertEventNotTriggered(Data $data, array $expected): void
160242
{
161243
$actual = $data->getValue(true);
@@ -169,6 +251,19 @@ protected function assertEventNotTriggered(Data $data, array $expected): void
169251
}
170252
}
171253

254+
protected function assertListenerNotCalled(Data $data, array $expected): void
255+
{
256+
$actual = $data->getValue(true);
257+
258+
foreach ($expected as $expectedListener) {
259+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
260+
$this->assertFalse(
261+
$this->listenerWasCalled($actual, (string)$expectedListener),
262+
"The '{$expectedListener}' listener was called"
263+
);
264+
}
265+
}
266+
172267
protected function assertEventTriggered(Data $data, array $expected): void
173268
{
174269
if ($data->count() === 0) {
@@ -186,22 +281,49 @@ protected function assertEventTriggered(Data $data, array $expected): void
186281
}
187282
}
188283

189-
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
284+
protected function assertListenerCalled(Data $data, array $expected): void
190285
{
191-
$triggered = false;
286+
if ($data->count() === 0) {
287+
$this->fail('No listener was called');
288+
}
192289

290+
$actual = $data->getValue(true);
291+
292+
foreach ($expected as $expectedListener) {
293+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
294+
$this->assertTrue(
295+
$this->listenerWasCalled($actual, (string) $expectedListener),
296+
"The '{$expectedListener}' listener was not called"
297+
);
298+
}
299+
}
300+
301+
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
302+
{
193303
foreach ($actual as $actualEvent) {
194304
if (is_array($actualEvent)) { // Called Listeners
195-
if (str_starts_with($actualEvent['pretty'], $expectedEvent)) {
196-
$triggered = true;
305+
if ($actualEvent['event'] === $expectedEvent) {
306+
return true;
197307
}
198308
} else { // Orphan Events
199309
if ($actualEvent === $expectedEvent) {
200-
$triggered = true;
310+
return true;
201311
}
202312
}
203313
}
204-
return $triggered;
314+
315+
return false;
316+
}
317+
318+
protected function listenerWasCalled(array $actual, string $expectedListener): bool
319+
{
320+
foreach ($actual as $actualEvent) {
321+
if (str_starts_with($actualEvent['pretty'], $expectedListener)) {
322+
return true;
323+
}
324+
}
325+
326+
return false;
205327
}
206328

207329
protected function grabEventCollector(string $function): EventDataCollector

0 commit comments

Comments
 (0)