From 8836adddef43aa435bdb2d10c3190e2f5e223058 Mon Sep 17 00:00:00 2001 From: Mykhailo Sverdlykivskyi Date: Tue, 12 Dec 2023 00:11:34 +0200 Subject: [PATCH 1/2] Add seeEvent/dontSeeEvent --- .../Module/Symfony/EventsAssertionsTrait.php | 115 ++++++++++++++---- 1 file changed, 89 insertions(+), 26 deletions(-) diff --git a/src/Codeception/Module/Symfony/EventsAssertionsTrait.php b/src/Codeception/Module/Symfony/EventsAssertionsTrait.php index 81381a05..cbc3af2c 100644 --- a/src/Codeception/Module/Symfony/EventsAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/EventsAssertionsTrait.php @@ -39,7 +39,40 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void if ($expected === null) { $this->assertSame(0, $data->count()); } else { - $this->assertEventNotTriggered($data, $expected); + $this->assertEventTriggered($data, $expected, true); + } + } + + /** + * Verifies that there were no events during the test. + * Orphan events are included. Use `dontSeeOrphanEvent` to exclude them. + * + * ```php + * dontSeeEvent(); + * $I->dontSeeEvent('App\MyEvent'); + * $I->dontSeeEvent(new App\Events\MyEvent()); + * $I->dontSeeEvent(['App\MyEvent', 'App\MyOtherEvent']); + * ``` + * + * @param array|object|string|null $expected + */ + public function dontSeeEvent(array|object|string $expected = null): void + { + $eventCollector = $this->grabEventCollector(__FUNCTION__); + + $data = [ + $eventCollector->getOrphanedEvents(), + $eventCollector->getCalledListeners(), + ]; + $expected = is_array($expected) ? $expected : [$expected]; + + if ($expected === null) { + foreach ($data as $dataItem) { + $this->assertSame(0, $dataItem->count()); + } + } else { + $this->assertEventTriggered($data, $expected, true); } } @@ -123,6 +156,33 @@ public function seeOrphanEvent(array|object|string $expected): void $this->assertEventTriggered($data, $expected); } + /** + * Verifies that one or more events were dispatched during the test. + * Orphan events are included. Use `seeOrphanEvent` to exclude them. + * + * ```php + * seeEvent('App\MyEvent'); + * $I->seeEvent(new App\Events\MyEvent()); + * $I->seeEvent(['App\MyEvent', 'App\MyOtherEvent']); + * ``` + * + * @param array|object|string $expected + * @see seeOrphanEvent + */ + public function seeEvent(array|object|string $expected): void + { + $eventCollector = $this->grabEventCollector(__FUNCTION__); + + $data = [ + $eventCollector->getOrphanedEvents(), + $eventCollector->getCalledListeners(), + ]; + $expected = is_array($expected) ? $expected : [$expected]; + + $this->assertEventTriggered($data, $expected); + } + /** * Verifies that one or more event listeners were called during the test. * @@ -177,33 +237,38 @@ public function seeEventListenerIsCalled( $this->assertListenerCalled($data, $expected, $withEvents); } - protected function assertEventNotTriggered(Data $data, array $expected): void - { - $actual = $data->getValue(true); - - foreach ($expected as $expectedEvent) { - $expectedEvent = is_object($expectedEvent) ? $expectedEvent::class : $expectedEvent; - $this->assertFalse( - $this->eventWasTriggered($actual, (string)$expectedEvent), - "The '{$expectedEvent}' event triggered" - ); - } - } + protected function assertEventTriggered( + array|Data $data, + array $expected, + bool $invertAssertion = false + ): void { + $assertTrue = !$invertAssertion; + $data = is_array($data) ? $data : [$data]; + $totalEvents = array_sum(array_map('count', $data)); - protected function assertEventTriggered(Data $data, array $expected): void - { - if ($data->count() === 0) { + if ($assertTrue && $totalEvents === 0) { $this->fail('No event was triggered'); } - $actual = $data->getValue(true); + $actual = array_map(static fn (Data $data) => $data->getValue(true), $data); foreach ($expected as $expectedEvent) { $expectedEvent = is_object($expectedEvent) ? $expectedEvent::class : $expectedEvent; - $this->assertTrue( - $this->eventWasTriggered($actual, (string)$expectedEvent), - "The '{$expectedEvent}' event did not trigger" - ); + $message = $assertTrue + ? "The '{$expectedEvent}' event did not trigger" + : "The '{$expectedEvent}' event triggered"; + + $condition = false; + + foreach ($actual as $actualEvents) { + $condition = $condition || $this->eventWasTriggered($actualEvents, (string)$expectedEvent); + } + + if ($assertTrue) { + $this->assertTrue($condition, $message); + } else { + $this->assertFalse($condition, $message); + } } } @@ -246,13 +311,11 @@ protected function eventWasTriggered(array $actual, string $expectedEvent): bool foreach ($actual as $actualEvent) { if (is_array($actualEvent)) { // Called Listeners - if (str_starts_with($actualEvent['pretty'], $expectedEvent)) { - $triggered = true; - } - } else { // Orphan Events - if ($actualEvent === $expectedEvent) { + if ($actualEvent['event'] === $expectedEvent) { $triggered = true; } + } elseif ($actualEvent === $expectedEvent) { // Orphan Events + $triggered = true; } } From 71d11e9ef1ee8a449db7b558a5ca0c09048278e9 Mon Sep 17 00:00:00 2001 From: Mykhailo Sverdlykivskyi Date: Tue, 19 Dec 2023 12:40:02 +0200 Subject: [PATCH 2/2] Make phpDoc and variable names more clear --- .../Module/Symfony/EventsAssertionsTrait.php | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/Codeception/Module/Symfony/EventsAssertionsTrait.php b/src/Codeception/Module/Symfony/EventsAssertionsTrait.php index cbc3af2c..f6d56cc3 100644 --- a/src/Codeception/Module/Symfony/EventsAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/EventsAssertionsTrait.php @@ -45,7 +45,7 @@ public function dontSeeOrphanEvent(array|object|string $expected = null): void /** * Verifies that there were no events during the test. - * Orphan events are included. Use `dontSeeOrphanEvent` to exclude them. + * Both regular and orphan events are checked. * * ```php * fail('No event was triggered'); } - $actual = array_map(static fn (Data $data) => $data->getValue(true), $data); + $actualEventsCollection = array_map(static fn (Data $data) => $data->getValue(true), $data); foreach ($expected as $expectedEvent) { $expectedEvent = is_object($expectedEvent) ? $expectedEvent::class : $expectedEvent; @@ -258,16 +260,16 @@ protected function assertEventTriggered( ? "The '{$expectedEvent}' event did not trigger" : "The '{$expectedEvent}' event triggered"; - $condition = false; + $eventTriggered = false; - foreach ($actual as $actualEvents) { - $condition = $condition || $this->eventWasTriggered($actualEvents, (string)$expectedEvent); + foreach ($actualEventsCollection as $actualEvents) { + $eventTriggered = $eventTriggered || $this->eventWasTriggered($actualEvents, (string)$expectedEvent); } if ($assertTrue) { - $this->assertTrue($condition, $message); + $this->assertTrue($eventTriggered, $message); } else { - $this->assertFalse($condition, $message); + $this->assertFalse($eventTriggered, $message); } } } 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