Spaces:
No application file
No application file
namespace Mautic\MessengerBundle\Tests\MessageHandler; | |
use Doctrine\DBAL\Exception\RetryableException; | |
use Mautic\CoreBundle\Helper\CoreParametersHelper; | |
use Mautic\EmailBundle\Model\EmailModel; | |
use Mautic\MessengerBundle\Message\EmailHitNotification; | |
use Mautic\MessengerBundle\MessageHandler\EmailHitNotificationHandler; | |
use PHPUnit\Framework\MockObject\MockObject; | |
use PHPUnit\Framework\TestCase; | |
use Symfony\Component\HttpFoundation\Request; | |
use Symfony\Component\Messenger\Exception\RecoverableMessageHandlingException; | |
class EmailHitNotificationHandlerTest extends TestCase | |
{ | |
public function testInvoke(): void | |
{ | |
$hitId = sha1((string) random_int(0, 1_000_000)); | |
$request = new Request(); | |
$request->query->set('testMe', 'I am here'); | |
/** @var MockObject|EmailModel $emailModelMock */ | |
$emailModelMock = $this->createMock(EmailModel::class); | |
$emailModelMock | |
->expects($this->exactly(1)) | |
->method('hitEmail') | |
->with($hitId, $request); | |
/** @var MockObject&CoreParametersHelper $parametersHelper */ | |
$parametersHelper = $this->createMock(CoreParametersHelper::class); | |
$parametersHelper->method('get') | |
->willReturn('sync://'); | |
$message = new EmailHitNotification($hitId, $request); | |
$handler = new EmailHitNotificationHandler($emailModelMock, $parametersHelper); | |
$handler->__invoke($message); | |
} | |
public function testInvokeThrowsRecoverableExceptionOnDBLock(): void | |
{ | |
$hitId = sha1((string) random_int(0, 1_000_000)); | |
$request = new Request(); | |
$request->query->set('testMe', 'I am here'); | |
/** @var MockObject|EmailModel $emailModelMock */ | |
$emailModelMock = $this->createMock(EmailModel::class); | |
$emailModelMock | |
->expects($this->exactly(1)) | |
->method('hitEmail') | |
->willThrowException($this->createMock(RetryableException::class)); | |
/** @var MockObject&CoreParametersHelper $parametersHelper */ | |
$parametersHelper = $this->createMock(CoreParametersHelper::class); | |
$parametersHelper->method('get') | |
->willReturn('sync://'); | |
$message = new EmailHitNotification($hitId, $request); | |
$handler = new EmailHitNotificationHandler($emailModelMock, $parametersHelper); | |
$this->expectException(RecoverableMessageHandlingException::class); | |
$handler->__invoke($message); | |
} | |
public function testInvokeLogsUnrecoverableException(): void | |
{ | |
$hitId = sha1((string) random_int(0, 1_000_000)); | |
$request = new Request(); | |
$request->query->set('testMe', 'I am here'); | |
/** @var MockObject|EmailModel $emailModelMock */ | |
$emailModelMock = $this->createMock(EmailModel::class); | |
$emailModelMock | |
->expects($this->exactly(1)) | |
->method('hitEmail') | |
->willThrowException(new \InvalidArgumentException('got my argument?')); | |
/** @var MockObject&CoreParametersHelper $parametersHelper */ | |
$parametersHelper = $this->createMock(CoreParametersHelper::class); | |
$parametersHelper->method('get') | |
->willReturn('sync://'); | |
$message = new EmailHitNotification($hitId, $request); | |
$handler = new EmailHitNotificationHandler($emailModelMock, $parametersHelper); | |
$this->expectException(\InvalidArgumentException::class); | |
$this->expectErrorMessage('got my argument?'); | |
$handler->__invoke($message); | |
} | |
} | |