Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\PointBundle\Tests\Functional; | |
use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
use Mautic\EmailBundle\Entity\Email; | |
use Mautic\PointBundle\Entity\Trigger; | |
use Mautic\PointBundle\Entity\TriggerEvent; | |
use Symfony\Component\DomCrawler\Crawler; | |
use Symfony\Component\DomCrawler\Form; | |
use Symfony\Component\HttpFoundation\Request; | |
class EmailTriggerTest extends MauticMysqlTestCase | |
{ | |
/** | |
* @runInSeparateProcess | |
* | |
* @preserveGlobalState disabled | |
*/ | |
public function testButtonsAreEnabledOnEditSendEmailToUserWhenEmailIsSelected(): void | |
{ | |
$email = new Email(); | |
$email->setName('Some name'); | |
$email->setSubject('Some subject'); | |
$email->setTemplate('Blank'); | |
$email->setCustomHtml('Some html'); | |
$this->em->persist($email); | |
$this->em->flush(); | |
$trigger = $this->createTrigger(); | |
$triggerEvent = $this->createTriggerEvent($trigger); | |
$triggerEvent->setProperties(['useremail' => ['email' => $email->getId()]]); | |
$this->em->flush(); | |
$this->em->detach($trigger); | |
$this->em->detach($triggerEvent); | |
[$crawler, $form] = $this->fetchForm($trigger, $triggerEvent); | |
self::assertEquals($email->getId(), $form->get('pointtriggerevent[properties][useremail][email]')->getValue(), 'Current email should be selected.'); | |
self::assertNull($crawler->selectButton('Preview')->attr('disabled'), 'Preview button should not be disabled.'); | |
self::assertNull($crawler->selectButton('Edit Email')->attr('disabled'), 'Edit Email button should not be disabled.'); | |
self::assertStringContainsString('"origin":"#pointtriggerevent_properties_useremail_email"', $crawler->selectButton('Preview')->attr('onclick'), 'The origin value should be correct.'); | |
} | |
/** | |
* @runInSeparateProcess | |
* | |
* @preserveGlobalState disabled | |
*/ | |
public function testButtonsAreDisabledWhenEmailIsNotSelected(): void | |
{ | |
$trigger = $this->createTrigger(); | |
$triggerEvent = $this->createTriggerEvent($trigger); | |
$this->em->flush(); | |
$this->em->detach($trigger); | |
$this->em->detach($triggerEvent); | |
[$crawler, $form] = $this->fetchForm($trigger, $triggerEvent); | |
self::assertEmpty($form->get('pointtriggerevent[properties][useremail][email]')->getValue(), 'No email should be selected.'); | |
self::assertNotNull($crawler->selectButton('Preview')->attr('disabled'), 'Preview button should be disabled.'); | |
self::assertNotNull($crawler->selectButton('Edit Email')->attr('disabled'), 'Edit Email button should be disabled.'); | |
} | |
/** | |
* @return array{Crawler,Form} | |
*/ | |
private function fetchForm(Trigger $trigger, TriggerEvent $triggerEvent): array | |
{ | |
$this->client->request(Request::METHOD_GET, '/s/points/triggers/edit/'.$trigger->getId()); | |
self::assertTrue($this->client->getResponse()->isSuccessful()); | |
$uri = sprintf('/s/points/triggers/events/edit/%s?triggerId=%s', $triggerEvent->getId(), $trigger->getId()); | |
$this->client->request(Request::METHOD_GET, $uri, [], [], $this->createAjaxHeaders()); | |
self::assertTrue($this->client->getResponse()->isSuccessful()); | |
$responseData = json_decode($this->client->getResponse()->getContent(), true); | |
$crawler = new Crawler($responseData['newContent'], $this->client->getInternalRequest()->getUri()); | |
$form = $crawler->filterXPath('//form[@name="pointtriggerevent"]')->form(); | |
return [$crawler, $form]; | |
} | |
private function createTrigger(): Trigger | |
{ | |
$trigger = new Trigger(); | |
$trigger->setName('Email Trigger'); | |
$this->em->persist($trigger); | |
return $trigger; | |
} | |
private function createTriggerEvent(Trigger $trigger): TriggerEvent | |
{ | |
$triggerEvent = new TriggerEvent(); | |
$triggerEvent->setTrigger($trigger); | |
$triggerEvent->setName('Send email to user'); | |
$triggerEvent->setType('email.send_to_user'); | |
$triggerEvent->setProperties([]); | |
$this->em->persist($triggerEvent); | |
return $triggerEvent; | |
} | |
} | |