Spaces:
No application file
No application file
File size: 4,224 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 |
<?php
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;
}
}
|