<?php declare(strict_types=1); use Cake\Cache\Cache; use Cake\Chronos\Chronos; use Cake\Core\Configure; use Cake\Core\Plugin; use Cake\Database\Connection; use Cake\Datasource\ConnectionManager; use Cake\TestSuite\Fixture\SchemaLoader; use CakeProducts\CakeProductsPlugin; use Migrations\TestSuite\Migrator; use TestApp\Controller\AppController; if (!defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } if (!defined('WINDOWS')) { if (DS === '\\' || substr(PHP_OS, 0, 3) === 'WIN') { define('WINDOWS', true); } else { define('WINDOWS', false); } } 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', 'de-DE'); require PLUGIN_ROOT . '/vendor/autoload.php'; require CORE_PATH . 'config/bootstrap.php'; require CAKE . 'functions.php'; Configure::write('App', [ 'namespace' => 'TestApp', 'encoding' => 'UTF-8', 'paths' => [ 'templates' => [ PLUGIN_ROOT . DS . 'tests' . DS . 'test_app' . DS . 'templates' . DS, ], ], ]); Configure::write('debug', true); $cache = [ 'default' => [ 'engine' => 'File', 'path' => CACHE, ], '_cake_core_' => [ 'className' => 'File', 'prefix' => 'crud_myapp_cake_core_', 'path' => CACHE . 'persistent/', 'serialize' => true, 'duration' => '+10 seconds', ], '_cake_model_' => [ 'className' => 'File', 'prefix' => 'crud_my_app_cake_model_', 'path' => CACHE . 'models/', 'serialize' => 'File', 'duration' => '+10 seconds', ], ]; Cache::setConfig($cache); class_alias(AppController::class, 'App\Controller\AppController'); Plugin::getCollection()->add(new CakeProductsPlugin()); Chronos::setTestNow(Chronos::now()); if (!getenv('DB_URL')) { putenv('DB_URL=sqlite:///:memory:'); } ConnectionManager::setConfig('test', [ 'className' => Connection::class, 'url' => getenv('DB_URL') ?: null, 'timezone' => 'UTC', 'quoteIdentifiers' => false, 'cacheMetadata' => true, ]); /** * Load schema from a SQL dump file. * * If your plugin does not use database fixtures you can * safely delete this. * * If you want to support multiple databases, consider * using migrations to provide schema for your plugin, * and using \Migrations\TestSuite\Migrator to load schema. */ // Load a schema dump file. //(new SchemaLoader())->loadSqlFiles('tests/schema.sql', 'test'); $migrator = new Migrator(); $migrator->run(['plugin' => 'CakeProducts']);