From 073479f9ddc5f8becaf105cd91db5816b6a54249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Fri, 26 Mar 2021 01:32:01 +0100 Subject: [PATCH] [BUGFIX] Fixed group not matching domain with no parameters (issue: #468). - Added unit-tests --- src/Pecee/SimpleRouter/Route/RouteGroup.php | 9 +++-- tests/Pecee/SimpleRouter/RouterRouteTest.php | 36 ++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Pecee/SimpleRouter/Route/RouteGroup.php b/src/Pecee/SimpleRouter/Route/RouteGroup.php index e3fc8ac..8e724ee 100644 --- a/src/Pecee/SimpleRouter/Route/RouteGroup.php +++ b/src/Pecee/SimpleRouter/Route/RouteGroup.php @@ -26,12 +26,15 @@ class RouteGroup extends Route implements IGroupRoute foreach ($this->domains as $domain) { + // If domain has no parameters but matches + if ($domain === $request->getHost()) { + return true; + } + $parameters = $this->parseParameters($domain, $request->getHost(), '.*'); if ($parameters !== null && \count($parameters) !== 0) { - $this->parameters = $parameters; - return true; } } @@ -56,7 +59,7 @@ class RouteGroup extends Route implements IGroupRoute $prefix = $this->prefix; - foreach($this->getParameters() as $parameter => $value) { + foreach ($this->getParameters() as $parameter => $value) { $prefix = str_ireplace('{' . $parameter . '}', $value, $prefix); } diff --git a/tests/Pecee/SimpleRouter/RouterRouteTest.php b/tests/Pecee/SimpleRouter/RouterRouteTest.php index 28a7b4e..3a3d2c1 100644 --- a/tests/Pecee/SimpleRouter/RouterRouteTest.php +++ b/tests/Pecee/SimpleRouter/RouterRouteTest.php @@ -107,6 +107,42 @@ class RouterRouteTest extends \PHPUnit\Framework\TestCase $this->assertEquals('it, system', $response); } + public function testFixedDomain() + { + $result = false; + TestRouter::request()->setHost('admin.world.com'); + + TestRouter::group(['domain' => 'admin.world.com'], function () use (&$result) { + TestRouter::get('/test', function ($subdomain = null) use (&$result) { + $result = true; + }); + }); + + TestRouter::debug('/test', 'get'); + + $this->assertTrue($result); + } + + public function testFixedNotAllowedDomain() + { + $result = false; + TestRouter::request()->setHost('other.world.com'); + + TestRouter::group(['domain' => 'admin.world.com'], function () use (&$result) { + TestRouter::get('/', function ($subdomain = null) use (&$result) { + $result = true; + }); + }); + + try { + TestRouter::debug('/', 'get'); + } catch(\Exception $e) { + + } + + $this->assertFalse($result); + } + public function testDomainAllowedRoute() { $result = false;