Browse Source

Fix tests.

mscherer 6 years ago
parent
commit
9c51936174

+ 3 - 1
config/routes.php

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

+ 12 - 1
src/Controller/ShuntRequestController.php

@@ -28,6 +28,17 @@ class ShuntRequestController extends AppController {
 	public $modelClass = false;
 
 	/**
+	 * @return void
+	 */
+	public function initialize() {
+		parent::initialize();
+
+		if (!isset($this->Flash)) {
+			$this->loadComponent('Flash');
+		}
+	}
+
+	/**
 	 * Switch language as post link.
 	 *
 	 * @param string|null $language
@@ -41,7 +52,7 @@ class ShuntRequestController extends AppController {
 		if (!$language) {
 			$language = Configure::read('Config.defaultLanguage');
 		}
-		if (!$language) {
+		if (!$language && $allowedLanguages) {
 			$keys = array_keys($allowedLanguages);
 			$language = $allowedLanguages[array_shift($keys)];
 		}

+ 64 - 0
tests/TestCase/Controller/ShuntRequestControllerTest.php

@@ -0,0 +1,64 @@
+<?php
+
+namespace Tools\Test\TestCase\Controller;
+
+use Cake\Core\Configure;
+use Cake\TestSuite\IntegrationTestTrait;
+use RuntimeException;
+use Tools\TestSuite\TestCase;
+
+/**
+ * @uses \Tools\Controller\ShuntRequestController
+ */
+class ShuntRequestControllerTest extends TestCase {
+
+	use IntegrationTestTrait;
+
+	/**
+	 * @var array
+	 */
+	public $fixtures = [
+		'core.Sessions',
+	];
+
+	/**
+	 * @return void
+	 */
+	public function setUp() {
+		parent::setUp();
+
+		Configure::write('Config.allowedLanguages', []);
+		Configure::write('Config.defaultLanguage', null);
+	}
+
+	/**
+	 * @return void
+	 */
+	public function testLanguage() {
+		$this->disableErrorHandlerMiddleware();
+
+		Configure::write('Config.defaultLanguage', 'de');
+		Configure::write('Config.allowedLanguages', [
+			'de' => [
+				'locale' => 'de_DE',
+				'name' => 'Deutsch'
+			],
+		]);
+
+		$this->post(['plugin' => 'Tools', 'controller' => 'ShuntRequest', 'action' => 'language']);
+
+		$this->assertRedirect();
+	}
+
+	/**
+	 * @return void
+	 */
+	public function testLanguageError() {
+		$this->disableErrorHandlerMiddleware();
+
+		$this->expectException(RuntimeException::class);
+
+		$this->post(['plugin' => 'Tools', 'controller' => 'ShuntRequest', 'action' => 'language']);
+	}
+
+}

+ 6 - 2
tests/bootstrap.php

@@ -26,8 +26,9 @@ define('CONFIG', dirname(__FILE__) . DS . 'config' . DS);
 
 ini_set('intl.default_locale', 'de-DE');
 
-require ROOT . '/vendor/autoload.php';
+require ROOT . DS . 'vendor/autoload.php';
 require CORE_PATH . 'config/bootstrap.php';
+require ROOT . DS . 'config/bootstrap.php';
 
 Cake\Core\Configure::write('App', [
 		'namespace' => 'App',
@@ -72,7 +73,10 @@ $cache = [
 
 Cake\Cache\Cache::setConfig($cache);
 
-Cake\Core\Plugin::load('Tools', ['path' => ROOT . DS, 'bootstrap' => true]);
+Cake\Core\Plugin::getCollection()->add(new Tools\Plugin());
+
+Cake\Routing\DispatcherFactory::add('Routing');
+Cake\Routing\DispatcherFactory::add('ControllerFactory');
 
 // Ensure default test connection is defined
 if (!getenv('db_class')) {

+ 4 - 5
tests/config/routes.php

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