Spaces:
No application file
No application file
namespace Mautic\CampaignBundle\Tests\Helper; | |
use Doctrine\Common\Collections\ArrayCollection; | |
use Mautic\CampaignBundle\Entity\Campaign; | |
use Mautic\CampaignBundle\Entity\Event; | |
use Mautic\CampaignBundle\Entity\EventRepository; | |
use Mautic\CampaignBundle\Entity\LeadEventLog; | |
use Mautic\CampaignBundle\Entity\LeadEventLogRepository; | |
use Mautic\CampaignBundle\Entity\LeadRepository; | |
use Mautic\CampaignBundle\Executioner\ContactFinder\InactiveContactFinder; | |
use Mautic\CampaignBundle\Executioner\Helper\DecisionHelper; | |
use Mautic\CampaignBundle\Executioner\Helper\InactiveHelper; | |
use Mautic\CampaignBundle\Executioner\Scheduler\EventScheduler; | |
use Mautic\LeadBundle\Entity\Lead; | |
use PHPUnit\Framework\MockObject\MockObject; | |
use PHPUnit\Framework\TestCase; | |
use Psr\Log\LoggerInterface; | |
class InactiveHelperTest extends TestCase | |
{ | |
/** | |
* @var EventScheduler|MockObject | |
*/ | |
private MockObject $scheduler; | |
/** | |
* @var InactiveContactFinder|MockObject | |
*/ | |
private MockObject $inactiveContactFinder; | |
/** | |
* @var LeadEventLogRepository|MockObject | |
*/ | |
private MockObject $eventLogRepository; | |
/** | |
* @var EventRepository|MockObject | |
*/ | |
private MockObject $eventRepository; | |
/** | |
* @var LeadRepository|MockObject | |
*/ | |
private MockObject $leadRepository; | |
/** | |
* @var LoggerInterface|MockObject | |
*/ | |
private MockObject $logger; | |
private InactiveHelper $inactiveHelper; | |
private DecisionHelper $decisionHelper; | |
protected function setUp(): void | |
{ | |
$this->scheduler = $this->createMock(EventScheduler::class); | |
$this->inactiveContactFinder = $this->createMock(InactiveContactFinder::class); | |
$this->eventLogRepository = $this->createMock(LeadEventLogRepository::class); | |
$this->eventRepository = $this->createMock(EventRepository::class); | |
$this->leadRepository = $this->createMock(LeadRepository::class); | |
$this->logger = $this->createMock(LoggerInterface::class); | |
$this->decisionHelper = new DecisionHelper($this->leadRepository); | |
$this->inactiveHelper = new InactiveHelper( | |
$this->scheduler, | |
$this->inactiveContactFinder, | |
$this->eventLogRepository, | |
$this->eventRepository, | |
$this->logger, | |
$this->decisionHelper | |
); | |
} | |
public function testRemoveContactsThatAreNotApplicable(): void | |
{ | |
$lastActiveEventId = 6; | |
// lead not applicable because of parent negative path taken | |
$leadNegative = new Lead(); | |
$leadNegative->setId(9); | |
// lead not applicable because of parent positive path taken | |
$leadNegative2 = new Lead(); | |
$leadNegative2->setId(10); | |
// applicable lead | |
$leadPositive = new Lead(); | |
$leadPositive->setId(12); | |
// lead not applicable because of no parent event log | |
$leadNegative3 = new Lead(); | |
$leadNegative3->setId(11); | |
$this->eventLogRepository->expects($this->once()) | |
->method('getDatesExecuted') | |
->willReturn([ | |
$leadNegative->getId() => \DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-28 21:37:00'), | |
$leadNegative2->getId() => \DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-28 21:37:00'), | |
$leadPositive->getId() => \DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-28 21:37:00'), | |
$leadNegative3->getId() => \DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-28 21:37:00'), | |
]); | |
/** @var LeadEventLog&MockObject */ | |
$log = $this->createMock(LeadEventLog::class); | |
$log->expects($this->exactly(3)) | |
->method('getNonActionPathTaken') | |
->will($this->onConsecutiveCalls(1, 0, 1)); | |
/** @var Campaign&MockObject */ | |
$campaign = $this->createMock(Campaign::class); | |
$campaign->expects($this->any()) | |
->method('getId') | |
->willReturn(2); | |
/** @var Event&MockObject */ | |
$parentEvent = $this->createMock(Event::class); | |
$parentEvent->expects($this->exactly(4)) | |
->method('getLogByContactAndRotation') | |
->will($this->onConsecutiveCalls($log, $log, $log, null)); | |
$event = new Event(); | |
$event->setParent($parentEvent); | |
$event->setDecisionPath('yes'); | |
$event->setCampaign($campaign); | |
$event->setEventType(Event::TYPE_DECISION); | |
$parentEvent->expects($this->any()) | |
->method('getNegativeChildren') | |
->will($this->onConsecutiveCalls(new ArrayCollection(), new ArrayCollection([$event]))); | |
$parentEvent->expects($this->any()) | |
->method('getPositiveChildren') | |
->will($this->onConsecutiveCalls(new ArrayCollection(), new ArrayCollection())); | |
$this->leadRepository->expects($this->exactly(4)) | |
->method('getContactRotations') | |
->willReturn([]); | |
$this->scheduler->expects($this->any()) | |
->method('getExecutionDateTime') | |
->willReturn(\DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-30 12:00:00')); | |
$now = \DateTime::createFromFormat('Y-m-d H:i:s', '2022-05-31 12:00:00'); | |
$contacts = new ArrayCollection([ | |
$leadNegative->getId() => $leadNegative, | |
$leadNegative2->getId() => $leadNegative2, | |
$leadPositive->getId() => $leadPositive, | |
$leadNegative3->getId() => $leadNegative3, | |
]); | |
$this->inactiveHelper->removeContactsThatAreNotApplicable( | |
$now, | |
$contacts, | |
$lastActiveEventId, | |
new ArrayCollection([new Event()]), | |
$event | |
); | |
$this->assertEquals(1, $contacts->count()); | |
} | |
} | |