From 1b5a1f5e17a8fb2213793bf1373089079c5badea Mon Sep 17 00:00:00 2001 From: Aaron Gustavo Nieves Date: Sun, 23 Nov 2025 09:13:41 -0500 Subject: [PATCH] Simplify the module code --- composer.json | 1 + src/Codeception/Module/Symfony.php | 79 +++++++------------ .../Module/Symfony/BrowserAssertionsTrait.php | 3 +- .../Module/Symfony/MailerAssertionsTrait.php | 13 ++- .../Symfony/NotifierAssertionsTrait.php | 13 ++- 5 files changed, 42 insertions(+), 67 deletions(-) diff --git a/composer.json b/composer.json index 03ca498..810b0b3 100644 --- a/composer.json +++ b/composer.json @@ -33,6 +33,7 @@ "doctrine/orm": "^3.5", "friendsofphp/php-cs-fixer": "^3.85", "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^10.0", "symfony/browser-kit": "^5.4 | ^6.4 | ^7.3", "symfony/cache": "^5.4 | ^6.4 | ^7.3", "symfony/config": "^5.4 | ^6.4 | ^7.3", diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index ff11a36..2c87f52 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -334,6 +334,14 @@ protected function getClient(): SymfonyConnector */ protected function getKernelClass(): string { + /** @var class-string $kernelClass */ + $kernelClass = $this->config['kernel_class']; + $this->requireAdditionalAutoloader(); + + if (class_exists($kernelClass)) { + return $kernelClass; + } + /** @var string $rootDir */ $rootDir = codecept_root_dir(); $path = $rootDir . $this->config['app_path']; @@ -346,40 +354,21 @@ protected function getKernelClass(): string ); } - $this->requireAdditionalAutoloader(); - - $finder = new Finder(); - $results = iterator_to_array($finder->name('*Kernel.php')->depth('0')->in($path)); - - if ($results === []) { - throw new ModuleRequireException( - self::class, - "File with Kernel class was not found at {$path}.\n" . - 'Specify directory where file with Kernel class for your application is located with `app_path` parameter.' - ); - } - - $kernelClass = $this->config['kernel_class']; - $filesRealPath = []; + $finder = new Finder(); + $finder->name('*Kernel.php')->depth('0')->in($path); - foreach ($results as $file) { + foreach ($finder as $file) { include_once $file->getRealPath(); - $filesRealPath[] = $file->getRealPath(); } - if (class_exists($kernelClass)) { - $ref = new ReflectionClass($kernelClass); - $fileName = $ref->getFileName(); - if ($fileName !== false && in_array($fileName, $filesRealPath, true)) { - /** @var class-string $kernelClass */ - return $kernelClass; - } + if (class_exists($kernelClass, false)) { + return $kernelClass; } throw new ModuleRequireException( self::class, - "Kernel class was not found.\n" . - 'Specify directory where file with Kernel class for your application is located with `kernel_class` parameter.' + "Kernel class was not found at {$path}.\n" . + 'Specify directory where file with Kernel class for your application is located with `app_path` parameter.' ); } @@ -455,31 +444,19 @@ protected function debugResponse(mixed $url): void return; } - if ($profile->hasCollector(DataCollectorName::SECURITY->value)) { - $securityCollector = $profile->getCollector(DataCollectorName::SECURITY->value); - if ($securityCollector instanceof SecurityDataCollector) { - $this->debugSecurityData($securityCollector); - } - } - - if ($profile->hasCollector(DataCollectorName::MAILER->value)) { - $mailerCollector = $profile->getCollector(DataCollectorName::MAILER->value); - if ($mailerCollector instanceof MessageDataCollector) { - $this->debugMailerData($mailerCollector); - } - } - - if ($profile->hasCollector(DataCollectorName::NOTIFIER->value)) { - $notifierCollector = $profile->getCollector(DataCollectorName::NOTIFIER->value); - if ($notifierCollector instanceof NotificationDataCollector) { - $this->debugNotifierData($notifierCollector); - } - } - - if ($profile->hasCollector(DataCollectorName::TIME->value)) { - $timeCollector = $profile->getCollector(DataCollectorName::TIME->value); - if ($timeCollector instanceof TimeDataCollector) { - $this->debugTimeData($timeCollector); + $collectors = [ + DataCollectorName::SECURITY->value => [$this->debugSecurityData(...), SecurityDataCollector::class], + DataCollectorName::MAILER->value => [$this->debugMailerData(...), MessageDataCollector::class], + DataCollectorName::NOTIFIER->value => [$this->debugNotifierData(...), NotificationDataCollector::class], + DataCollectorName::TIME->value => [$this->debugTimeData(...), TimeDataCollector::class], + ]; + + foreach ($collectors as $name => [$callback, $expectedClass]) { + if ($profile->hasCollector($name)) { + $collector = $profile->getCollector($name); + if ($collector instanceof $expectedClass) { + $callback($collector); + } } } } diff --git a/src/Codeception/Module/Symfony/BrowserAssertionsTrait.php b/src/Codeception/Module/Symfony/BrowserAssertionsTrait.php index 8bd940b..d04b69e 100644 --- a/src/Codeception/Module/Symfony/BrowserAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/BrowserAssertionsTrait.php @@ -359,8 +359,7 @@ public function submitSymfonyForm(string $name, array $fields): void $params = []; foreach ($fields as $key => $value) { - $fixedKey = sprintf('%s%s', $name, $key); - $params[$fixedKey] = $value; + $params[$name . $key] = $value; } $button = sprintf('%s_submit', $name); diff --git a/src/Codeception/Module/Symfony/MailerAssertionsTrait.php b/src/Codeception/Module/Symfony/MailerAssertionsTrait.php index 649bfcd..8da45f5 100644 --- a/src/Codeception/Module/Symfony/MailerAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/MailerAssertionsTrait.php @@ -164,13 +164,12 @@ public function getMailerEvent(int $index = 0, ?string $transport = null): ?Mess protected function getMessageMailerEvents(): MessageEvents { - $mailer = $this->getService('mailer.message_logger_listener'); - if ($mailer instanceof MessageLoggerListener) { - return $mailer->getEvents(); - } - $mailer = $this->getService('mailer.logger_message_listener'); - if ($mailer instanceof MessageLoggerListener) { - return $mailer->getEvents(); + $services = ['mailer.message_logger_listener', 'mailer.logger_message_listener']; + foreach ($services as $serviceId) { + $mailer = $this->getService($serviceId); + if ($mailer instanceof MessageLoggerListener) { + return $mailer->getEvents(); + } } Assert::fail("Emails can't be tested without Symfony Mailer service."); } diff --git a/src/Codeception/Module/Symfony/NotifierAssertionsTrait.php b/src/Codeception/Module/Symfony/NotifierAssertionsTrait.php index 77422c7..765d8d0 100644 --- a/src/Codeception/Module/Symfony/NotifierAssertionsTrait.php +++ b/src/Codeception/Module/Symfony/NotifierAssertionsTrait.php @@ -251,13 +251,12 @@ protected function getNotificationEvents(): NotificationEvents Assert::fail('Notifier assertions require Symfony 6.2 or higher.'); } - $notifier = $this->getService('notifier.notification_logger_listener'); - if ($notifier instanceof NotificationLoggerListener) { - return $notifier->getEvents(); - } - $notifier = $this->getService('notifier.logger_notification_listener'); - if ($notifier instanceof NotificationLoggerListener) { - return $notifier->getEvents(); + $services = ['notifier.notification_logger_listener', 'notifier.logger_notification_listener']; + foreach ($services as $serviceId) { + $notifier = $this->getService($serviceId); + if ($notifier instanceof NotificationLoggerListener) { + return $notifier->getEvents(); + } } Assert::fail("Notifications can't be tested without Symfony Notifier service."); }