Skip to content

Commit 05fb9e0

Browse files
xEdelweissTavoNiievez
authored andcommitted
Add event dispatch assertions, event listener call assertions (deprecate existing ones)
1 parent cb13340 commit 05fb9e0

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
@@ -43,7 +43,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void
4343
}
4444

4545
/**
46-
* Verifies that one or more event listeners were not called during the test.
46+
* Verifies that one or more events were not dispatched during the test.
4747
*
4848
* ```php
4949
* <?php
@@ -55,7 +55,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void
5555
* @param object|string|string[] $expected
5656
* @deprecated Use `dontSeeEventListenerIsCalled()` instead.
5757
*/
58-
public function dontSeeEventTriggered(array|object|string $expected): void
58+
public function dontSeeEvent(array|object|string $expected): void
5959
{
6060
trigger_error('dontSeeEventTriggered is deprecated, please use dontSeeEventListenerIsCalled instead', E_USER_DEPRECATED);
6161
$this->dontSeeEventListenerIsCalled($expected);
@@ -83,6 +83,47 @@ public function dontSeeEventListenerIsCalled(array|object|string $expected): voi
8383
$this->assertEventNotTriggered($data, $expected);
8484
}
8585

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

112153
/**
113-
* Verifies that one or more event listeners were called during the test.
154+
* Verifies that one or more events were dispatched during the test.
114155
*
115156
* ```php
116157
* <?php
117-
* $I->seeEventTriggered('App\MyEvent');
118-
* $I->seeEventTriggered(new App\Events\MyEvent());
119-
* $I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
158+
* $I->seeEvent('App\MyEvent');
159+
* $I->seeEvent(new App\Events\MyEvent());
160+
* $I->seeEvent(['App\MyEvent', 'App\MyOtherEvent']);
120161
* ```
121162
*
122163
* @param object|string|string[] $expected
123164
* @deprecated Use `seeEventListenerIsCalled()` instead.
124165
*/
125-
public function seeEventTriggered(array|object|string $expected): void
166+
public function seeEvent(array|object|string $expected): void
126167
{
127168
trigger_error('seeEventTriggered is deprecated, please use seeEventListenerIsCalled instead', E_USER_DEPRECATED);
128169
$this->seeEventListenerIsCalled($expected);
@@ -150,6 +191,47 @@ public function seeEventListenerIsCalled(array|object|string $expected): void
150191
$this->assertEventTriggered($data, $expected);
151192
}
152193

194+
/**
195+
* Verifies that one or more event listeners were called during the test.
196+
*
197+
* ```php
198+
* <?php
199+
* $I->seeEventTriggered('App\MyEventSubscriber');
200+
* $I->seeEventTriggered(new App\Events\MyEventSubscriber());
201+
* $I->seeEventTriggered(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
202+
* ```
203+
*
204+
* @param object|string|string[] $expected
205+
* @deprecated Use `seeEventListenerCalled` instead.
206+
*/
207+
public function seeEventTriggered(array|object|string $expected): void
208+
{
209+
$this->seeEventListenerCalled($expected);
210+
}
211+
212+
/**
213+
* Verifies that one or more event listeners were called during the test.
214+
*
215+
* ```php
216+
* <?php
217+
* $I->seeEventListenerCalled('App\MyEventSubscriber');
218+
* $I->seeEventListenerCalled(new App\Events\MyEventSubscriber());
219+
* $I->seeEventListenerCalled(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
220+
* ```
221+
*
222+
* @param object|string|string[] $expected
223+
*/
224+
public function seeEventListenerCalled(array|object|string $expected): void
225+
{
226+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
227+
228+
/** @var Data $data */
229+
$data = $eventCollector->getCalledListeners();
230+
$expected = is_array($expected) ? $expected : [$expected];
231+
232+
$this->assertListenerCalled($data, $expected);
233+
}
234+
153235
protected function assertEventNotTriggered(Data $data, array $expected): void
154236
{
155237
$actual = $data->getValue(true);
@@ -163,6 +245,19 @@ protected function assertEventNotTriggered(Data $data, array $expected): void
163245
}
164246
}
165247

248+
protected function assertListenerNotCalled(Data $data, array $expected): void
249+
{
250+
$actual = $data->getValue(true);
251+
252+
foreach ($expected as $expectedListener) {
253+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
254+
$this->assertFalse(
255+
$this->listenerWasCalled($actual, (string)$expectedListener),
256+
"The '{$expectedListener}' listener was called"
257+
);
258+
}
259+
}
260+
166261
protected function assertEventTriggered(Data $data, array $expected): void
167262
{
168263
if ($data->count() === 0) {
@@ -180,22 +275,49 @@ protected function assertEventTriggered(Data $data, array $expected): void
180275
}
181276
}
182277

183-
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
278+
protected function assertListenerCalled(Data $data, array $expected): void
184279
{
185-
$triggered = false;
280+
if ($data->count() === 0) {
281+
$this->fail('No listener was called');
282+
}
186283

284+
$actual = $data->getValue(true);
285+
286+
foreach ($expected as $expectedListener) {
287+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
288+
$this->assertTrue(
289+
$this->listenerWasCalled($actual, (string) $expectedListener),
290+
"The '{$expectedListener}' listener was not called"
291+
);
292+
}
293+
}
294+
295+
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
296+
{
187297
foreach ($actual as $actualEvent) {
188298
if (is_array($actualEvent)) { // Called Listeners
189-
if (str_starts_with($actualEvent['pretty'], $expectedEvent)) {
190-
$triggered = true;
299+
if ($actualEvent['event'] === $expectedEvent) {
300+
return true;
191301
}
192302
} else { // Orphan Events
193303
if ($actualEvent === $expectedEvent) {
194-
$triggered = true;
304+
return true;
195305
}
196306
}
197307
}
198-
return $triggered;
308+
309+
return false;
310+
}
311+
312+
protected function listenerWasCalled(array $actual, string $expectedListener): bool
313+
{
314+
foreach ($actual as $actualEvent) {
315+
if (str_starts_with($actualEvent['pretty'], $expectedListener)) {
316+
return true;
317+
}
318+
}
319+
320+
return false;
199321
}
200322

201323
protected function grabEventCollector(string $function): EventDataCollector

0 commit comments

Comments
 (0)