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;
    }
}