diff --git a/src/Service/ContextService.php b/src/Service/ContextService.php index d444509..3c64c04 100644 --- a/src/Service/ContextService.php +++ b/src/Service/ContextService.php @@ -47,17 +47,23 @@ public function getContext(): ContextStruct $host = $request->getHost(); $site = $this->siteRepository->findOneByHost($host); $preview = false; + $admin = false; if ($site->getPreviewHost() === $host) { $preview = true; } + if (0 === strpos($request->getRequestUri(), '/admin/')) { + $admin = true; + } + $this->context = new ContextStruct( $site, $preview, $request->getClientIp(), $request->headers->get('referer', ''), - $request->headers->get('User-Agent', '') + $request->headers->get('User-Agent', ''), + $admin ); return $this->context; diff --git a/src/Subscriber/PreviewPageRedirectSubscriber.php b/src/Subscriber/PreviewPageRedirectSubscriber.php index 43f0780..e038e36 100644 --- a/src/Subscriber/PreviewPageRedirectSubscriber.php +++ b/src/Subscriber/PreviewPageRedirectSubscriber.php @@ -37,7 +37,7 @@ public static function getSubscribedEvents(): array public function onController(FilterControllerEvent $event): void { - if (!$this->contextService->getContext()->isPreview()) { + if (!$this->contextService->getContext()->isPreview() || $this->contextService->getContext()->isAdmin()) { return; } diff --git a/tests/Functional/AbstractFunctionalTestCase.php b/tests/Functional/AbstractFunctionalTestCase.php index 99db6f6..48a76ae 100644 --- a/tests/Functional/AbstractFunctionalTestCase.php +++ b/tests/Functional/AbstractFunctionalTestCase.php @@ -46,6 +46,25 @@ final protected static function createClient(array $options = [], array $server return $client; } + final protected static function createSite(Client $client, string $host, string $previewHost, string $name): Site + { + $entityManager = $client->getContainer()->get('doctrine.orm.entity_manager'); + + $site = new Site(); + $site + ->setHost($host) + ->setPreviewHost($previewHost) + ->setSecure(false) + ->setTest(false) + ->setDefault(true) + ->setName($name); + + $entityManager->persist($site); + $entityManager->flush(); + + return $site; + } + private static function prepareEnvironment(Client $client): void { $entityManager = $client->getContainer()->get('doctrine.orm.entity_manager'); @@ -59,17 +78,7 @@ private static function prepareEnvironment(Client $client): void $entityManager->flush(); $entityManager->clear(); - $site = new Site(); - $site - ->setHost(self::HOST_DEFAULT) - ->setPreviewHost(self::HOST_PREVIEW) - ->setSecure(false) - ->setTest(false) - ->setDefault(true) - ->setName('Testenvironment'); - - $entityManager->persist($site); - $entityManager->flush(); + static::createSite($client, self::HOST_DEFAULT, self::HOST_PREVIEW, 'Testenvironment'); $entityManager->clear(); } } diff --git a/tests/Functional/Admin/LinkAdminTest.php b/tests/Functional/Admin/LinkAdminTest.php index e6a7f90..c1322ce 100644 --- a/tests/Functional/Admin/LinkAdminTest.php +++ b/tests/Functional/Admin/LinkAdminTest.php @@ -12,16 +12,50 @@ namespace App\Tests\Functional\Admin; +use App\Entity\Link; +use App\Helper\NameGenerator; use App\Tests\Functional\AbstractFunctionalTestCase; +use App\Tests\Functional\HelperTrait; use Symfony\Component\HttpFoundation\Response; class LinkAdminTest extends AbstractFunctionalTestCase { + use HelperTrait; + public function testAdminListRenders(): void { $client = static::createClient(); - $client->request('GET', $client->getContainer()->get('router')->generate('admin_app_link_list')); + $client->request('GET', $this->generateUrl($client, 'admin_app_link_list')); $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); } + + /** + * @covers \App\Subscriber\Doctrine\ContextFilterSubscriber::onKernelRequest() + */ + public function testLinkAdminListShowsAllSitesLinks(): void + { + $client = static::createClient(); + $site = static::createSite($client, 'random.test', 'preview.random.test', 'TestEnv2'); + $this->createLink($client); + + $entityManager = $this->getEntityManager($client); + $link = new Link($site); + $link->setUrl('http://example.com/' . NameGenerator::generate(5)); + $link->setName(NameGenerator::generate(5)); + + $entityManager->persist($link); + $entityManager->flush(); + + $crawler = $client->request('GET', $this->generateUrl($client, 'admin_app_link_list')); + $filter = $crawler->filter('td'); + $values = []; + + foreach ($filter as $node) { + $values[] = trim($node->nodeValue); + } + + $this->assertContains('TestEnv2', $values); + $this->assertContains('Testenvironment', $values); + } } diff --git a/tests/Functional/Admin/SiteAdminTest.php b/tests/Functional/Admin/SiteAdminTest.php index 9a64ef2..cbf1303 100644 --- a/tests/Functional/Admin/SiteAdminTest.php +++ b/tests/Functional/Admin/SiteAdminTest.php @@ -13,14 +13,17 @@ namespace App\Tests\Functional\Admin; use App\Tests\Functional\AbstractFunctionalTestCase; +use App\Tests\Functional\HelperTrait; use Symfony\Component\HttpFoundation\Response; class SiteAdminTest extends AbstractFunctionalTestCase { + use HelperTrait; + public function testAdminListRenders(): void { $client = static::createClient(); - $client->request('GET', $client->getContainer()->get('router')->generate('admin_app_site_list')); + $client->request('GET', $this->generateUrl($client, 'admin_app_site_list')); $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); } @@ -28,7 +31,7 @@ public function testAdminListRenders(): void public function testAdminCreateRenders(): void { $client = static::createClient(); - $client->request('GET', $client->getContainer()->get('router')->generate('admin_app_site_create')); + $client->request('GET', $this->generateUrl($client, 'admin_app_site_create')); $this->assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode()); }