Files
crm_ecosplay/tests/EventSubscriber/MessengerFailureSubscriberTest.php
Serreau Jovann a4eb9f6e2d fix: supprimer toutes les PHPUnit notices (40 → 0) et deprecations (9 → 0)
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>
2026-04-02 23:53:03 +02:00

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);
}
}