Spaces:
No application file
No application file
File size: 4,222 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
<?php
namespace Mautic\EmailBundle\Tests\MonitoredEmail\Processor;
use Mautic\CoreBundle\Translation\Translator;
use Mautic\EmailBundle\Entity\Email;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\Model\EmailStatModel;
use Mautic\EmailBundle\MonitoredEmail\Message;
use Mautic\EmailBundle\MonitoredEmail\Processor\Bounce;
use Mautic\EmailBundle\MonitoredEmail\Search\ContactFinder;
use Mautic\EmailBundle\MonitoredEmail\Search\Result;
use Mautic\EmailBundle\Tests\MonitoredEmail\Transport\TestTransport;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Model\DoNotContact;
use Mautic\LeadBundle\Model\LeadModel;
use Monolog\Logger;
use Symfony\Component\Mailer\Transport\NullTransport;
class BounceTest extends \PHPUnit\Framework\TestCase
{
/**
* @testdox Test that the transport interface processes the message appropriately
*/
public function testProcessorInterfaceProcessesMessage(): void
{
$transport = new TestTransport();
$contactFinder = $this->createMock(ContactFinder::class);
$contactFinder->method('find')
->willReturnCallback(
function ($email, $bounceAddress) {
$stat = new Stat();
$lead = new Lead();
$lead->setEmail($email);
$stat->setLead($lead);
$email = new Email();
$stat->setEmail($email);
$result = new Result();
$result->setStat($stat);
$result->setContacts(
[
$lead,
]
);
return $result;
}
);
$emailStatModel = $this->createMock(EmailStatModel::class);
$emailStatModel->expects($this->once())
->method('saveEntity');
$leadModel = $this->createMock(LeadModel::class);
$translator = $this->createMock(Translator::class);
$logger = $this->createMock(Logger::class);
$doNotContact = $this->createMock(DoNotContact::class);
$bouncer = new Bounce($transport, $contactFinder, $emailStatModel, $leadModel, $translator, $logger, $doNotContact);
$message = new Message();
$this->assertTrue($bouncer->process($message));
}
/**
* @testdox Test that the message is processed appropriately
*/
public function testContactIsFoundFromMessageAndDncRecordAdded(): void
{
$transport = new NullTransport();
$contactFinder = $this->createMock(ContactFinder::class);
$contactFinder->method('find')
->willReturnCallback(
function ($email, $bounceAddress) {
$stat = new Stat();
$lead = new Lead();
$lead->setEmail($email);
$stat->setLead($lead);
$email = new Email();
$stat->setEmail($email);
$result = new Result();
$result->setStat($stat);
$result->setContacts(
[
$lead,
]
);
return $result;
}
);
$emailStatModel = $this->createMock(EmailStatModel::class);
$emailStatModel->expects($this->once())
->method('saveEntity');
$leadModel = $this->createMock(LeadModel::class);
$translator = $this->createMock(Translator::class);
$logger = $this->createMock(Logger::class);
$doNotContact = $this->createMock(DoNotContact::class);
$bouncer = new Bounce($transport, $contactFinder, $emailStatModel, $leadModel, $translator, $logger, $doNotContact);
$message = new Message();
$message->to = ['[email protected]' => null];
$message->dsnReport = <<<'DSN'
Original-Recipient: [email protected]
Final-Recipient: rfc822;[email protected]
Action: failed
Status: 5.4.4
Diagnostic-Code: DNS; Host not found
DSN;
$this->assertTrue($bouncer->process($message));
}
}
|