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('
%s
', $dynamicContent->getSlotName(), $defaultContent)); $this->em->persist($page); return $page; } private function createLead(): Lead { $lead = new Lead(); $lead->setEmail('test@domain.tld'); $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; } }