feat: domain-based theme-detection
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\EventListener;
|
||||
|
||||
use App\EventListener\DomainThemeListener;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use Symfony\Component\HttpKernel\HttpKernelInterface;
|
||||
|
||||
class DomainThemeListenerTest extends TestCase
|
||||
{
|
||||
private HttpKernelInterface $kernel;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->kernel = $this->createMock(HttpKernelInterface::class);
|
||||
}
|
||||
|
||||
public function testSetsThemeAttributeForMatchingDomain(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'sbw-reisen' => 'sbw',
|
||||
'ser-reisen' => 'ser',
|
||||
]);
|
||||
|
||||
$request = Request::create('https://www.sbw-reisen.de/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('sbw', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testSetsDefaultThemeForUnknownDomain(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'sbw-reisen' => 'sbw',
|
||||
]);
|
||||
|
||||
$request = Request::create('https://www.ep-reisen.de/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('base', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testMatchesPartialDomain(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'ser-reisen' => 'ser',
|
||||
]);
|
||||
|
||||
$request = Request::create('https://portal.ser-reisen.de/bookings');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('ser', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testIgnoresSubRequests(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'sbw-reisen' => 'sbw',
|
||||
]);
|
||||
|
||||
$request = Request::create('https://www.sbw-reisen.de/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::SUB_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertFalse($request->attributes->has(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testFirstMatchWins(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'reisen' => 'generic',
|
||||
'sbw-reisen' => 'sbw',
|
||||
]);
|
||||
|
||||
$request = Request::create('https://www.sbw-reisen.de/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('generic', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testEmptyMapReturnsDefaultTheme(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([]);
|
||||
|
||||
$request = Request::create('https://www.sbw-reisen.de/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('base', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
|
||||
public function testMatchesLocalhostForDevelopment(): void
|
||||
{
|
||||
$listener = new DomainThemeListener([
|
||||
'localhost' => 'sbw',
|
||||
]);
|
||||
|
||||
$request = Request::create('http://localhost/bookings/create');
|
||||
$event = new RequestEvent($this->kernel, $request, HttpKernelInterface::MAIN_REQUEST);
|
||||
|
||||
$listener($event);
|
||||
|
||||
$this->assertSame('sbw', $request->attributes->get(DomainThemeListener::THEME_ATTRIBUTE));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user