Skip to content

Commit 8ca6252

Browse files
authored
Merge pull request #1913 from jim-parry/testing32
More RouteCollection tests for overwriting. Closes #1692
2 parents 8653d65 + 300af6c commit 8ca6252

1 file changed

Lines changed: 105 additions & 0 deletions

File tree

tests/system/Router/RouteCollectionTest.php

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1208,4 +1208,109 @@ public function testRouteToWithoutSubdomainNot()
12081208
$this->assertEquals('/i/sth', $routes->reverseRoute('doc_item', 'sth'));
12091209
}
12101210

1211+
//--------------------------------------------------------------------
1212+
// Tests for router overwritting issue
1213+
// @see https://github.com/codeigniter4/CodeIgniter4/issues/1692
1214+
1215+
public function testRouteOverwritingDifferentSubdomains()
1216+
{
1217+
$_SERVER['REQUEST_METHOD'] = 'GET';
1218+
$_SERVER['HTTP_HOST'] = 'doc.domain.com';
1219+
1220+
$routes = $this->getCollector();
1221+
$router = new Router($routes);
1222+
1223+
$routes->setDefaultNamespace('App\Controllers');
1224+
$routes->setDefaultController('Home');
1225+
$routes->setDefaultMethod('index');
1226+
1227+
$routes->get('/', 'App\Controllers\Site\CDoc::index', ['subdomain' => 'doc', 'as' => 'doc_index']);
1228+
$routes->get('/', 'Home::index', ['subdomain' => 'dev']);
1229+
1230+
$expects = '\App\Controllers\Site\CDoc';
1231+
1232+
$this->assertEquals($expects, $router->handle('/'));
1233+
}
1234+
1235+
public function testRouteOverwritingTwoRules()
1236+
{
1237+
$_SERVER['REQUEST_METHOD'] = 'GET';
1238+
$_SERVER['HTTP_HOST'] = 'doc.domain.com';
1239+
1240+
$routes = $this->getCollector();
1241+
$router = new Router($routes);
1242+
1243+
$routes->setDefaultNamespace('App\Controllers');
1244+
$routes->setDefaultController('Home');
1245+
$routes->setDefaultMethod('index');
1246+
1247+
$routes->get('/', 'App\Controllers\Site\CDoc::index', ['subdomain' => 'doc', 'as' => 'doc_index']);
1248+
$routes->get('/', 'Home::index');
1249+
1250+
// the second rule applies, so overwrites the first
1251+
$expects = '\App\Controllers\Home';
1252+
1253+
$this->assertEquals($expects, $router->handle('/'));
1254+
}
1255+
1256+
public function testRouteOverwritingTwoRulesLastApplies()
1257+
{
1258+
$_SERVER['REQUEST_METHOD'] = 'GET';
1259+
$_SERVER['HTTP_HOST'] = 'doc.domain.com';
1260+
1261+
$routes = $this->getCollector();
1262+
$router = new Router($routes);
1263+
1264+
$routes->setDefaultNamespace('App\Controllers');
1265+
$routes->setDefaultController('Home');
1266+
$routes->setDefaultMethod('index');
1267+
1268+
$routes->get('/', 'Home::index');
1269+
$routes->get('/', 'App\Controllers\Site\CDoc::index', ['subdomain' => 'doc', 'as' => 'doc_index']);
1270+
1271+
$expects = '\App\Controllers\Site\CDoc';
1272+
1273+
$this->assertEquals($expects, $router->handle('/'));
1274+
}
1275+
1276+
public function testRouteOverwritingMatchingSubdomain()
1277+
{
1278+
$_SERVER['REQUEST_METHOD'] = 'GET';
1279+
$_SERVER['HTTP_HOST'] = 'doc.domain.com';
1280+
1281+
$routes = $this->getCollector();
1282+
$router = new Router($routes);
1283+
1284+
$routes->setDefaultNamespace('App\Controllers');
1285+
$routes->setDefaultController('Home');
1286+
$routes->setDefaultMethod('index');
1287+
1288+
$routes->get('/', 'Home::index', ['as' => 'ddd']);
1289+
$routes->get('/', 'App\Controllers\Site\CDoc::index', ['subdomain' => 'doc', 'as' => 'doc_index']);
1290+
1291+
$expects = '\App\Controllers\Site\CDoc';
1292+
1293+
$this->assertEquals($expects, $router->handle('/'));
1294+
}
1295+
1296+
public function testRouteOverwritingMatchingHost()
1297+
{
1298+
$_SERVER['REQUEST_METHOD'] = 'GET';
1299+
$_SERVER['HTTP_HOST'] = 'doc.domain.com';
1300+
1301+
$routes = $this->getCollector();
1302+
$router = new Router($routes);
1303+
1304+
$routes->setDefaultNamespace('App\Controllers');
1305+
$routes->setDefaultController('Home');
1306+
$routes->setDefaultMethod('index');
1307+
1308+
$routes->get('/', 'Home::index', ['as' => 'ddd']);
1309+
$routes->get('/', 'App\Controllers\Site\CDoc::index', ['hostname' => 'doc.domain.com', 'as' => 'doc_index']);
1310+
1311+
$expects = '\App\Controllers\Site\CDoc';
1312+
1313+
$this->assertEquals($expects, $router->handle('/'));
1314+
}
1315+
12111316
}

0 commit comments

Comments
 (0)