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)