testing brought in
This commit is contained in:
118
tests/TestCase/View/Helper/ActiveLinkHelperTest.php
Normal file
118
tests/TestCase/View/Helper/ActiveLinkHelperTest.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace CheeseCake\Test\TestCase\View\Helper;
|
||||
|
||||
use Cake\Http\ServerRequest;
|
||||
use Cake\Routing\Route\DashedRoute;
|
||||
use Cake\Routing\RouteBuilder;
|
||||
use Cake\Routing\Router;
|
||||
use Cake\TestSuite\IntegrationTestTrait;
|
||||
use Cake\TestSuite\TestCase;
|
||||
use Cake\View\View;
|
||||
use CheeseCake\View\Helper\ActiveLinkHelper;
|
||||
|
||||
class ActiveLinkHelperTest extends TestCase {
|
||||
|
||||
use IntegrationTestTrait;
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
// $this->loadRoutes();
|
||||
$routeBuilder = Router::createRouteBuilder('/');
|
||||
$routeBuilder->scope('/', function (RouteBuilder $routes) {
|
||||
$routes->setRouteClass(DashedRoute::class);
|
||||
$routes->get(
|
||||
'/',
|
||||
['controller' => 'Tests', 'action' => 'index'],
|
||||
);
|
||||
$routes->get(
|
||||
'/admin/users',
|
||||
['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
);
|
||||
$routes->get(
|
||||
'/admin/users/view',
|
||||
['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'view'],
|
||||
);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function testLinkMatchesString(): void {
|
||||
$request = new ServerRequest(['url' => '/']);
|
||||
$view = new View($request);
|
||||
$helper = new ActiveLinkHelper($view);
|
||||
|
||||
$result = $helper->link('goto', '/', [
|
||||
'target' => '/',
|
||||
'activeClass' => 'awesome-active-class',
|
||||
]);
|
||||
$this->assertStringContainsString('awesome-active-class', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function testLinkMatchesArrayFromCurrent(): void {
|
||||
$request = new ServerRequest();
|
||||
$view = new View($request);
|
||||
$helper = new ActiveLinkHelper($view);
|
||||
|
||||
// matches specific controller action
|
||||
$specificActionResult = $helper->link('goto', ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'], [
|
||||
'target' => ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
'current' => ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
'activeClass' => 'awesome-active-class',
|
||||
]);
|
||||
$this->assertStringContainsString('awesome-active-class', $specificActionResult);
|
||||
|
||||
// match whole controller
|
||||
$wholeControllerResult = $helper->link('goto', [
|
||||
'plugin' => null,
|
||||
'prefix' => 'Admin',
|
||||
'controller' => 'Users',
|
||||
'action' => 'index',
|
||||
], [
|
||||
'current' => ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
'target' => ['prefix' => 'Admin', 'controller' => 'Users'],
|
||||
'activeClass' => 'awesome-active-class',
|
||||
]);
|
||||
$this->assertStringContainsString('awesome-active-class', $wholeControllerResult);
|
||||
|
||||
// match whole prefix
|
||||
$wholePrefixResult = $helper->link('goto', [
|
||||
'prefix' => 'Admin',
|
||||
'controller' => 'Users',
|
||||
'action' => 'index',
|
||||
], [
|
||||
'current' => ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
'target' => ['prefix' => 'Admin'],
|
||||
'activeClass' => 'awesome-active-class',
|
||||
]);
|
||||
$this->assertStringContainsString('awesome-active-class', $wholePrefixResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function testLinkDoesNotMatchArray(): void {
|
||||
$request = new ServerRequest();
|
||||
$request = $request->withParam('prefix', 'Admin');
|
||||
$request = $request->withParam('controller', 'Users');
|
||||
$request = $request->withParam('action', 'index');
|
||||
$view = new View($request);
|
||||
$helper = new ActiveLinkHelper($view);
|
||||
|
||||
// matches specific controller action
|
||||
$specificActionResult = $helper->link('goto', ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'], [
|
||||
'target' => ['controller' => 'Events', 'action' => 'index'],
|
||||
'current' => ['prefix' => 'Admin', 'controller' => 'Users', 'action' => 'index'],
|
||||
'activeClass' => 'awesome-active-class',
|
||||
'class' => 'link-class',
|
||||
]);
|
||||
$this->assertStringNotContainsString('awesome-active-class', $specificActionResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,27 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Cake\Core\Configure;
|
||||
|
||||
//use Cake\TestSuite\Fixture\SchemaLoader;
|
||||
|
||||
define('PLUGIN_ROOT', dirname(__DIR__));
|
||||
define('ROOT', PLUGIN_ROOT . DS . 'tests' . DS . 'test_app');
|
||||
define('TMP', PLUGIN_ROOT . DS . 'tmp' . DS);
|
||||
define('LOGS', TMP . 'logs' . DS);
|
||||
define('CACHE', TMP . 'cache' . DS);
|
||||
define('APP', ROOT . DS . 'src' . DS);
|
||||
define('APP_DIR', 'src');
|
||||
define('CAKE_CORE_INCLUDE_PATH', PLUGIN_ROOT . '/vendor/cakephp/cakephp');
|
||||
define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
|
||||
define('CAKE', CORE_PATH . APP_DIR . DS);
|
||||
|
||||
define('WWW_ROOT', PLUGIN_ROOT . DS . 'webroot' . DS);
|
||||
define('TESTS', __DIR__ . DS);
|
||||
define('CONFIG', TESTS . 'config' . DS);
|
||||
|
||||
ini_set('intl.default_locale', 'en-US');
|
||||
|
||||
/**
|
||||
* Test suite bootstrap for CheeseCakePlugin.
|
||||
*
|
||||
@@ -9,15 +30,15 @@ declare(strict_types=1);
|
||||
* installed as a dependency of an application.
|
||||
*/
|
||||
$findRoot = function ($root) {
|
||||
do {
|
||||
$lastRoot = $root;
|
||||
$root = dirname($root);
|
||||
if (is_dir($root . '/vendor/cakephp/cakephp')) {
|
||||
return $root;
|
||||
}
|
||||
} while ($root !== $lastRoot);
|
||||
do {
|
||||
$lastRoot = $root;
|
||||
$root = dirname($root);
|
||||
if (is_dir($root . '/vendor/cakephp/cakephp')) {
|
||||
return $root;
|
||||
}
|
||||
} while ($root !== $lastRoot);
|
||||
|
||||
throw new Exception('Cannot find the root of the application, unable to run tests');
|
||||
throw new Exception('Cannot find the root of the application, unable to run tests');
|
||||
};
|
||||
$root = $findRoot(__FILE__);
|
||||
unset($findRoot);
|
||||
@@ -34,11 +55,21 @@ require_once $root . '/vendor/autoload.php';
|
||||
require_once $root . '/vendor/cakephp/cakephp/tests/bootstrap.php';
|
||||
|
||||
if (file_exists($root . '/config/bootstrap.php')) {
|
||||
require $root . '/config/bootstrap.php';
|
||||
require $root . '/config/bootstrap.php';
|
||||
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
Configure::write('App', [
|
||||
'namespace' => 'TestApp',
|
||||
'encoding' => 'UTF-8',
|
||||
'paths' => [
|
||||
'testWebroot' => PLUGIN_ROOT . DS . 'tests' . DS . 'test_app' . DS . 'webroot' . DS,
|
||||
'webroot' => PLUGIN_ROOT . DS . 'webroot' . DS,
|
||||
'templates' => [
|
||||
PLUGIN_ROOT . DS . 'tests' . DS . 'test_app' . DS . 'templates' . DS,
|
||||
],
|
||||
],
|
||||
]);
|
||||
/**
|
||||
* Load schema from a SQL dump file.
|
||||
*
|
||||
@@ -49,7 +80,6 @@ if (file_exists($root . '/config/bootstrap.php')) {
|
||||
* using migrations to provide schema for your plugin,
|
||||
* and using \Migrations\TestSuite\Migrator to load schema.
|
||||
*/
|
||||
use Cake\TestSuite\Fixture\SchemaLoader;
|
||||
|
||||
// Load a schema dump file.
|
||||
(new SchemaLoader())->loadSqlFiles('tests/schema.sql', 'test');
|
||||
//(new SchemaLoader())->loadSqlFiles('tests/schema.sql', 'test');
|
||||
|
||||
1
tests/test_app/config/bootstrap.php
Normal file
1
tests/test_app/config/bootstrap.php
Normal file
@@ -0,0 +1 @@
|
||||
<?php
|
||||
95
tests/test_app/config/routes.php
Normal file
95
tests/test_app/config/routes.php
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
/**
|
||||
* Routes configuration.
|
||||
*
|
||||
* In this file, you set up routes to your controllers and their actions.
|
||||
* Routes are very important mechanism that allows you to freely connect
|
||||
* different URLs to chosen controllers and their actions (functions).
|
||||
*
|
||||
* It's loaded within the context of `Application::routes()` method which
|
||||
* receives a `RouteBuilder` instance `$routes` as method argument.
|
||||
*
|
||||
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
|
||||
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||||
*
|
||||
* Licensed under The MIT License
|
||||
* For full copyright and license information, please see the LICENSE.txt
|
||||
* Redistributions of files must retain the above copyright notice.
|
||||
*
|
||||
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
|
||||
* @link https://cakephp.org CakePHP(tm) Project
|
||||
* @license https://opensource.org/licenses/mit-license.php MIT License
|
||||
*/
|
||||
|
||||
use Cake\Routing\Route\DashedRoute;
|
||||
use Cake\Routing\RouteBuilder;
|
||||
|
||||
/*
|
||||
* This file is loaded in the context of the `Application` class.
|
||||
* So you can use `$this` to reference the application class instance
|
||||
* if required.
|
||||
*/
|
||||
return function (RouteBuilder $routes): void {
|
||||
/*
|
||||
* The default class to use for all routes
|
||||
*
|
||||
* The following route classes are supplied with CakePHP and are appropriate
|
||||
* to set as the default:
|
||||
*
|
||||
* - Route
|
||||
* - InflectedRoute
|
||||
* - DashedRoute
|
||||
*
|
||||
* If no call is made to `Router::defaultRouteClass()`, the class used is
|
||||
* `Route` (`Cake\Routing\Route\Route`)
|
||||
*
|
||||
* Note that `Route` does not do any inflections on URLs which will result in
|
||||
* inconsistently cased URLs when used with `{plugin}`, `{controller}` and
|
||||
* `{action}` markers.
|
||||
*/
|
||||
$routes->setRouteClass(DashedRoute::class);
|
||||
|
||||
$routes->scope('/', function (RouteBuilder $builder): void {
|
||||
/*
|
||||
* Here, we are connecting '/' (base path) to a controller called 'Pages',
|
||||
* its action called 'display', and we pass a param to select the view file
|
||||
* to use (in this case, templates/Pages/home.php)...
|
||||
*/
|
||||
$builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
|
||||
|
||||
$builder->prefix('Admin', function (RouteBuilder $adminRouteBuilder): void {
|
||||
$adminRouteBuilder->connect('/users/view', ['controller' => 'Pages', 'action' => 'view']);
|
||||
$adminRouteBuilder->connect('/users/index', ['controller' => 'Pages', 'action' => 'index']);
|
||||
});
|
||||
|
||||
/*
|
||||
* Connect catchall routes for all controllers.
|
||||
*
|
||||
* The `fallbacks` method is a shortcut for
|
||||
*
|
||||
* ```
|
||||
* $builder->connect('/{controller}', ['action' => 'index']);
|
||||
* $builder->connect('/{controller}/{action}/*', []);
|
||||
* ```
|
||||
*
|
||||
* You can remove these routes once you've connected the
|
||||
* routes you want in your application.
|
||||
*/
|
||||
$builder->fallbacks();
|
||||
});
|
||||
/*
|
||||
* If you need a different set of middleware or none at all,
|
||||
* open new scope and define routes there.
|
||||
*
|
||||
* ```
|
||||
* $routes->scope('/api', function (RouteBuilder $builder): void {
|
||||
* // No $builder->applyMiddleware() here.
|
||||
*
|
||||
* // Parse specified extensions from URLs
|
||||
* // $builder->setExtensions(['json', 'xml']);
|
||||
*
|
||||
* // Connect API actions here.
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
};
|
||||
16
tests/test_app/src/Controller/AppController.php
Normal file
16
tests/test_app/src/Controller/AppController.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace TestApp\Controller;
|
||||
|
||||
use Cake\Controller\Controller;
|
||||
|
||||
class AppController extends Controller {
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function initialize(): void {
|
||||
parent::initialize();
|
||||
|
||||
$this->loadComponent('Flash');
|
||||
}
|
||||
}
|
||||
11
tests/test_app/src/View/AppView.php
Normal file
11
tests/test_app/src/View/AppView.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace TestApp\View;
|
||||
|
||||
use Cake\View\View;
|
||||
|
||||
/**
|
||||
* @property \TinyAuth\View\Helper\AuthUserHelper $AuthUser
|
||||
*/
|
||||
class AppView extends View {
|
||||
}
|
||||
44
tests/test_app/templates/Error/error500.php
Normal file
44
tests/test_app/templates/Error/error500.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
use Cake\Core\Configure;
|
||||
use Cake\Error\Debugger;
|
||||
|
||||
$this->layout = 'error';
|
||||
|
||||
if (Configure::read('debug')):
|
||||
$this->layout = 'dev_error';
|
||||
|
||||
$this->assign('title', $message);
|
||||
$this->assign('templateName', 'error500.ctp');
|
||||
|
||||
$this->start('file');
|
||||
?>
|
||||
<?php if (!empty($error->queryString)) : ?>
|
||||
<p class="notice">
|
||||
<strong>SQL Query: </strong>
|
||||
<?= h($error->queryString) ?>
|
||||
</p>
|
||||
<?php endif; ?>
|
||||
<?php if (!empty($error->params)) : ?>
|
||||
<strong>SQL Query Params: </strong>
|
||||
<?php Debugger::dump($error->params) ?>
|
||||
<?php endif; ?>
|
||||
<?php if ($error instanceof Error) : ?>
|
||||
<strong>Error in: </strong>
|
||||
<?= sprintf('%s, line %s', str_replace(ROOT, 'ROOT', $error->getFile()), $error->getLine()) ?>
|
||||
<?php endif; ?>
|
||||
<?php
|
||||
echo $this->element('auto_table_warning');
|
||||
|
||||
if (extension_loaded('xdebug')):
|
||||
xdebug_print_function_stack();
|
||||
endif;
|
||||
|
||||
$this->end();
|
||||
endif;
|
||||
?>
|
||||
<h2><?= __d('cake', 'An Internal Error Has Occurred') ?></h2>
|
||||
<p class="error">
|
||||
<strong><?= __d('cake', 'Error') ?>: </strong>
|
||||
<?= h($message) ?>
|
||||
</p>
|
||||
6
tests/test_app/templates/layout/ajax.php
Normal file
6
tests/test_app/templates/layout/ajax.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \App\View\AppView $this
|
||||
*/
|
||||
?>
|
||||
<?= $this->fetch('content') ?>
|
||||
6
tests/test_app/templates/layout/default.php
Normal file
6
tests/test_app/templates/layout/default.php
Normal file
@@ -0,0 +1,6 @@
|
||||
<?php
|
||||
/**
|
||||
* @var \App\View\AppView $this
|
||||
*/
|
||||
?>
|
||||
<?= $this->fetch('content') ?>
|
||||
BIN
tests/test_app/webroot/images/cake_icon.png
Normal file
BIN
tests/test_app/webroot/images/cake_icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 943 B |
Reference in New Issue
Block a user