Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\CampaignBundle\Tests\Command\Api; | |
use Mautic\CampaignBundle\Entity\Campaign; | |
use Mautic\CampaignBundle\Entity\Event; | |
use Mautic\CampaignBundle\Entity\Lead as CampaignMember; | |
use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
use Mautic\LeadBundle\Entity\Lead; | |
use PHPUnit\Framework\Assert; | |
final class EventLogApiControllerTest extends MauticMysqlTestCase | |
{ | |
public function testBatchEditEventsPut(): void | |
{ | |
$contact1 = new Lead(); | |
$contact1->setEmail('[email protected]'); | |
$contact2 = new Lead(); | |
$contact2->setEmail('[email protected]'); | |
$contact3 = new Lead(); | |
$contact3->setEmail('[email protected]'); | |
$campaign = new Campaign(); | |
$campaign->setName('Test Campaign'); | |
$campaignMember1 = new CampaignMember(); | |
$campaignMember1->setLead($contact1); | |
$campaignMember1->setCampaign($campaign); | |
$campaignMember1->setManuallyAdded(true); | |
$campaignMember1->setDateAdded(new \DateTime()); | |
$campaignMember2 = new CampaignMember(); | |
$campaignMember2->setLead($contact2); | |
$campaignMember2->setCampaign($campaign); | |
$campaignMember2->setManuallyAdded(true); | |
$campaignMember2->setDateAdded(new \DateTime()); | |
$event1 = new Event(); | |
$event1->setCampaign($campaign); | |
$event1->setType('lead.changepoints'); | |
$event1->setEventType('action'); | |
$event1->setName('Test Event 1'); | |
$event2 = new Event(); | |
$event2->setCampaign($campaign); | |
$event2->setType('lead.changepoints'); | |
$event2->setEventType('action'); | |
$event2->setName('Test Event 2'); | |
$event3 = new Event(); | |
$event3->setCampaign($campaign); | |
$event3->setType('asset.download'); | |
$event3->setEventType('decision'); | |
$event3->setName('Test Event 3'); | |
$campaign->addEvent(0, $event1); | |
$campaign->addEvent(1, $event2); | |
$campaign->addEvent(1, $event3); | |
$this->em->persist($contact1); | |
$this->em->persist($contact2); | |
$this->em->persist($contact3); | |
$this->em->persist($event1); | |
$this->em->persist($event2); | |
$this->em->persist($event3); | |
$this->em->persist($campaign); | |
$this->em->persist($campaignMember1); | |
$this->em->persist($campaignMember2); | |
$this->em->flush(); | |
$this->em->detach($contact1); | |
$this->em->detach($contact2); | |
$this->em->detach($contact3); | |
$this->em->detach($event1); | |
$this->em->detach($event2); | |
$this->em->detach($event3); | |
$this->em->detach($campaign); | |
$this->em->detach($campaignMember1); | |
$this->em->detach($campaignMember2); | |
$payload = [ | |
// This will fail because it already has dateTriggered. | |
[ | |
'contactId' => $contact1->getId(), | |
'eventId' => $event1->getId(), | |
'dateTriggered' => '2016-01-10 00:00:00', | |
], | |
[ | |
'contactId' => $contact2->getId(), | |
'eventId' => $event1->getId(), | |
'triggerDate' => '2017-01-10 00:00:00', | |
], | |
[ | |
'contactId' => $contact1->getId(), | |
'eventId' => $event2->getId(), | |
'triggerDate' => '2016-01-11 00:00:00', | |
], | |
[ | |
'contactId' => $contact2->getId(), | |
'eventId' => $event2->getId(), | |
'triggerDate' => '2016-01-11 00:00:00', | |
], | |
// This will fail because this contact isn't a campaign member. | |
[ | |
'contactId' => $contact3->getId(), | |
'eventId' => $event2->getId(), | |
'triggerDate' => '2017-01-10 00:00:00', | |
], | |
// This will fail because decision cannot be scheduled. | |
[ | |
'contactId' => $contact1->getId(), | |
'eventId' => $event3->getId(), | |
'triggerDate' => '2016-01-11 00:00:00', | |
], | |
]; | |
$this->client->request('PUT', '/api/campaigns/events/batch/edit', $payload); | |
$clientResponse = $this->client->getResponse(); | |
$response = json_decode($clientResponse->getContent(), true); | |
Assert::assertCount(1, $response['events'][$event1->getId()]['contactLog']); | |
Assert::assertCount(2, $response['events'][$event2->getId()]['contactLog']); | |
Assert::assertCount(0, $response['events'][$event3->getId()]['contactLog']); | |
$errorMessages = array_map( | |
fn (array $error) => $error['message'], | |
$response['errors'] | |
); | |
Assert::assertContains("The event {$event1->getId()} in the campaign {$campaign->getId()} has already been executed at 2016-01-10T00:00:00+00:00 for the contact {$contact2->getId()}.", $errorMessages); | |
Assert::assertContains("The contact {$contact3->getId()} is not in the campaign {$campaign->getId()}.", $errorMessages); | |
Assert::assertContains("A decision type event cannot be scheduled. Event: {$event3->getId()}, campaign: {$campaign->getId()}, contact: {$contact1->getId()}.", $errorMessages); | |
} | |
} | |