Spaces:
No application file
No application file
File size: 4,205 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 |
<?php
namespace Mautic\CampaignBundle\Tests\Executioner\Logger;
use Doctrine\Common\Collections\ArrayCollection;
use Mautic\CampaignBundle\Entity\Campaign;
use Mautic\CampaignBundle\Entity\Event;
use Mautic\CampaignBundle\Entity\LeadEventLog;
use Mautic\CampaignBundle\Entity\LeadEventLogRepository;
use Mautic\CampaignBundle\Entity\LeadRepository;
use Mautic\CampaignBundle\Executioner\Logger\EventLogger;
use Mautic\CampaignBundle\Model\SummaryModel;
use Mautic\CoreBundle\Entity\IpAddress;
use Mautic\CoreBundle\Helper\IpLookupHelper;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Tracker\ContactTracker;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
class EventLoggerTest extends TestCase
{
/**
* @var LeadRepository|MockObject
*/
private MockObject $ipLookupHelper;
/**
* @var ContactTracker|MockObject
*/
private MockObject $contactTracker;
/**
* @var LeadEventLogRepository|MockObject
*/
private MockObject $leadEventLogRepository;
/**
* @var LeadRepository|MockObject
*/
private MockObject $leadRepository;
/**
* @var SummaryModel|MockObject
*/
private MockObject $summaryModel;
protected function setUp(): void
{
$this->ipLookupHelper = $this->createMock(IpLookupHelper::class);
$this->contactTracker = $this->createMock(ContactTracker::class);
$this->leadEventLogRepository = $this->createMock(LeadEventLogRepository::class);
$this->leadRepository = $this->createMock(LeadRepository::class);
$this->summaryModel = $this->createMock(SummaryModel::class);
}
public function testAllLogsAreReturnedWithFinalPersist(): void
{
$logCollection = new ArrayCollection();
while ($logCollection->count() < 60) {
$log = $this->createMock(LeadEventLog::class);
$log->method('getId')
->willReturn($logCollection->count() + 1);
$logCollection->add($log);
}
$this->leadEventLogRepository->expects($this->exactly(3))
->method('saveEntities');
$logger = $this->getLogger();
foreach ($logCollection as $log) {
$logger->queueToPersist($log);
}
$persistedLogs = $logger->persistQueuedLogs();
$this->assertEquals($persistedLogs->count(), $logCollection->count());
$this->assertEquals($logCollection->getValues(), $persistedLogs->getValues());
}
public function testBuildLogEntry(): void
{
$this->ipLookupHelper->method('getIpAddress')->willReturn(new IpAddress());
$this->leadRepository->expects($this->exactly(3))
->method('getContactRotations')
->willReturnOnConsecutiveCalls(
[1 => ['rotation' => 1, 'manually_removed' => 0]],
[1 => ['rotation' => 2, 'manually_removed' => 0]],
[1 => ['rotation' => 1, 'manually_removed' => 0]],
);
$campaign = $this->createMock(Campaign::class);
$campaign->method('getId')->willReturnOnConsecutiveCalls([1, 1, 2]);
$event = $this->createMock(Event::class);
$event->method('getCampaign')->willReturn($campaign);
$contact = $this->createMock(Lead::class);
$contact->method('getId')->willReturn(1);
// rotation for campaign 1 and contact 1
$log = $this->getLogger()->buildLogEntry($event, $contact, false);
$this->assertEquals(1, $log->getRotation());
// rotation for campaign 1 and contact 1
$log = $this->getLogger()->buildLogEntry($event, $contact, false);
$this->assertEquals(2, $log->getRotation());
// rotation for campaign 2 and contact 1
$log = $this->getLogger()->buildLogEntry($event, $contact, false);
$this->assertEquals(1, $log->getRotation());
}
private function getLogger(): EventLogger
{
return new EventLogger(
$this->ipLookupHelper,
$this->contactTracker,
$this->leadEventLogRepository,
$this->leadRepository,
$this->summaryModel
);
}
}
|