Skip to content

Commit 0274d16

Browse files
committed
Add event dispatch assertions, event listener call assertions (deprecate existing ones)
1 parent f758a24 commit 0274d16

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
@@ -57,7 +57,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void
5757
*
5858
* @param object|string|string[] $expected
5959
*/
60-
public function dontSeeEventTriggered(array|object|string $expected): void
60+
public function dontSeeEvent(array|object|string $expected): void
6161
{
6262
$eventCollector = $this->grabEventCollector(__FUNCTION__);
6363

@@ -68,6 +68,47 @@ public function dontSeeEventTriggered(array|object|string $expected): void
6868
$this->assertEventNotTriggered($data, $expected);
6969
}
7070

71+
/**
72+
* Verifies that one or more event listeners were not called during the test.
73+
*
74+
* ```php
75+
* <?php
76+
* $I->dontSeeEventTriggered('App\MyEventSubscriber');
77+
* $I->dontSeeEventTriggered(new App\Events\MyEventSubscriber());
78+
* $I->dontSeeEventTriggered(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
79+
* ```
80+
*
81+
* @param object|string|string[] $expected
82+
* @deprecated Use `dontSeeEventListenerCalled` instead.
83+
*/
84+
public function dontSeeEventTriggered(array|object|string $expected): void
85+
{
86+
$this->dontSeeEventListenerCalled($expected);
87+
}
88+
89+
/**
90+
* Verifies that one or more event listeners were not called during the test.
91+
*
92+
* ```php
93+
* <?php
94+
* $I->dontSeeEventListenerCalled('App\MyEventSubscriber');
95+
* $I->dontSeeEventListenerCalled(new App\Events\MyEventSubscriber());
96+
* $I->dontSeeEventListenerCalled(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
97+
* ```
98+
*
99+
* @param object|string|string[] $expected
100+
*/
101+
public function dontSeeEventListenerCalled(array|object|string $expected): void
102+
{
103+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
104+
105+
/** @var Data $data */
106+
$data = $eventCollector->getCalledListeners();
107+
$expected = is_array($expected) ? $expected : [$expected];
108+
109+
$this->assertListenerNotCalled($data, $expected);
110+
}
111+
71112
/**
72113
* Verifies that one or more orphan events were dispatched during the test.
73114
*
@@ -95,27 +136,68 @@ public function seeOrphanEvent(array|object|string $expected): void
95136
$this->assertEventTriggered($data, $expected);
96137
}
97138

139+
/**
140+
* Verifies that one or more events were dispatched during the test.
141+
*
142+
* ```php
143+
* <?php
144+
* $I->seeEvent('App\MyEvent');
145+
* $I->seeEvent(new App\Events\MyEvent());
146+
* $I->seeEvent(['App\MyEvent', 'App\MyOtherEvent']);
147+
* ```
148+
*
149+
* @param object|string|string[] $expected
150+
*/
151+
public function seeEvent(array|object|string $expected): void
152+
{
153+
$eventCollector = $this->grabEventCollector(__FUNCTION__);
154+
155+
/** @var Data $data */
156+
$data = $eventCollector->getCalledListeners();
157+
$expected = is_array($expected) ? $expected : [$expected];
158+
159+
$this->assertEventTriggered($data, $expected);
160+
}
161+
98162
/**
99163
* Verifies that one or more event listeners were called during the test.
100164
*
101165
* ```php
102166
* <?php
103-
* $I->seeEventTriggered('App\MyEvent');
104-
* $I->seeEventTriggered(new App\Events\MyEvent());
105-
* $I->seeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']);
167+
* $I->seeEventTriggered('App\MyEventSubscriber');
168+
* $I->seeEventTriggered(new App\Events\MyEventSubscriber());
169+
* $I->seeEventTriggered(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
106170
* ```
107171
*
108172
* @param object|string|string[] $expected
173+
* @deprecated Use `seeEventListenerCalled` instead.
109174
*/
110175
public function seeEventTriggered(array|object|string $expected): void
176+
{
177+
$this->seeEventListenerCalled($expected);
178+
}
179+
180+
/**
181+
* Verifies that one or more event listeners were called during the test.
182+
*
183+
* ```php
184+
* <?php
185+
* $I->seeEventListenerCalled('App\MyEventSubscriber');
186+
* $I->seeEventListenerCalled(new App\Events\MyEventSubscriber());
187+
* $I->seeEventListenerCalled(['App\MyEventSubscriber', 'App\MyOtherEventSubscriber']);
188+
* ```
189+
*
190+
* @param object|string|string[] $expected
191+
*/
192+
public function seeEventListenerCalled(array|object|string $expected): void
111193
{
112194
$eventCollector = $this->grabEventCollector(__FUNCTION__);
113195

114196
/** @var Data $data */
115197
$data = $eventCollector->getCalledListeners();
116198
$expected = is_array($expected) ? $expected : [$expected];
117199

118-
$this->assertEventTriggered($data, $expected);
200+
$this->assertListenerCalled($data, $expected);
119201
}
120202

121203
protected function assertEventNotTriggered(Data $data, array $expected): void
@@ -131,6 +213,19 @@ protected function assertEventNotTriggered(Data $data, array $expected): void
131213
}
132214
}
133215

216+
protected function assertListenerNotCalled(Data $data, array $expected): void
217+
{
218+
$actual = $data->getValue(true);
219+
220+
foreach ($expected as $expectedListener) {
221+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
222+
$this->assertFalse(
223+
$this->listenerWasCalled($actual, (string)$expectedListener),
224+
"The '{$expectedListener}' listener was called"
225+
);
226+
}
227+
}
228+
134229
protected function assertEventTriggered(Data $data, array $expected): void
135230
{
136231
if ($data->count() === 0) {
@@ -148,26 +243,53 @@ protected function assertEventTriggered(Data $data, array $expected): void
148243
}
149244
}
150245

151-
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
246+
protected function assertListenerCalled(Data $data, array $expected): void
152247
{
153-
$triggered = false;
248+
if ($data->count() === 0) {
249+
$this->fail('No listener was called');
250+
}
154251

252+
$actual = $data->getValue(true);
253+
254+
foreach ($expected as $expectedListener) {
255+
$expectedListener = is_object($expectedListener) ? $expectedListener::class : $expectedListener;
256+
$this->assertTrue(
257+
$this->listenerWasCalled($actual, (string) $expectedListener),
258+
"The '{$expectedListener}' listener was not called"
259+
);
260+
}
261+
}
262+
263+
protected function eventWasTriggered(array $actual, string $expectedEvent): bool
264+
{
155265
foreach ($actual as $actualEvent) {
156266
if (is_array($actualEvent)) { // Called Listeners
157-
if (str_starts_with($actualEvent['pretty'], $expectedEvent)) {
158-
$triggered = true;
267+
if ($actualEvent['event'] === $expectedEvent) {
268+
return true;
159269
}
160270
} else { // Orphan Events
161271
if ($actualEvent === $expectedEvent) {
162-
$triggered = true;
272+
return true;
163273
}
164274
}
165275
}
166-
return $triggered;
276+
277+
return false;
278+
}
279+
280+
protected function listenerWasCalled(array $actual, string $expectedListener): bool
281+
{
282+
foreach ($actual as $actualEvent) {
283+
if (str_starts_with($actualEvent['pretty'], $expectedListener)) {
284+
return true;
285+
}
286+
}
287+
288+
return false;
167289
}
168290

169291
protected function grabEventCollector(string $function): EventDataCollector
170292
{
171293
return $this->grabCollector('events', $function);
172294
}
173-
}
295+
}

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