Spaces:
No application file
No application file
File size: 3,321 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 |
<?php
declare(strict_types=1);
namespace Mautic\PageBundle\Tests\Controller;
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use Mautic\DynamicContentBundle\Entity\DynamicContent;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\PageBundle\Entity\Page;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class PreviewFunctionalTest extends MauticMysqlTestCase
{
public function testPreviewPage(): void
{
$lead = $this->createLead();
$dynamicContent = $this->createDynamicContent($lead);
$defaultContent = 'Default web content';
$page = $this->createPage($dynamicContent, $defaultContent);
$this->em->flush();
$url = "/page/preview/{$page->getId()}";
// Anonymous visitor is not allowed to access preview
$this->client->request(Request::METHOD_GET, $url);
self::assertSame(Response::HTTP_FORBIDDEN, $this->client->getResponse()->getStatusCode());
$this->loginUser('admin');
// Admin user is allowed to access preview
$this->assertPageContent($url, $defaultContent);
// Check DWC replacement for the given lead
$this->assertPageContent("{$url}?contactId={$lead->getId()}", $dynamicContent->getContent());
// Check there is no DWC replacement for a non-existent lead
$this->assertPageContent("{$url}?contactId=987", $defaultContent);
}
private function assertPageContent(string $url, string $expectedContent): void
{
$crawler = $this->client->request(Request::METHOD_GET, $url);
self::assertSame(Response::HTTP_OK, $this->client->getResponse()->getStatusCode(), $this->client->getResponse()->getContent());
self::assertSame($expectedContent, $crawler->text());
}
private function createPage(DynamicContent $dynamicContent, string $defaultContent): Page
{
$page = new Page();
$page->setIsPublished(true);
$page->setDateAdded(new \DateTime());
$page->setTitle('Preview settings test - main page');
$page->setAlias('page-main');
$page->setTemplate('Blank');
$page->setCustomHtml(sprintf('<div data-slot="dwc" data-param-slot-name="%s"><span>%s</span></div>', $dynamicContent->getSlotName(), $defaultContent));
$this->em->persist($page);
return $page;
}
private function createLead(): Lead
{
$lead = new Lead();
$lead->setEmail('[email protected]');
$this->em->persist($lead);
return $lead;
}
private function createDynamicContent(Lead $lead): DynamicContent
{
$dynamicContent = new DynamicContent();
$dynamicContent->setName('Test DWC');
$dynamicContent->setIsCampaignBased(false);
$dynamicContent->setContent('DWC content');
$dynamicContent->setSlotName('test');
$dynamicContent->setFilters([
[
'glue' => 'and',
'field' => 'email',
'object' => 'lead',
'type' => 'email',
'filter' => $lead->getEmail(),
'display' => null,
'operator' => '=',
],
]);
$this->em->persist($dynamicContent);
return $dynamicContent;
}
}
|