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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy