Probleme: PHPUnit 13 genere des notices quand createMock() est utilise sans expects(), et des deprecations pour \$this->any() et ->with() sans expects(). Corrections: - tests/Service/AppLoggerServiceTest.php: suppression du setUp() partage, chaque test cree ses propres stubs/mocks selon ses besoins (bus createMock avec expects dans les tests log, createStub dans verify) - tests/EventSubscriber/CsrfProtectionSubscriberTest.php: csrfTokenManager change de createMock a createStub (aucun expects utilise) - tests/EventSubscriber/MessengerFailureSubscriberTest.php: em et mailer changes de createMock a createStub (aucun expects utilise) - tests/EventListener/AdminLogListenerTest.php: testLogThrowsDoesNotBlock cree son propre stub local au lieu d'utiliser le mock du setUp, attribut #[AllowMockObjectsWithoutExpectations] ajoute pour le mock du setUp qui reste instancie mais non utilise dans ce test - tests/Controller/SmallControllersTest.php: mocks sans expects remplaces par createStub via script automatise - tests/Controller/MainControllersTest.php: idem - tests/Controller/Admin/ClientsControllerTest.php: idem - tests/MessageHandler/AnalyticsMessageHandlerTest.php: idem - tests/EventListener/ExceptionListenerTest.php: idem Resultat: 262 tests, 454 assertions, 0 failures, 0 deprecations, 0 notices Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
76 lines
2.5 KiB
PHP
76 lines
2.5 KiB
PHP
<?php
|
|
|
|
namespace App\Tests\EventSubscriber;
|
|
|
|
use App\Entity\MessengerLog;
|
|
use App\EventSubscriber\MessengerFailureSubscriber;
|
|
use Doctrine\ORM\EntityManagerInterface;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\Mailer\MailerInterface;
|
|
use Symfony\Component\Messenger\Envelope;
|
|
use Symfony\Component\Messenger\Event\WorkerMessageFailedEvent;
|
|
use Symfony\Component\Messenger\Stamp\RedeliveryStamp;
|
|
use Symfony\Component\Mime\Email;
|
|
|
|
class MessengerFailureSubscriberTest extends TestCase
|
|
{
|
|
private EntityManagerInterface $em;
|
|
private MailerInterface $mailer;
|
|
private MessengerFailureSubscriber $subscriber;
|
|
|
|
protected function setUp(): void
|
|
{
|
|
$this->em = $this->createStub(EntityManagerInterface::class);
|
|
$this->mailer = $this->createStub(MailerInterface::class);
|
|
$this->subscriber = new MessengerFailureSubscriber($this->em, $this->mailer, 'admin@test.com');
|
|
}
|
|
|
|
public function testGetSubscribedEvents(): void
|
|
{
|
|
$this->assertArrayHasKey(WorkerMessageFailedEvent::class, MessengerFailureSubscriber::getSubscribedEvents());
|
|
}
|
|
|
|
public function testOnMessageFailed(): void
|
|
{
|
|
$message = new \stdClass();
|
|
$envelope = new Envelope($message, [new RedeliveryStamp(1)]);
|
|
$throwable = new \Exception('Worker error');
|
|
$event = new WorkerMessageFailedEvent($envelope, 'async', $throwable);
|
|
|
|
$this->em->method('persist');
|
|
$this->em->method('flush');
|
|
|
|
$this->mailer->method('send');
|
|
|
|
$this->subscriber->onMessageFailed($event);
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
|
|
public function testOnMessageFailedNonSerializable(): void
|
|
{
|
|
// Anonymous class is not serializable
|
|
$message = new class {};
|
|
$envelope = new Envelope($message);
|
|
$event = new WorkerMessageFailedEvent($envelope, 'async', new \Exception('error'));
|
|
|
|
$this->em->method('persist');
|
|
|
|
$this->subscriber->onMessageFailed($event);
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
|
|
public function testOnMessageFailedMailerThrows(): void
|
|
{
|
|
$message = new \stdClass();
|
|
$envelope = new Envelope($message);
|
|
$event = new WorkerMessageFailedEvent($envelope, 'async', new \Exception('error'));
|
|
|
|
$this->em->method('persist');
|
|
$this->mailer->method('send')->willThrowException(new \RuntimeException('mailer error'));
|
|
|
|
// Should not crash, just log error internally (via error_log)
|
|
$this->subscriber->onMessageFailed($event);
|
|
$this->addToAssertionCount(1);
|
|
}
|
|
}
|