mscherer 6 年 前
コミット
aea983f589

+ 4 - 3
config/routes.php

@@ -1,7 +1,8 @@
 <?php
+
+use Cake\Routing\RouteBuilder;
 use Cake\Routing\Router;
-use Cake\Routing\Route\DashedRoute;
 
-Router::plugin('Tools', function ($routes) {
-	$routes->fallbacks(DashedRoute::class);
+Router::plugin('Tools', function (RouteBuilder $routes) {
+	$routes->fallbacks();
 });

+ 2 - 1
src/Controller/Component/CommonComponent.php

@@ -4,6 +4,7 @@ namespace Tools\Controller\Component;
 
 use Cake\Core\Configure;
 use Cake\Event\Event;
+use Cake\Http\ServerRequest;
 use Cake\Routing\Router;
 use Shim\Controller\Component\Component;
 use Tools\Utility\Utility;
@@ -209,7 +210,7 @@ class CommonComponent extends Component {
 
 		if (!empty($referer)) {
 			//FIXME
-			$referer = Router::parse($referer);
+			$referer = Router::parseRequest(new ServerRequest(['url' => $referer, 'environment' => ['REQUEST_METHOD' => 'GET']]));
 		}
 
 		if ($conditionalAutoRedirect && !empty($this->Controller->autoRedirectActions) && is_array($referer) && !empty($referer['action'])) {

+ 1 - 1
src/View/Helper/QrCodeHelper.php

@@ -229,7 +229,7 @@ class QrCodeHelper extends Helper {
 				case 'url':
 					$val = (array)$val;
 					foreach ($val as $v) {
-						$res[] = 'URL:' . $this->Url->build($v, true);
+						$res[] = 'URL:' . $this->Url->build($v, ['full' => true]);
 					}
 					break;
 			}

+ 10 - 7
tests/TestCase/Controller/Component/CommonComponentTest.php

@@ -6,6 +6,7 @@ use App\Controller\CommonComponentTestController;
 use Cake\Core\Configure;
 use Cake\Event\Event;
 use Cake\Http\ServerRequest;
+use Cake\Routing\Router;
 use Tools\Controller\Component\CommonComponent;
 use Tools\TestSuite\TestCase;
 
@@ -31,7 +32,11 @@ class CommonComponentTest extends TestCase {
 
 		Configure::write('App.fullBaseUrl', 'http://localhost');
 
-		$this->request = new ServerRequest(['url' => '/my_controller/foo']);
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
+		$this->request = new ServerRequest(['url' => '/my-controller/foo']);
 		$this->request = $this->request->withParam('controller', 'MyController')
 			->withParam('action', 'foo');
 		$this->Controller = new CommonComponentTestController($this->request);
@@ -67,8 +72,6 @@ class CommonComponentTest extends TestCase {
 	}
 
 	/**
-	 * CommonComponentTest::testcurrentUrl()
-	 *
 	 * @return void
 	 */
 	public function testCurrentUrl() {
@@ -123,7 +126,7 @@ class CommonComponentTest extends TestCase {
 	 * @return void
 	 */
 	public function testAutoRedirectReferer() {
-		$url = 'http://localhost/my_controller/some-referer-action';
+		$url = 'http://localhost/my-controller/some-referer-action';
 		$this->Controller->setRequest($this->Controller->getRequest()->withEnv('HTTP_REFERER', $url));
 
 		$this->Controller->Common->autoRedirect(['action' => 'foo'], true);
@@ -146,7 +149,7 @@ class CommonComponentTest extends TestCase {
 	 * @return void
 	 */
 	public function testAutoPostRedirectReferer() {
-		$url = 'http://localhost/my_controller/allowed';
+		$url = 'http://localhost/my-controller/allowed';
 		$this->Controller->setRequest($this->Controller->getRequest()->withEnv('HTTP_REFERER', $url));
 
 		$this->Controller->Common->autoPostRedirect(['controller' => 'MyController', 'action' => 'foo'], true);
@@ -167,11 +170,11 @@ class CommonComponentTest extends TestCase {
 	 * @return void
 	 */
 	public function testAutoPostRedirectRefererNotWhitelisted() {
-		$this->Controller->setRequest($this->Controller->getRequest()->withEnv('HTTP_REFERER', 'http://localhost/my_controller/wrong'));
+		$this->Controller->setRequest($this->Controller->getRequest()->withEnv('HTTP_REFERER', 'http://localhost/my-controller/wrong'));
 
 		$is = $this->Controller->Common->autoPostRedirect(['controller' => 'MyController', 'action' => 'foo'], true);
 		$is = $this->Controller->getResponse()->getHeaderLine('Location');
-		$this->assertSame('http://localhost/my_controller/foo', $is);
+		$this->assertSame('http://localhost/my-controller/foo', $is);
 		$this->assertSame(302, $this->Controller->getResponse()->getStatusCode());
 	}
 

+ 7 - 2
tests/TestCase/Controller/Component/MobileComponentTest.php

@@ -6,6 +6,7 @@ use App\Controller\MobileComponentTestController;
 use Cake\Core\Configure;
 use Cake\Event\Event;
 use Cake\Http\ServerRequest;
+use Cake\Routing\Router;
 use Detection\MobileDetect;
 use Tools\TestSuite\TestCase;
 
@@ -48,6 +49,10 @@ class MobileComponentTest extends TestCase {
 			return $detector->isTablet();
 		});
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		$this->event = new Event('Controller.beforeFilter');
 		$this->Controller = new MobileComponentTestController(new ServerRequest());
 
@@ -102,7 +107,7 @@ class MobileComponentTest extends TestCase {
 
 		$configure = Configure::read('User');
 		$this->assertSame(['isMobile' => 0, 'setMobile' => 1], $configure);
-		$this->assertEquals(['desktopUrl' => '/?mobile=0'], $this->Controller->viewVars);
+		$this->assertEquals(['desktopUrl' => '/?mobile=0'], $this->Controller->viewBuilder()->getVars());
 	}
 
 	/**
@@ -118,7 +123,7 @@ class MobileComponentTest extends TestCase {
 		$this->Controller->Mobile->setMobile();
 		$configure = Configure::read('User');
 		$this->assertSame(['isMobile' => 0, 'setMobile' => 0], $configure);
-		$this->assertEquals(['mobileUrl' => '/?mobile=1'], $this->Controller->viewVars);
+		$this->assertEquals(['mobileUrl' => '/?mobile=1'], $this->Controller->viewBuilder()->getVars());
 	}
 
 	/**

+ 4 - 0
tests/TestCase/Controller/Component/UrlComponentTest.php

@@ -33,6 +33,10 @@ class UrlComponentTest extends TestCase {
 		$this->event = new Event('Controller.beforeFilter');
 		$this->Controller = new UrlComponentTestController(new ServerRequest());
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		Configure::write('App.fullBaseUrl', 'http://localhost');
 	}
 

+ 2 - 1
tests/TestCase/Utility/TimeTest.php

@@ -3,6 +3,7 @@
 namespace Tools\Test\TestCase\Utility;
 
 use Cake\Core\Configure;
+use Cake\Error\Debugger;
 use DateTime;
 use Tools\TestSuite\TestCase;
 use Tools\Utility\Time;
@@ -210,7 +211,7 @@ class TimeTest extends TestCase {
 	public function testLocalDate() {
 		//$this->skipIf(PHP_SAPI === 'cli', 'for now');
 		$res = setlocale(LC_TIME, ['de_DE.UTF-8', 'deu_deu']);
-		$this->assertTrue(!empty($res));
+		$this->assertTrue(!empty($res), 'Result: ' . Debugger::exportVar($res, true));
 
 		$values = [
 			['2009-12-01 00:00:00', FORMAT_LOCAL_YMD, '01.12.2009'],

+ 3 - 3
tests/TestCase/Utility/UtilityTest.php

@@ -228,6 +228,8 @@ class UtilityTest extends TestCase {
 	 * @return void
 	 */
 	public function testGetReferer() {
+		Configure::write('App.fullBaseUrl', 'http://foo.bar');
+
 		$res = Utility::getReferer();
 		$this->assertSame(env('HTTP_REFERER'), $res);
 
@@ -237,9 +239,7 @@ class UtilityTest extends TestCase {
 		$_SERVER['HTTP_REFERER'] = '/foo/bar';
 		$res = Utility::getReferer(true);
 		$base = Configure::read('App.fullBaseUrl');
-		if (!$base) {
-			$base = ''; //'http://localhost';
-		}
+
 		$this->assertSame($base . env('HTTP_REFERER'), $res);
 	}
 

+ 5 - 1
tests/TestCase/View/Helper/CommonHelperTest.php

@@ -4,6 +4,7 @@ namespace Tools\Test\TestCase\View\Helper;
 
 use Cake\Routing\Router;
 use Cake\View\View;
+use TestApp\Routing\Route\DashedRoute;
 use Tools\TestSuite\TestCase;
 use Tools\View\Helper\CommonHelper;
 
@@ -24,6 +25,9 @@ class CommonHelperTest extends TestCase {
 		parent::setUp();
 
 		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		$View = new View(null);
 		$this->Common = new CommonHelper($View);
 	}
@@ -115,7 +119,7 @@ class CommonHelperTest extends TestCase {
 		$this->assertEquals('<link href="' . $this->Common->Url->build('/some/url', ['full' => true]) . '" rel="alternate" hreflang="de"/>', trim($is));
 
 		$is = $this->Common->metaAlternate(['controller' => 'some', 'action' => 'url'], ['de', 'de-ch'], true);
-		$this->assertEquals('<link href="' . $this->Common->Url->build('/some/url', ['full' => true]) . '" rel="alternate" hreflang="de"/>' . PHP_EOL . '<link href="' . $this->Common->Url->build('/some/url', true) . '" rel="alternate" hreflang="de-ch"/>', trim($is));
+		$this->assertEquals('<link href="' . $this->Common->Url->build('/some/url', ['full' => true]) . '" rel="alternate" hreflang="de"/>' . PHP_EOL . '<link href="' . $this->Common->Url->build('/some/url', ['full' => true]) . '" rel="alternate" hreflang="de-ch"/>', trim($is));
 
 		$is = $this->Common->metaAlternate(['controller' => 'some', 'action' => 'url'], ['de' => ['ch', 'at'], 'en' => ['gb', 'us']], true);
 		$this->assertEquals('<link href="' . $this->Common->Url->build('/some/url', ['full' => true]) . '" rel="alternate" hreflang="de-ch"/>' . PHP_EOL .

+ 2 - 0
tests/TestCase/View/Helper/FormHelperTest.php

@@ -23,6 +23,8 @@ class FormHelperTest extends TestCase {
 	public function setUp(): void {
 		parent::setUp();
 
+		Configure::write('App.fullBaseUrl', 'http://foo.bar');
+
 		Configure::delete('FormConfig');
 
 		$this->View = new View(null);

+ 5 - 0
tests/TestCase/View/Helper/FormatHelperTest.php

@@ -3,6 +3,7 @@
 namespace Tools\Test\TestCase\View\Helper;
 
 use Cake\Core\Configure;
+use Cake\Routing\Router;
 use Cake\View\View;
 use Tools\TestSuite\TestCase;
 use Tools\Utility\Text;
@@ -31,6 +32,10 @@ class FormatHelperTest extends TestCase {
 	public function setUp(): void {
 		parent::setUp();
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		Configure::write('App.imageBaseUrl', 'img/');
 
 		$this->Format = new FormatHelper(new View(null));

+ 4 - 0
tests/TestCase/View/Helper/HtmlHelperTest.php

@@ -26,6 +26,10 @@ class HtmlHelperTest extends TestCase {
 	public function setUp(): void {
 		parent::setUp();
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		$this->Html = new HtmlHelper(new View(null));
 		$this->Html->getView()->setRequest(new ServerRequest(['webroot' => '']));
 	}

+ 5 - 0
tests/TestCase/View/Helper/QrCodeHelperTest.php

@@ -2,6 +2,7 @@
 
 namespace Tools\Test\TestCase\View\Helper;
 
+use Cake\Routing\Router;
 use Cake\View\View;
 use Tools\TestSuite\TestCase;
 use Tools\View\Helper\QrCodeHelper;
@@ -27,6 +28,10 @@ class QrCodeHelperTest extends TestCase {
 	public function setUp(): void {
 		parent::setUp();
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		$this->testEmail = 'foo@bar.local'; // For testing normal behavior
 
 		$this->QrCode = new QrCodeHelper(new View(null));

+ 4 - 0
tests/TestCase/View/Helper/UrlHelperTest.php

@@ -25,6 +25,10 @@ class UrlHelperTest extends TestCase {
 	public function setUp(): void {
 		parent::setUp();
 
+		Router::reload();
+		Router::connect('/:controller', ['action' => 'index']);
+		Router::connect('/:controller/:action/*');
+
 		$this->Url = new UrlHelper(new View(null));
 		$this->Url->getView()->setRequest(new ServerRequest(['webroot' => '']));
 	}

+ 14 - 9
tests/bootstrap.php

@@ -1,6 +1,8 @@
 <?php
 
 use Cake\Datasource\ConnectionManager;
+use Cake\Routing\Route\DashedRoute;
+use Cake\Routing\Router;
 
 if (!defined('DS')) {
 	define('DS', DIRECTORY_SEPARATOR);
@@ -22,14 +24,15 @@ define('APP_DIR', 'src');
 define('CAKE_CORE_INCLUDE_PATH', ROOT . '/vendor/cakephp/cakephp');
 define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
 define('CAKE', CORE_PATH . APP_DIR . DS);
+define('TESTS', ROOT . DS . 'tests' . DS);
 
 define('WWW_ROOT', ROOT . DS . 'webroot' . DS);
 define('CONFIG', dirname(__FILE__) . DS . 'config' . DS);
 
 ini_set('intl.default_locale', 'de-DE');
 
-require ROOT . '/vendor/autoload.php';
-require CORE_PATH . 'config/bootstrap.php';
+require_once 'vendor/cakephp/cakephp/src/basics.php';
+require_once 'vendor/autoload.php';
 
 Cake\Core\Configure::write('App', [
 		'namespace' => 'App',
@@ -82,12 +85,17 @@ Cake\Utility\Security::setSalt('foo');
 // Why is this required?
 require ROOT . DS . 'config' . DS . 'bootstrap.php';
 
+Router::defaultRouteClass(DashedRoute::class);
+
+// Why has this no effect?
+Router::reload();
+require TESTS . 'config' . DS . 'routes.php';
+
 //Cake\Core\Plugin::load('Tools', ['path' => ROOT . DS, 'bootstrap' => true]);
-(new Cake\Core\PluginCollection)->add(new Tools\Plugin());
+Cake\Core\Plugin::getCollection()->add(new Tools\Plugin());
 
 if (getenv('db_dsn')) {
 	ConnectionManager::setConfig('test', [
-		'className' => 'Cake\Database\Connection',
 		'url' => getenv('db_dsn'),
 		'timezone' => 'UTC',
 		'quoteIdentifiers' => true,
@@ -99,17 +107,14 @@ if (getenv('db_dsn')) {
 
 // Ensure default test connection is defined
 if (!getenv('db_class')) {
-	putenv('db_class=Cake\Database\Driver\Sqlite');
-	putenv('db_dsn=sqlite::memory:');
+	putenv('db_dsn=sqlite:///:memory:');
 
-	//putenv('db_class=Cake\Database\Driver\Postgres');
 	//putenv('db_dsn=postgres://postgres@127.0.0.1/test');
 }
 
 Cake\Datasource\ConnectionManager::setConfig('test', [
-	'className' => 'Cake\Database\Connection',
+	'url' => getenv('db_dsn') ?: null,
 	'driver' => getenv('db_class') ?: null,
-	'dsn' => getenv('db_dsn') ?: null,
 	'database' => getenv('db_database') ?: null,
 	'username' => getenv('db_username') ?: null,
 	'password' => getenv('db_password') ?: null,

+ 6 - 3
tests/config/routes.php

@@ -2,9 +2,12 @@
 
 namespace Tools\Test\App\Config;
 
+use Cake\Routing\RouteBuilder;
 use Cake\Routing\Router;
 
-Router::scope('/', function($routes) {
-	$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'InflectedRoute']);
-	$routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);
+Router::scope('/', function(RouteBuilder $routes) {
+	$routes->fallbacks();
+});
+Router::plugin('Tools', function (RouteBuilder $routes) {
+	$routes->fallbacks();
 });