Removed Tests from GIT.
Updated DB Schema with current table structure. Signed-off-by: Rick Hays <rhays@haysgang.com>
@@ -1,24 +1,26 @@
|
||||
create table countries
|
||||
create table Log
|
||||
(
|
||||
id INTEGER
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
Country text not null,
|
||||
CountryCode text not null,
|
||||
FlagURL text not null,
|
||||
Wins int default 0 not null,
|
||||
Loses int default 0 not null,
|
||||
DateCreated date,
|
||||
DateUpdated date,
|
||||
DateDeleted date
|
||||
IP text not null,
|
||||
City text not null,
|
||||
State text not null,
|
||||
Country text not null,
|
||||
DateTime date
|
||||
);
|
||||
|
||||
create unique index countries_Country
|
||||
on countries (Country);
|
||||
|
||||
create unique index countries_CountryCode
|
||||
on countries (CountryCode);
|
||||
|
||||
# ---------------------------------------
|
||||
create table plays
|
||||
(
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
UserID text not null,
|
||||
UserName text not null,
|
||||
IP text not null,
|
||||
PlayerPick text not null,
|
||||
ComputerPick text not null,
|
||||
Result text not null,
|
||||
DateTime date
|
||||
);
|
||||
|
||||
create table users
|
||||
(
|
||||
@@ -27,10 +29,13 @@ create table users
|
||||
UserName text not null,
|
||||
Wins int default 0 not null,
|
||||
Loses int default 0 not null,
|
||||
Ties int default 0 not null,
|
||||
IP text not null,
|
||||
City text not null,
|
||||
State text not null,
|
||||
Country text not null,
|
||||
CountryCode text not null,
|
||||
FlagURL text not null,
|
||||
DateCreated date,
|
||||
DateUpdated date,
|
||||
DateDeleted date
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
class UnnamespacedClass
|
||||
{
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\Test;
|
||||
|
||||
class CIDatabaseTestCase extends Test\CIDatabaseTestCase
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
|
||||
use CodeIgniter\Test;
|
||||
|
||||
class CIUnitTestCase extends Test\CIUnitTestCase
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
<?php namespace Tests\Support\Cache\Handlers;
|
||||
|
||||
use CodeIgniter\Cache\CacheInterface;
|
||||
|
||||
class MockHandler implements CacheInterface
|
||||
{
|
||||
/**
|
||||
* Prefixed to all cache names.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $prefix;
|
||||
|
||||
/**
|
||||
* Mock cache storage.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $cache = [];
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Takes care of any handler-specific setup that must be done.
|
||||
*/
|
||||
public function initialize()
|
||||
{
|
||||
// Not to see here...
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Attempts to fetch an item from the cache store.
|
||||
*
|
||||
* @param string $key Cache item name
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function get(string $key)
|
||||
{
|
||||
$key = $this->prefix . $key;
|
||||
|
||||
return array_key_exists($key, $this->cache)
|
||||
? $this->cache[$key]
|
||||
: null;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Saves an item to the cache store.
|
||||
*
|
||||
* The $raw parameter is only utilized by Mamcache in order to
|
||||
* allow usage of increment() and decrement().
|
||||
*
|
||||
* @param string $key Cache item name
|
||||
* @param $value the data to save
|
||||
* @param null $ttl Time To Live, in seconds (default 60)
|
||||
* @param boolean $raw Whether to store the raw value.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function save(string $key, $value, int $ttl = 60, bool $raw = false)
|
||||
{
|
||||
$key = $this->prefix . $key;
|
||||
|
||||
$this->cache[$key] = $value;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Deletes a specific item from the cache store.
|
||||
*
|
||||
* @param string $key Cache item name
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function delete(string $key)
|
||||
{
|
||||
unset($this->cache[$key]);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Performs atomic incrementation of a raw stored value.
|
||||
*
|
||||
* @param string $key Cache ID
|
||||
* @param integer $offset Step/value to increase by
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function increment(string $key, int $offset = 1)
|
||||
{
|
||||
$key = $this->prefix . $key;
|
||||
|
||||
$data = $this->cache[$key] ?: null;
|
||||
|
||||
if (empty($data))
|
||||
{
|
||||
$data = 0;
|
||||
}
|
||||
elseif (! is_int($data))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->save($key, $data + $offset);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Performs atomic decrementation of a raw stored value.
|
||||
*
|
||||
* @param string $key Cache ID
|
||||
* @param integer $offset Step/value to increase by
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function decrement(string $key, int $offset = 1)
|
||||
{
|
||||
$key = $this->prefix . $key;
|
||||
|
||||
$data = $this->cache[$key] ?: null;
|
||||
|
||||
if (empty($data))
|
||||
{
|
||||
$data = 0;
|
||||
}
|
||||
elseif (! is_int($data))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->save($key, $data - $offset);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Will delete all items in the entire cache.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function clean()
|
||||
{
|
||||
$this->cache = [];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns information on the entire cache.
|
||||
*
|
||||
* The information returned and the structure of the data
|
||||
* varies depending on the handler.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getCacheInfo()
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns detailed information about the specific item in the cache.
|
||||
*
|
||||
* @param string $key Cache item name.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getMetaData(string $key)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Determines if the driver is supported on this system.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function isSupported(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\Commands;
|
||||
|
||||
use CodeIgniter\CLI\BaseCommand;
|
||||
|
||||
abstract class AbstractInfo extends BaseCommand
|
||||
{
|
||||
|
||||
protected $group = 'demo';
|
||||
protected $name = 'app:pablo';
|
||||
protected $description = 'Displays basic application information.';
|
||||
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\Commands;
|
||||
|
||||
use CodeIgniter\CLI\BaseCommand;
|
||||
use CodeIgniter\CLI\CLI;
|
||||
use CodeIgniter\CodeIgniter;
|
||||
|
||||
class AppInfo extends BaseCommand
|
||||
{
|
||||
|
||||
protected $group = 'demo';
|
||||
protected $name = 'app:info';
|
||||
protected $description = 'Displays basic application information.';
|
||||
|
||||
public function run(array $params)
|
||||
{
|
||||
CLI::write('CI Version: ' . CLI::color(CodeIgniter::CI_VERSION, 'red'));
|
||||
}
|
||||
|
||||
public function bomb()
|
||||
{
|
||||
try
|
||||
{
|
||||
CLI::color('test', 'white', 'Background');
|
||||
}
|
||||
catch (\RuntimeException $oops)
|
||||
{
|
||||
$this->showError($oops);
|
||||
}
|
||||
}
|
||||
|
||||
public function helpme()
|
||||
{
|
||||
$this->call('help');
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php namespace CodeIgniter\Commands;
|
||||
|
||||
class CommandsTestStreamFilter extends \php_user_filter
|
||||
{
|
||||
public static $buffer = '';
|
||||
|
||||
public function filter($in, $out, &$consumed, $closing)
|
||||
{
|
||||
while ($bucket = stream_bucket_make_writeable($in))
|
||||
{
|
||||
self::$buffer .= $bucket->data;
|
||||
$consumed += $bucket->datalen;
|
||||
}
|
||||
return PSFS_PASS_ON;
|
||||
}
|
||||
}
|
||||
|
||||
stream_filter_register('CommandsTestStreamFilter', 'CodeIgniter\Commands\CommandsTestStreamFilter');
|
||||
@@ -1,18 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
/**
|
||||
* Class BadRegistrar
|
||||
*
|
||||
* Doesn't provides a basic registrar class for testing BaseConfig registration functions,
|
||||
* because it doesn't return an associative array
|
||||
*/
|
||||
|
||||
class BadRegistrar
|
||||
{
|
||||
|
||||
public static function RegistrarConfig()
|
||||
{
|
||||
return 'I am not worthy';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
class MockAppConfig
|
||||
{
|
||||
public $baseURL = 'http://example.com';
|
||||
|
||||
public $uriProtocol = 'REQUEST_URI';
|
||||
|
||||
public $cookiePrefix = '';
|
||||
public $cookieDomain = '';
|
||||
public $cookiePath = '/';
|
||||
public $cookieSecure = false;
|
||||
public $cookieHTTPOnly = false;
|
||||
|
||||
public $proxyIPs = '';
|
||||
|
||||
public $CSRFProtection = false;
|
||||
public $CSRFTokenName = 'csrf_test_name';
|
||||
public $CSRFHeaderName = 'X-CSRF-TOKEN';
|
||||
public $CSRFCookieName = 'csrf_cookie_name';
|
||||
public $CSRFExpire = 7200;
|
||||
public $CSRFRegenerate = true;
|
||||
public $CSRFExcludeURIs = ['http://example.com'];
|
||||
public $CSRFRedirect = false;
|
||||
|
||||
public $CSPEnabled = false;
|
||||
|
||||
public $defaultLocale = 'en';
|
||||
public $negotiateLocale = false;
|
||||
public $supportedLocales = [
|
||||
'en',
|
||||
'es',
|
||||
];
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
use Config\Autoload;
|
||||
|
||||
class MockAutoload extends Autoload
|
||||
{
|
||||
public $psr4 = [];
|
||||
|
||||
public $classmap = [];
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// Don't call the parent since we don't want the default mappings.
|
||||
// parent::__construct();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
class MockCLIConfig extends \Config\App
|
||||
{
|
||||
public $baseURL = 'http://example.com';
|
||||
|
||||
public $uriProtocol = 'REQUEST_URI';
|
||||
|
||||
public $cookiePrefix = '';
|
||||
public $cookieDomain = '';
|
||||
public $cookiePath = '/';
|
||||
public $cookieSecure = false;
|
||||
public $cookieHTTPOnly = false;
|
||||
|
||||
public $proxyIPs = '';
|
||||
|
||||
public $CSRFProtection = false;
|
||||
public $CSRFTokenName = 'csrf_test_name';
|
||||
public $CSRFCookieName = 'csrf_cookie_name';
|
||||
public $CSRFExpire = 7200;
|
||||
public $CSRFRegenerate = true;
|
||||
public $CSRFExcludeURIs = ['http://example.com'];
|
||||
|
||||
public $CSPEnabled = false;
|
||||
|
||||
public $defaultLocale = 'en';
|
||||
public $negotiateLocale = false;
|
||||
public $supportedLocales = [
|
||||
'en',
|
||||
'es',
|
||||
];
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
class MockLogger
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Error Logging Threshold
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You can enable error logging by setting a threshold over zero. The
|
||||
| threshold determines what gets logged. Any values below or equal to the
|
||||
| threshold will be logged. Threshold options are:
|
||||
|
|
||||
| 0 = Disables logging, Error logging TURNED OFF
|
||||
| 1 = Emergency Messages - System is unusable
|
||||
| 2 = Alert Messages - Action Must Be Taken Immediately
|
||||
| 3 = Critical Messages - Application component unavailable, unexpected exception.
|
||||
| 4 = Runtime Errors - Don't need immediate action, but should be monitored.
|
||||
| 5 = Warnings - Exceptional occurrences that are not errors.
|
||||
| 6 = Notices - Normal but significant events.
|
||||
| 7 = Info - Interesting events, like user logging in, etc.
|
||||
| 8 = Debug - Detailed debug information.
|
||||
| 9 = All Messages
|
||||
|
|
||||
| You can also pass an array with threshold levels to show individual error types
|
||||
|
|
||||
| array(1, 2, 3, 8) = Emergency, Alert, Critical, and Debug messages
|
||||
|
|
||||
| For a live site you'll usually enable Critical or higher (3) to be logged otherwise
|
||||
| your log files will fill up very fast.
|
||||
|
|
||||
*/
|
||||
|
||||
public $threshold = 9;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Error Logging Directory Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
|
|
||||
|
|
||||
*/
|
||||
public $path = '';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Date Format for Logs
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Each item that is logged has an associated date. You can use PHP date
|
||||
| codes to set your own date formatting
|
||||
|
|
||||
*/
|
||||
public $dateFormat = 'Y-m-d';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Log Handlers
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The logging system supports multiple actions to be taken when something
|
||||
| is logged. This is done by allowing for multiple Handlers, special classes
|
||||
| designed to write the log to their chosen destinations, whether that is
|
||||
| a file on the getServer, a cloud-based service, or even taking actions such
|
||||
| as emailing the dev team.
|
||||
|
|
||||
| Each handler is defined by the class name used for that handler, and it
|
||||
| MUST implement the CodeIgniter\Log\Handlers\HandlerInterface interface.
|
||||
|
|
||||
| The value of each key is an array of configuration items that are sent
|
||||
| to the constructor of each handler. The only required configuration item
|
||||
| is the 'handles' element, which must be an array of integer log levels.
|
||||
| This is most easily handled by using the constants defined in the
|
||||
| Psr\Log\LogLevel class.
|
||||
|
|
||||
| Handlers are executed in the order defined in this array, starting with
|
||||
| the handler on top and continuing down.
|
||||
|
|
||||
*/
|
||||
public $handlers = [
|
||||
//--------------------------------------------------------------------
|
||||
// File Handler
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
'Tests\Support\Log\Handlers\TestHandler' => [
|
||||
/*
|
||||
* The log levels that this handler will handle.
|
||||
*/
|
||||
'handles' => [
|
||||
'critical',
|
||||
'alert',
|
||||
'emergency',
|
||||
'debug',
|
||||
'error',
|
||||
'info',
|
||||
'notice',
|
||||
'warning',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\Config;
|
||||
|
||||
use \CodeIgniter\Config\BaseService;
|
||||
|
||||
class MockServices extends BaseService
|
||||
{
|
||||
|
||||
public $psr4 = [
|
||||
'Tests/Support' => TESTPATH . '_support/',
|
||||
];
|
||||
public $classmap = [];
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
// Don't call the parent since we don't want the default mappings.
|
||||
// parent::__construct();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
public static function locator(bool $getShared = true)
|
||||
{
|
||||
return new \CodeIgniter\Autoloader\FileLocator(static::autoloader());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php namespace Tests\Support\Config;
|
||||
|
||||
/**
|
||||
* Class Registrar
|
||||
*
|
||||
* Provides a basic registrar class for testing BaseConfig registration functions.
|
||||
*/
|
||||
|
||||
class Registrar
|
||||
{
|
||||
|
||||
public static function RegistrarConfig()
|
||||
{
|
||||
return [
|
||||
'bar' => [
|
||||
'first',
|
||||
'second',
|
||||
],
|
||||
'format' => 'nice',
|
||||
'fruit' => [
|
||||
'apple',
|
||||
'banana',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* This is a simple file to include for testing the RouteCollection class.
|
||||
*/
|
||||
|
||||
$routes->add('testing', 'TestController::index');
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\Controllers;
|
||||
|
||||
use CodeIgniter\API\ResponseTrait;
|
||||
use CodeIgniter\Controller;
|
||||
use CodeIgniter\HTTP\Exceptions\HTTPException;
|
||||
|
||||
/**
|
||||
* This is a testing only controller, intended to blow up in multiple
|
||||
* ways to make sure we catch them.
|
||||
*/
|
||||
class Popcorn extends Controller
|
||||
{
|
||||
|
||||
use ResponseTrait;
|
||||
|
||||
public function index()
|
||||
{
|
||||
return 'Hi there';
|
||||
}
|
||||
|
||||
public function pop()
|
||||
{
|
||||
$this->respond('Oops', 567, 'Surprise');
|
||||
}
|
||||
|
||||
public function popper()
|
||||
{
|
||||
throw new \RuntimeException('Surprise', 500);
|
||||
}
|
||||
|
||||
public function weasel()
|
||||
{
|
||||
$this->respond('', 200);
|
||||
}
|
||||
|
||||
public function oops()
|
||||
{
|
||||
$this->failUnauthorized();
|
||||
}
|
||||
|
||||
public function goaway()
|
||||
{
|
||||
return redirect()->to('/');
|
||||
}
|
||||
|
||||
// @see https://github.com/codeigniter4/CodeIgniter4/issues/1834
|
||||
public function index3()
|
||||
{
|
||||
$response = $this->response->setJSON([
|
||||
'lang' => $this->request->getLocale(),
|
||||
]);
|
||||
|
||||
// echo var_dump($this->response->getBody());
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function canyon()
|
||||
{
|
||||
echo 'Hello-o-o';
|
||||
}
|
||||
|
||||
public function cat()
|
||||
{
|
||||
}
|
||||
|
||||
public function json()
|
||||
{
|
||||
$this->responsd(['answer' => 42]);
|
||||
}
|
||||
|
||||
public function xml()
|
||||
{
|
||||
$this->respond('<my><pet>cat</pet></my>');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
<?php namespace Tests\Support\Database\Migrations;
|
||||
|
||||
class Migration_Create_test_tables extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// SQLite3 uses auto increment different
|
||||
$unique_or_auto = $this->db->DBDriver === 'SQLite3' ? 'unique' : 'auto_increment';
|
||||
|
||||
// User Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 80,
|
||||
],
|
||||
'email' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 100,
|
||||
],
|
||||
'country' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
'deleted_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('user', true);
|
||||
|
||||
// Job Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'description' => [
|
||||
'type' => 'TEXT',
|
||||
'null' => true,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
'deleted_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('job', true);
|
||||
|
||||
// Misc Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'value' => ['type' => 'TEXT'],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('misc', true);
|
||||
|
||||
// Empty Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'DATE',
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'DATE',
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('empty', true);
|
||||
|
||||
// Secondary Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'value' => ['type' => 'TEXT'],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('secondary', true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->forge->dropTable('user', true);
|
||||
$this->forge->dropTable('job', true);
|
||||
$this->forge->dropTable('misc', true);
|
||||
$this->forge->dropTable('empty', true);
|
||||
$this->forge->dropTable('secondary', true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php namespace Tests\Support\Database;
|
||||
|
||||
use CodeIgniter\Database\BaseBuilder;
|
||||
use CodeIgniter\Database\ConnectionInterface;
|
||||
|
||||
class MockBuilder extends BaseBuilder {
|
||||
|
||||
public function __construct($tableName, ConnectionInterface &$db, array $options = null)
|
||||
{
|
||||
parent::__construct($tableName, $db, $options);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,298 +0,0 @@
|
||||
<?php namespace Tests\Support\Database;
|
||||
|
||||
use CodeIgniter\CodeIgniter;
|
||||
use CodeIgniter\Database\BaseConnection;
|
||||
|
||||
class MockConnection extends BaseConnection
|
||||
{
|
||||
protected $returnValues = [];
|
||||
|
||||
public $database;
|
||||
|
||||
public $lastQuery;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function shouldReturn(string $method, $return)
|
||||
{
|
||||
$this->returnValues[$method] = $return;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Orchestrates a query against the database. Queries must use
|
||||
* Database\Statement objects to store the query and build it.
|
||||
* This method works with the cache.
|
||||
*
|
||||
* Should automatically handle different connections for read/write
|
||||
* queries if needed.
|
||||
*
|
||||
* @param string $sql
|
||||
* @param mixed ...$binds
|
||||
* @param boolean $setEscapeFlags
|
||||
* @param string $queryClass
|
||||
*
|
||||
* @return \CodeIgniter\Database\BaseResult|\CodeIgniter\Database\Query|false
|
||||
*/
|
||||
|
||||
public function query(string $sql, $binds = null, bool $setEscapeFlags = true, string $queryClass = 'CodeIgniter\\Database\\Query')
|
||||
{
|
||||
$queryClass = str_replace('Connection', 'Query', get_class($this));
|
||||
|
||||
$query = new $queryClass($this);
|
||||
|
||||
$query->setQuery($sql, $binds, $setEscapeFlags);
|
||||
|
||||
if (! empty($this->swapPre) && ! empty($this->DBPrefix))
|
||||
{
|
||||
$query->swapPrefix($this->DBPrefix, $this->swapPre);
|
||||
}
|
||||
|
||||
$startTime = microtime(true);
|
||||
|
||||
$this->lastQuery = $query;
|
||||
|
||||
// Run the query
|
||||
if (false === ($this->resultID = $this->simpleQuery($query->getQuery())))
|
||||
{
|
||||
$query->setDuration($startTime, $startTime);
|
||||
|
||||
// @todo deal with errors
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$query->setDuration($startTime);
|
||||
|
||||
$resultClass = str_replace('Connection', 'Result', get_class($this));
|
||||
|
||||
return new $resultClass($this->connID, $this->resultID);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Connect to the database.
|
||||
*
|
||||
* @param boolean $persistent
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function connect(bool $persistent = false)
|
||||
{
|
||||
$return = $this->returnValues['connect'] ?? true;
|
||||
|
||||
if (is_array($return))
|
||||
{
|
||||
// By removing the top item here, we can
|
||||
// get a different value for, say, testing failover connections.
|
||||
$return = array_shift($this->returnValues['connect']);
|
||||
}
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Keep or establish the connection if no queries have been sent for
|
||||
* a length of time exceeding the server's idle timeout.
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function reconnect(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Select a specific database table to use.
|
||||
*
|
||||
* @param string $databaseName
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function setDatabase(string $databaseName)
|
||||
{
|
||||
$this->database = $databaseName;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns a string containing the version of the database being used.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion(): string
|
||||
{
|
||||
return CodeIgniter::CI_VERSION;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Executes the query against the database.
|
||||
*
|
||||
* @param string $sql
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
protected function execute(string $sql)
|
||||
{
|
||||
return $this->returnValues['execute'];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the total number of rows affected by this query.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function affectedRows(): int
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the last error code and message.
|
||||
*
|
||||
* Must return an array with keys 'code' and 'message':
|
||||
*
|
||||
* return ['code' => null, 'message' => null);
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function error(): array
|
||||
{
|
||||
return [
|
||||
'code' => null,
|
||||
'message' => null,
|
||||
];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Insert ID
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function insertID(): int
|
||||
{
|
||||
return $this->connID->insert_id;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Generates the SQL for listing tables in a platform-dependent manner.
|
||||
*
|
||||
* @param boolean $constrainByPrefix
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _listTables(bool $constrainByPrefix = false): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Generates a platform-specific query string so that the column names can be fetched.
|
||||
*
|
||||
* @param string $table
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function _listColumns(string $table = ''): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $table
|
||||
* @return array
|
||||
*/
|
||||
protected function _fieldData(string $table): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $table
|
||||
* @return array
|
||||
*/
|
||||
protected function _indexData(string $table): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $table
|
||||
* @return array
|
||||
*/
|
||||
protected function _foreignKeyData(string $table): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Close the connection.
|
||||
*/
|
||||
protected function _close()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Begin Transaction
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function _transBegin(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Commit Transaction
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function _transCommit(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Rollback Transaction
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
protected function _transRollback(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php namespace Tests\Support\Database;
|
||||
|
||||
use CodeIgniter\Database\Query;
|
||||
|
||||
class MockQuery extends Query
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
<?php namespace Tests\Support\Database;
|
||||
|
||||
use CodeIgniter\Database\BaseResult;
|
||||
|
||||
class MockResult extends BaseResult
|
||||
{
|
||||
/**
|
||||
* Gets the number of fields in the result set.
|
||||
*
|
||||
* @return integer
|
||||
*/
|
||||
public function getFieldCount(): int
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Generates an array of column names in the result set.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getFieldNames(): array
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Generates an array of objects representing field meta-data.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getFieldData(): array
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Frees the current result.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function freeResult()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Moves the internal pointer to the desired offset. This is called
|
||||
* internally before fetching results to make sure the result set
|
||||
* starts at zero.
|
||||
*
|
||||
* @param integer $n
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function dataSeek($n = 0)
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the result set as an array.
|
||||
*
|
||||
* Overridden by driver classes.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
protected function fetchAssoc()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns the result set as an object.
|
||||
*
|
||||
* Overridden by child classes.
|
||||
*
|
||||
* @param string $className
|
||||
*
|
||||
* @return object
|
||||
*/
|
||||
protected function fetchObject($className = 'stdClass')
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Support\Database;
|
||||
|
||||
class MockTestClass
|
||||
{
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
<?php namespace Tests\Support\Database\Seeds;
|
||||
|
||||
class CITestSeeder extends \CodeIgniter\Database\Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
// Job Data
|
||||
$data = [
|
||||
'user' => [
|
||||
[
|
||||
'name' => 'Derek Jones',
|
||||
'email' => 'derek@world.com',
|
||||
'country' => 'US',
|
||||
],
|
||||
[
|
||||
'name' => 'Ahmadinejad',
|
||||
'email' => 'ahmadinejad@world.com',
|
||||
'country' => 'Iran',
|
||||
],
|
||||
[
|
||||
'name' => 'Richard A Causey',
|
||||
'email' => 'richard@world.com',
|
||||
'country' => 'US',
|
||||
],
|
||||
[
|
||||
'name' => 'Chris Martin',
|
||||
'email' => 'chris@world.com',
|
||||
'country' => 'UK',
|
||||
],
|
||||
],
|
||||
'job' => [
|
||||
[
|
||||
'name' => 'Developer',
|
||||
'description' => 'Awesome job, but sometimes makes you bored',
|
||||
],
|
||||
[
|
||||
'name' => 'Politician',
|
||||
'description' => 'This is not really a job',
|
||||
],
|
||||
[
|
||||
'name' => 'Accountant',
|
||||
'description' => 'Boring job, but you will get free snack at lunch',
|
||||
],
|
||||
[
|
||||
'name' => 'Musician',
|
||||
'description' => 'Only Coldplay can actually called Musician',
|
||||
],
|
||||
],
|
||||
'misc' => [
|
||||
[
|
||||
'key' => '\\xxxfoo456',
|
||||
'value' => 'Entry with \\xxx',
|
||||
],
|
||||
[
|
||||
'key' => '\\%foo456',
|
||||
'value' => 'Entry with \\%',
|
||||
],
|
||||
[
|
||||
'key' => 'spaces and tabs',
|
||||
'value' => ' One two three tab',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($data as $table => $dummy_data)
|
||||
{
|
||||
$this->db->table($table)->truncate();
|
||||
|
||||
foreach ($dummy_data as $single_dummy_data)
|
||||
{
|
||||
$this->db->table($table)->insert($single_dummy_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php namespace App\Database\Migrations;
|
||||
|
||||
class Migration_some_migration extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->forge->addField([
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 255,
|
||||
],
|
||||
]);
|
||||
$this->forge->createTable('foo', true);
|
||||
|
||||
$this->db->table('foo')->insert([
|
||||
'key' => 'foobar',
|
||||
]);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->forge->dropTable('foo', true);
|
||||
}
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
<?php namespace Tests\Support\DatabaseTestMigrations\Database\Migrations;
|
||||
|
||||
class Migration_Create_test_tables extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// SQLite3 uses auto increment different
|
||||
$unique_or_auto = $this->db->DBDriver === 'SQLite3' ? 'unique' : 'auto_increment';
|
||||
|
||||
// User Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 80,
|
||||
],
|
||||
'email' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 100,
|
||||
],
|
||||
'country' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
'deleted_at' => [
|
||||
'type' => 'DATETIME',
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('user', true);
|
||||
|
||||
// Job Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'description' => [
|
||||
'type' => 'TEXT',
|
||||
'null' => true,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
'deleted_at' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 11,
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('job', true);
|
||||
|
||||
// Misc Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'value' => ['type' => 'TEXT'],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('misc', true);
|
||||
|
||||
// Empty Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'name' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'created_at' => [
|
||||
'type' => 'DATE',
|
||||
'null' => true,
|
||||
],
|
||||
'updated_at' => [
|
||||
'type' => 'DATE',
|
||||
'null' => true,
|
||||
],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('empty', true);
|
||||
|
||||
// Secondary Table
|
||||
$this->forge->addField([
|
||||
'id' => [
|
||||
'type' => 'INTEGER',
|
||||
'constraint' => 3,
|
||||
$unique_or_auto => true,
|
||||
],
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 40,
|
||||
],
|
||||
'value' => ['type' => 'TEXT'],
|
||||
]);
|
||||
$this->forge->addKey('id', true);
|
||||
$this->forge->createTable('secondary', true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->forge->dropTable('user', true);
|
||||
$this->forge->dropTable('job', true);
|
||||
$this->forge->dropTable('misc', true);
|
||||
$this->forge->dropTable('empty', true);
|
||||
$this->forge->dropTable('secondary', true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,66 +0,0 @@
|
||||
<?php namespace Tests\Support\Events;
|
||||
|
||||
/**
|
||||
* CodeIgniter
|
||||
*
|
||||
* An open source application development framework for PHP
|
||||
*
|
||||
* This content is released under the MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014-2018 British Columbia Institute of Technology
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*
|
||||
* @package CodeIgniter
|
||||
* @author CodeIgniter Dev Team
|
||||
* @copyright 2014-2018 British Columbia Institute of Technology (https://bcit.ca/)
|
||||
* @license https://opensource.org/licenses/MIT MIT License
|
||||
* @link https://codeigniter.com
|
||||
* @since Version 4.0.0
|
||||
* @filesource
|
||||
*/
|
||||
|
||||
use CodeIgniter\Events\Events;
|
||||
|
||||
/**
|
||||
* Events
|
||||
*/
|
||||
class MockEvents extends Events
|
||||
{
|
||||
|
||||
public function getListeners()
|
||||
{
|
||||
return self::$listeners;
|
||||
}
|
||||
|
||||
public function getEventsFile()
|
||||
{
|
||||
return self::$eventsFile;
|
||||
}
|
||||
|
||||
public function getSimulate()
|
||||
{
|
||||
return self::$simulate;
|
||||
}
|
||||
|
||||
public function unInitialize()
|
||||
{
|
||||
static::$initialized = false;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Support\HTTP;
|
||||
|
||||
use CodeIgniter\HTTP\CURLRequest;
|
||||
|
||||
/**
|
||||
* Class MockCURLRequest
|
||||
*
|
||||
* Simply allows us to not actually call cURL during the
|
||||
* test runs. Instead, we can set the desired output
|
||||
* and get back the set options.
|
||||
*/
|
||||
class MockCURLRequest extends CURLRequest
|
||||
{
|
||||
|
||||
public $curl_options;
|
||||
protected $output = '';
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function setOutput($output)
|
||||
{
|
||||
$this->output = $output;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
protected function sendRequest(array $curl_options = []): string
|
||||
{
|
||||
// Save so we can access later.
|
||||
$this->curl_options = $curl_options;
|
||||
|
||||
return $this->output;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// for testing purposes only
|
||||
public function getBaseURI()
|
||||
{
|
||||
return $this->baseURI;
|
||||
}
|
||||
|
||||
// for testing purposes only
|
||||
public function getDelay()
|
||||
{
|
||||
return $this->delay;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php namespace Tests\Support\HTTP;
|
||||
|
||||
use CodeIgniter\HTTP\IncomingRequest;
|
||||
|
||||
class MockIncomingRequest extends IncomingRequest
|
||||
{
|
||||
// public function populateHeaders()
|
||||
// {
|
||||
// // Don't do anything... force the tester to manually set the headers they want.
|
||||
// }
|
||||
|
||||
public function detectURI($protocol, $baseURL)
|
||||
{
|
||||
// Do nothing...
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\HTTP;
|
||||
|
||||
use CodeIgniter\HTTP\Response;
|
||||
|
||||
/**
|
||||
* Class MockResponse
|
||||
*/
|
||||
class MockResponse extends Response
|
||||
{
|
||||
|
||||
/**
|
||||
* If true, will not write output. Useful during testing.
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $pretend = true;
|
||||
|
||||
// for testing
|
||||
public function getPretend()
|
||||
{
|
||||
return $this->pretend;
|
||||
}
|
||||
|
||||
// artificial error for testing
|
||||
public function misbehave()
|
||||
{
|
||||
$this->statusCode = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.8 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 119 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 4.4 KiB |
@@ -1,61 +0,0 @@
|
||||
<?php namespace Tests\Support\Language;
|
||||
|
||||
use CodeIgniter\Language\Language;
|
||||
|
||||
class MockLanguage extends Language
|
||||
{
|
||||
|
||||
/**
|
||||
* Stores the data that should be
|
||||
* returned by the 'requireFile()' method.
|
||||
*
|
||||
* @var mixed
|
||||
*/
|
||||
protected $data;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Sets the data that should be returned by the
|
||||
* 'requireFile()' method to allow easy overrides
|
||||
* during testing.
|
||||
*
|
||||
* @param array $data
|
||||
* @param string $file
|
||||
* @param string|null $locale
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setData(string $file, array $data, string $locale = null)
|
||||
{
|
||||
$this->language[$locale ?? $this->locale][$file] = $data;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Provides an override that allows us to set custom
|
||||
* data to be returned easily during testing.
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @return array|mixed
|
||||
*/
|
||||
protected function requireFile(string $path): array
|
||||
{
|
||||
return $this->data ?? [];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Arbitrarily turnoff internationalization support for testing
|
||||
*/
|
||||
public function disableIntlSupport()
|
||||
{
|
||||
$this->intlSupport = false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php namespace Tests\Support\Language;
|
||||
|
||||
use CodeIgniter\Language\Language;
|
||||
|
||||
class SecondMockLanguage extends Language
|
||||
{
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Expose the protected *load* method
|
||||
*/
|
||||
public function loadem(string $file, string $locale = 'en', bool $return = false)
|
||||
{
|
||||
return $this->load($file, $locale, $return);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Expose the loaded language files
|
||||
*/
|
||||
public function loaded(string $locale = 'en')
|
||||
{
|
||||
return $this->loadedFiles[$locale];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
// seven wonders of the ancient world
|
||||
return [
|
||||
'one' => 'Pyramid of Giza',
|
||||
'tre' => 'Colossus of Rhodes',
|
||||
'fiv' => 'Temple of Artemis',
|
||||
'sev' => 'Hanging Gardens of Babylon',
|
||||
];
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
// seven deadly sins
|
||||
return [
|
||||
'two' => 'gluttony',
|
||||
'tre' => 'greed',
|
||||
'six' => 'envy',
|
||||
'sev' => 'pride',
|
||||
];
|
||||
@@ -1,6 +0,0 @@
|
||||
<?php
|
||||
return [
|
||||
'strongForce' => 'These are not the droids you are looking for',
|
||||
'notaMoon' => "It's made of cheese",
|
||||
'wisdom' => 'There is no try',
|
||||
];
|
||||
@@ -1,8 +0,0 @@
|
||||
<?php
|
||||
// 12 days of Christmas
|
||||
return [
|
||||
'for' => 'four calling birds',
|
||||
'fiv' => 'five golden rings',
|
||||
'six' => 'six geese a laying',
|
||||
'sev' => 'seven swans a swimming',
|
||||
];
|
||||
@@ -1,20 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Core language strings.
|
||||
*
|
||||
* @package CodeIgniter
|
||||
* @author CodeIgniter Dev Team
|
||||
* @copyright 2014-2018 British Columbia Institute of Technology (https://bcit.ca/)
|
||||
* @license https://opensource.org/licenses/MIT MIT License
|
||||
* @link https://codeigniter.com
|
||||
* @since Version 4.0.0
|
||||
* @filesource
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
|
||||
// looking for a system message not likely to be part of unit testing
|
||||
return [
|
||||
'missingExtension' => '{0} extension could not be found.',
|
||||
'bazillion' => 'billions and billions', // adds a new setting
|
||||
];
|
||||
@@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'strongForce' => 'These are not the droids you are looking for',
|
||||
'notaMoon' => "That's no moon... it's a space station",
|
||||
'cannotMove' => 'I have a very bad feeling about this',
|
||||
];
|
||||
@@ -1,5 +0,0 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'languageGetLineInvalidArgumentException' => 'Whatever this would be, translated',
|
||||
];
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php namespace Tests\Support\Log\Handlers;
|
||||
|
||||
/**
|
||||
* Class MockHandler
|
||||
*
|
||||
* Extends ChromeLoggerHandler, exposing some inner workings
|
||||
*/
|
||||
|
||||
class MockChromeHandler extends \CodeIgniter\Log\Handlers\ChromeLoggerHandler
|
||||
{
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function __construct(array $config)
|
||||
{
|
||||
parent::__construct($config);
|
||||
}
|
||||
|
||||
// retrieve the message from the JSON response
|
||||
public function peekaboo()
|
||||
{
|
||||
return $this->json['rows'][0];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
<?php namespace Tests\Support\Log\Handlers;
|
||||
|
||||
/**
|
||||
* Class MockHandler
|
||||
*
|
||||
* Extends FileHandler, exposing some inner workings
|
||||
*/
|
||||
|
||||
class MockFileHandler extends \CodeIgniter\Log\Handlers\FileHandler
|
||||
{
|
||||
/**
|
||||
* Where would the log be written?
|
||||
*/
|
||||
public $destination;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function __construct(array $config)
|
||||
{
|
||||
parent::__construct($config);
|
||||
$this->handles = $config['handles'] ?? [];
|
||||
$this->destination = $this->path . 'log-' . date('Y-m-d') . '.' . $this->fileExtension;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,64 +0,0 @@
|
||||
<?php namespace Tests\Support\Log\Handlers;
|
||||
|
||||
/**
|
||||
* Class TestHandler
|
||||
*
|
||||
* A simple LogHandler that stores the logs in memory.
|
||||
* Only used for testing purposes.
|
||||
*/
|
||||
|
||||
class TestHandler extends \CodeIgniter\Log\Handlers\FileHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* Local storage for logs.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $logs = [];
|
||||
|
||||
/**
|
||||
* Where would the log be written?
|
||||
*/
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function __construct(array $config)
|
||||
{
|
||||
parent::__construct($config);
|
||||
$this->handles = $config['handles'] ?? [];
|
||||
$this->destination = $this->path . 'log-' . date('Y-m-d') . '.' . $this->fileExtension;
|
||||
|
||||
self::$logs = [];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Handles logging the message.
|
||||
* If the handler returns false, then execution of handlers
|
||||
* will stop. Any handlers that have not run, yet, will not
|
||||
* be run.
|
||||
*
|
||||
* @param $level
|
||||
* @param $message
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function handle($level, $message): bool
|
||||
{
|
||||
$date = date($this->dateFormat);
|
||||
|
||||
self::$logs[] = strtoupper($level) . ' - ' . $date . ' --> ' . $message;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public static function getLogs()
|
||||
{
|
||||
return self::$logs;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
}
|
||||
@@ -1,82 +0,0 @@
|
||||
<?php namespace Tests\Support\Log;
|
||||
|
||||
use CodeIgniter\Log\Logger;
|
||||
|
||||
class TestLogger extends Logger
|
||||
{
|
||||
|
||||
protected static $op_logs = [];
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The log method is overridden so that we can store log history during
|
||||
* the tests to allow us to check ->assertLogged() methods.
|
||||
*
|
||||
* @param string $level
|
||||
* @param string $message
|
||||
* @param array $context
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function log($level, $message, array $context = []): bool
|
||||
{
|
||||
// While this requires duplicate work, we want to ensure
|
||||
// we have the final message to test against.
|
||||
$log_message = $this->interpolate($message, $context);
|
||||
|
||||
// Determine the file and line by finding the first
|
||||
// backtrace that is not part of our logging system.
|
||||
$trace = debug_backtrace();
|
||||
$file = null;
|
||||
|
||||
foreach ($trace as $row)
|
||||
{
|
||||
if (! in_array($row['function'], ['log', 'log_message']))
|
||||
{
|
||||
$file = basename($row['file'] ?? '');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self::$op_logs[] = [
|
||||
'level' => $level,
|
||||
'message' => $log_message,
|
||||
'file' => $file,
|
||||
];
|
||||
|
||||
// Let the parent do it's thing.
|
||||
return parent::log($level, $message, $context);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Used by CIUnitTestCase class to provide ->assertLogged() methods.
|
||||
*
|
||||
* @param string $level
|
||||
* @param string $message
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public static function didLog(string $level, $message)
|
||||
{
|
||||
foreach (self::$op_logs as $log)
|
||||
{
|
||||
if (strtolower($log['level']) === strtolower($level) && $message === $log['message'])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Expose cleanFileNames()
|
||||
public function cleanup($file)
|
||||
{
|
||||
return $this->cleanFileNames($file);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php namespace Tests\Support\MigrationTestMigrations\Database\Migrations;
|
||||
|
||||
class Migration_another_migration extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->forge->addField([
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 255,
|
||||
],
|
||||
]);
|
||||
$this->forge->createTable('foo', true);
|
||||
|
||||
$this->db->table('foo')->insert([
|
||||
'key' => 'foobar',
|
||||
]);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->forge->dropTable('foo', true);
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php namespace Tests\Support\MigrationTestMigrations\Database\Migrations;
|
||||
|
||||
class Migration_some_migration extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$this->forge->addField([
|
||||
'key' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 255,
|
||||
],
|
||||
]);
|
||||
$this->forge->createTable('foo', true);
|
||||
|
||||
$this->db->table('foo')->insert([
|
||||
'key' => 'foobar',
|
||||
]);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
$this->forge->dropTable('foo', true);
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php namespace Tests\Support\MigrationTestMigrations\Database\Migrations;
|
||||
|
||||
class Migration_another_migration extends \CodeIgniter\Database\Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
$fields = [
|
||||
'value' => [
|
||||
'type' => 'VARCHAR',
|
||||
'constraint' => 255,
|
||||
],
|
||||
];
|
||||
$this->forge->addColumn('foo', $fields);
|
||||
|
||||
$this->db->table('foo')->insert([
|
||||
'key' => 'foobar',
|
||||
'value' => 'raboof',
|
||||
]);
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
if ($this->db->tableExists('foo'))
|
||||
{
|
||||
$this->forge->dropColumn('foo', 'value');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php namespace Tests\Support;
|
||||
|
||||
use CodeIgniter\CodeIgniter;
|
||||
|
||||
class MockCodeIgniter extends CodeIgniter
|
||||
{
|
||||
protected function callExit($code)
|
||||
{
|
||||
// Do not call exit() in testing.
|
||||
}
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Common Functions for testing
|
||||
*
|
||||
* Several application-wide utility methods.
|
||||
*
|
||||
* @package CodeIgniter
|
||||
* @category Common Functions
|
||||
*/
|
||||
|
||||
if (! function_exists('is_cli'))
|
||||
{
|
||||
/**
|
||||
* Is CLI?
|
||||
*
|
||||
* Test to see if a request was made from the command line.
|
||||
* You can set the return value for testing.
|
||||
*
|
||||
* @param boolean $new_return return value to set
|
||||
* @return boolean
|
||||
*/
|
||||
function is_cli(bool $new_return = null): bool
|
||||
{
|
||||
// PHPUnit always runs via CLI.
|
||||
static $return_value = true;
|
||||
|
||||
if ($new_return !== null)
|
||||
{
|
||||
$return_value = $new_return;
|
||||
}
|
||||
|
||||
return $return_value;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
@@ -1,22 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class EntityModel extends Model
|
||||
{
|
||||
protected $table = 'job';
|
||||
|
||||
protected $returnType = '\Tests\Support\Models\SimpleEntity';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'int';
|
||||
|
||||
protected $deletedField = 'deleted_at';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'description',
|
||||
'created_at',
|
||||
];
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class EventModel extends Model
|
||||
{
|
||||
protected $table = 'user';
|
||||
|
||||
protected $returnType = 'array';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'datetime';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'email',
|
||||
'country',
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
protected $beforeInsert = ['beforeInsertMethod'];
|
||||
protected $afterInsert = ['afterInsertMethod'];
|
||||
protected $beforeUpdate = ['beforeUpdateMethod'];
|
||||
protected $afterUpdate = ['afterUpdateMethod'];
|
||||
protected $afterFind = ['afterFindMethod'];
|
||||
protected $afterDelete = ['afterDeleteMethod'];
|
||||
|
||||
// Holds stuff for testing events
|
||||
protected $tokens = [];
|
||||
|
||||
protected function beforeInsertMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'beforeInsert';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function afterInsertMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'afterInsert';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function beforeUpdateMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'beforeUpdate';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function afterUpdateMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'afterUpdate';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function afterFindMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'afterFind';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function afterDeleteMethod(array $data)
|
||||
{
|
||||
$this->tokens[] = 'afterDelete';
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
public function hasToken(string $token)
|
||||
{
|
||||
return in_array($token, $this->tokens);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class JobModel extends Model
|
||||
{
|
||||
protected $table = 'job';
|
||||
|
||||
protected $returnType = 'object';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'int';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'description',
|
||||
];
|
||||
|
||||
public $name = '';
|
||||
|
||||
public $description = '';
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class SecondaryModel extends Model
|
||||
{
|
||||
protected $table = 'secondary';
|
||||
|
||||
protected $primaryKey = 'id';
|
||||
|
||||
protected $returnType = 'object';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'int';
|
||||
|
||||
protected $allowedFields = [
|
||||
'key',
|
||||
'value',
|
||||
];
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Entity;
|
||||
|
||||
/**
|
||||
* Class SimpleEntity
|
||||
*
|
||||
* Simple Entity-type class for testing creating and saving entities
|
||||
* in the model so we can support Entity/Repository type patterns.
|
||||
*
|
||||
* @package Tests\Support\Models
|
||||
*/
|
||||
class SimpleEntity extends Entity
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class UserModel extends Model
|
||||
{
|
||||
protected $table = 'user';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'email',
|
||||
'country',
|
||||
'deleted_at',
|
||||
];
|
||||
|
||||
protected $returnType = 'object';
|
||||
|
||||
protected $useSoftDeletes = true;
|
||||
|
||||
protected $dateFormat = 'datetime';
|
||||
|
||||
public $name = '';
|
||||
|
||||
public $email = '';
|
||||
|
||||
public $country = '';
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ValidErrorsModel extends Model
|
||||
{
|
||||
protected $table = 'job';
|
||||
|
||||
protected $returnType = 'object';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'int';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'description',
|
||||
];
|
||||
|
||||
protected $validationRules = [
|
||||
'name' => [
|
||||
'required',
|
||||
'min_length[10]',
|
||||
'errors' => [
|
||||
'min_length' => 'Minimum Length Error',
|
||||
]
|
||||
],
|
||||
'token' => 'in_list[{id}]',
|
||||
];
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
<?php namespace Tests\Support\Models;
|
||||
|
||||
use CodeIgniter\Model;
|
||||
|
||||
class ValidModel extends Model
|
||||
{
|
||||
protected $table = 'job';
|
||||
|
||||
protected $returnType = 'object';
|
||||
|
||||
protected $useSoftDeletes = false;
|
||||
|
||||
protected $dateFormat = 'int';
|
||||
|
||||
protected $allowedFields = [
|
||||
'name',
|
||||
'description',
|
||||
];
|
||||
|
||||
protected $validationRules = [
|
||||
'name' => [
|
||||
'required',
|
||||
'min_length[3]',
|
||||
],
|
||||
'token' => 'in_list[{id}]',
|
||||
];
|
||||
|
||||
protected $validationMessages = [
|
||||
'name' => [
|
||||
'required' => 'You forgot to name the baby.',
|
||||
'min_length' => 'Too short, man!',
|
||||
],
|
||||
];
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\RESTful;
|
||||
|
||||
use CodeIgniter\RESTful\ResourceController;
|
||||
|
||||
class MockResourceController extends ResourceController
|
||||
{
|
||||
|
||||
public function getModel()
|
||||
{
|
||||
return $this->model;
|
||||
}
|
||||
|
||||
public function getModelName()
|
||||
{
|
||||
return $this->modelName;
|
||||
}
|
||||
|
||||
public function getFormat()
|
||||
{
|
||||
return $this->format;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\RESTful;
|
||||
|
||||
use CodeIgniter\RESTful\ResourcePresenter;
|
||||
|
||||
class MockResourcePresenter extends ResourcePresenter
|
||||
{
|
||||
|
||||
public function getModel()
|
||||
{
|
||||
return $this->model;
|
||||
}
|
||||
|
||||
public function getModelName()
|
||||
{
|
||||
return $this->modelName;
|
||||
}
|
||||
|
||||
public function getFormat()
|
||||
{
|
||||
return $this->format;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\RESTful;
|
||||
|
||||
use CodeIgniter\RESTful\ResourceController;
|
||||
|
||||
/**
|
||||
* An extendable controller to provide a RESTful API for a resource.
|
||||
*/
|
||||
class Worker extends ResourceController
|
||||
{
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\RESTful;
|
||||
|
||||
use CodeIgniter\RESTful\ResourcePresenter;
|
||||
|
||||
/**
|
||||
* An extendable controller to provide a RESTful API for a resource.
|
||||
*/
|
||||
class Worker2 extends ResourcePresenter
|
||||
{
|
||||
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
<?php namespace Tests\Support\Security;
|
||||
|
||||
use CodeIgniter\Security\Security;
|
||||
use CodeIgniter\HTTP\RequestInterface;
|
||||
|
||||
class MockSecurity extends Security
|
||||
{
|
||||
public function CSRFSetCookie(RequestInterface $request)
|
||||
{
|
||||
$_COOKIE['csrf_cookie_name'] = $this->CSRFHash;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,70 +0,0 @@
|
||||
<?php namespace CodeIgniter;
|
||||
|
||||
use CIUnitTestCase;
|
||||
use Config\Services as ConfigServices;
|
||||
|
||||
/**
|
||||
* Services class for testing.
|
||||
*/
|
||||
class Services
|
||||
{
|
||||
/**
|
||||
* Mock objects for testing which are returned if exist.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static protected $mocks = [];
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Reset shared instances and mocks for testing.
|
||||
*/
|
||||
public static function reset()
|
||||
{
|
||||
static::$mocks = [];
|
||||
|
||||
CIUnitTestCase::setPrivateProperty(ConfigServices::class, 'instances', []);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Inject mock object for testing.
|
||||
*
|
||||
* @param string $name
|
||||
* @param $mock
|
||||
*/
|
||||
public static function injectMock(string $name, $mock)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
static::$mocks[$name] = $mock;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Returns a service
|
||||
*
|
||||
* @param string $name
|
||||
* @param array $arguments
|
||||
*/
|
||||
public static function __callStatic(string $name, array $arguments)
|
||||
{
|
||||
$name = strtolower($name);
|
||||
|
||||
// Returns mock if exists
|
||||
if (isset(static::$mocks[$name]))
|
||||
{
|
||||
return static::$mocks[$name];
|
||||
}
|
||||
|
||||
if (method_exists(ConfigServices::class, $name))
|
||||
{
|
||||
return ConfigServices::$name(...$arguments);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
<?php namespace Tests\Support\Session;
|
||||
|
||||
use CodeIgniter\Session\Session;
|
||||
|
||||
/**
|
||||
* Class MockSession
|
||||
*
|
||||
* Provides a safe way to test the Session class itself,
|
||||
* that doesn't interact with the session or cookies at all.
|
||||
*/
|
||||
class MockSession extends Session
|
||||
{
|
||||
/**
|
||||
* Holds our "cookie" data.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
public $cookies = [];
|
||||
|
||||
public $didRegenerate = false;
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Sets the driver as the session handler in PHP.
|
||||
* Extracted for easier testing.
|
||||
*/
|
||||
protected function setSaveHandler()
|
||||
{
|
||||
// session_set_save_handler($this->driver, true);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Starts the session.
|
||||
* Extracted for testing reasons.
|
||||
*/
|
||||
protected function startSession()
|
||||
{
|
||||
// session_start();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Takes care of setting the cookie on the client side.
|
||||
* Extracted for testing reasons.
|
||||
*/
|
||||
protected function setCookie()
|
||||
{
|
||||
$this->cookies[] = [
|
||||
$this->sessionCookieName,
|
||||
session_id(),
|
||||
(empty($this->sessionExpiration) ? 0 : time() + $this->sessionExpiration),
|
||||
$this->cookiePath,
|
||||
$this->cookieDomain,
|
||||
$this->cookieSecure,
|
||||
true,
|
||||
];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function regenerate(bool $destroy = false)
|
||||
{
|
||||
$this->didRegenerate = true;
|
||||
$_SESSION['__ci_last_regenerate'] = time();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Support;
|
||||
|
||||
use CodeIgniter\Entity;
|
||||
|
||||
class SomeEntity extends Entity
|
||||
{
|
||||
protected $attributes = [
|
||||
'foo' => null,
|
||||
'bar' => null,
|
||||
];
|
||||
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php namespace Tests\Support\Validation;
|
||||
|
||||
class TestRules {
|
||||
|
||||
public function customError(string $str, string &$error = null)
|
||||
{
|
||||
$error = 'My lovely error';
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
}
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
@@ -1,17 +0,0 @@
|
||||
<?php
|
||||
namespace Tests\Support\View;
|
||||
|
||||
class MockTable extends \CodeIgniter\View\Table {
|
||||
|
||||
// Override inaccessible protected method
|
||||
public function __call($method, $params)
|
||||
{
|
||||
if (is_callable([$this, '_' . $method]))
|
||||
{
|
||||
return call_user_func_array([$this, '_' . $method], $params);
|
||||
}
|
||||
|
||||
throw new BadMethodCallException('Method ' . $method . ' was not found');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
<?php namespace Tests\Support\View;
|
||||
|
||||
/**
|
||||
* Class SampleClass
|
||||
*
|
||||
* This class is only used to provide a reference point
|
||||
* during tests to make sure that things work as expected.
|
||||
*/
|
||||
|
||||
class SampleClass {
|
||||
|
||||
public function index()
|
||||
{
|
||||
return 'Hello World';
|
||||
}
|
||||
|
||||
public function hello()
|
||||
{
|
||||
return 'Hello';
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function echobox($params)
|
||||
{
|
||||
if (is_array($params))
|
||||
{
|
||||
$params = implode(',', $params);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public static function staticEcho($params)
|
||||
{
|
||||
if (is_array($params))
|
||||
{
|
||||
$params = implode(',', $params);
|
||||
}
|
||||
|
||||
return $params;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
public function work($p1, $p2, $p4)
|
||||
{
|
||||
return 'Right on';
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
<h1><?= $testString ?></h1>
|
||||
@@ -1 +0,0 @@
|
||||
<h1>{testString}</h1>
|
||||
@@ -1,32 +0,0 @@
|
||||
<?php
|
||||
ini_set('error_reporting', E_ALL);
|
||||
;
|
||||
ini_set('display_errors', '1');
|
||||
ini_set('display_startup_errors', '1');
|
||||
|
||||
// Make sure it recognizes that we're testing.
|
||||
$_SERVER['CI_ENVIRONMENT'] = 'testing';
|
||||
define('ENVIRONMENT', 'testing');
|
||||
|
||||
// Load our paths config file
|
||||
require __DIR__ . '/../../app/Config/Paths.php';
|
||||
|
||||
// path to the directory that holds the front controller (index.php)
|
||||
define('FCPATH', realpath(__DIR__ . '/../../') . '/public' . DIRECTORY_SEPARATOR);
|
||||
|
||||
// The path to the "tests" directory
|
||||
define('TESTPATH', realpath(__DIR__ . '/../') . DIRECTORY_SEPARATOR);
|
||||
|
||||
define('SUPPORTPATH', realpath(TESTPATH . '_support/') . DIRECTORY_SEPARATOR);
|
||||
|
||||
// Set environment values that would otherwise stop the framework from functioning during tests.
|
||||
if (! isset($_SERVER['app.baseURL']))
|
||||
{
|
||||
$_SERVER['app.baseURL'] = 'http://example.com';
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Load our TestCase
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
require __DIR__ . '/CIUnitTestCase.php';
|
||||
@@ -1,70 +0,0 @@
|
||||
|
||||
|
||||
Code Coverage Report:
|
||||
2016-03-31 06:36:22
|
||||
|
||||
Summary:
|
||||
Classes: 29.51% (18/61)
|
||||
Methods: 42.91% (227/529)
|
||||
Lines: 53.58% (1967/3671)
|
||||
|
||||
\CodeIgniter::CodeIgniter
|
||||
Methods: 28.57% ( 4/14) Lines: 69.11% ( 85/123)
|
||||
\CodeIgniter::Controller
|
||||
Methods: 0.00% ( 0/ 2) Lines: 66.67% ( 6/ 9)
|
||||
\CodeIgniter\Autoloader::Autoloader
|
||||
Methods: 42.86% ( 3/ 7) Lines: 89.36% ( 42/ 47)
|
||||
\CodeIgniter\Autoloader::FileLocator
|
||||
Methods: 100.00% ( 3/ 3) Lines: 100.00% ( 39/ 39)
|
||||
\CodeIgniter\CLI::CLI
|
||||
Methods: 6.25% ( 1/16) Lines: 2.54% ( 3/118)
|
||||
\CodeIgniter\Config::AutoloadConfig
|
||||
Methods: 100.00% ( 1/ 1) Lines: 100.00% ( 52/ 52)
|
||||
\CodeIgniter\Config::BaseConfig
|
||||
Methods: 50.00% ( 1/ 2) Lines: 83.33% ( 15/ 18)
|
||||
\CodeIgniter\Config::DotEnv
|
||||
Methods: 62.50% ( 5/ 8) Lines: 89.29% ( 50/ 56)
|
||||
\CodeIgniter\Database::BaseBuilder
|
||||
Methods: 43.33% (39/90) Lines: 62.25% (460/739)
|
||||
\CodeIgniter\Database::BaseConnection
|
||||
Methods: 0.00% ( 0/17) Lines: 3.33% ( 2/ 60)
|
||||
\CodeIgniter\Database::BaseQuery
|
||||
Methods: 64.71% (11/17) Lines: 74.44% ( 67/ 90)
|
||||
\CodeIgniter\Debug::Exceptions
|
||||
Methods: 10.00% ( 1/10) Lines: 2.91% ( 3/103)
|
||||
\CodeIgniter\Debug::Timer
|
||||
Methods: 75.00% ( 3/ 4) Lines: 95.24% ( 20/ 21)
|
||||
\CodeIgniter\HTTP::CLIRequest
|
||||
Methods: 33.33% ( 2/ 6) Lines: 40.00% ( 14/ 35)
|
||||
\CodeIgniter\HTTP::CURLRequest
|
||||
Methods: 62.50% (10/16) Lines: 68.49% (100/146)
|
||||
\CodeIgniter\HTTP::Header
|
||||
Methods: 88.89% ( 8/ 9) Lines: 96.88% ( 31/ 32)
|
||||
\CodeIgniter\HTTP::IncomingRequest
|
||||
Methods: 60.00% ( 6/10) Lines: 54.05% ( 40/ 74)
|
||||
\CodeIgniter\HTTP::Message
|
||||
Methods: 78.57% (11/14) Lines: 86.21% ( 50/ 58)
|
||||
\CodeIgniter\HTTP::Negotiate
|
||||
Methods: 75.00% ( 9/12) Lines: 87.65% ( 71/ 81)
|
||||
\CodeIgniter\HTTP::Request
|
||||
Methods: 57.14% ( 4/ 7) Lines: 45.79% ( 49/107)
|
||||
\CodeIgniter\HTTP::Response
|
||||
Methods: 53.85% ( 7/13) Lines: 79.01% ( 64/ 81)
|
||||
\CodeIgniter\HTTP::URI
|
||||
Methods: 81.82% (27/33) Lines: 93.44% (171/183)
|
||||
\CodeIgniter\HTTP\Files::FileCollection
|
||||
Methods: 66.67% ( 4/ 6) Lines: 96.49% ( 55/ 57)
|
||||
\CodeIgniter\HTTP\Files::UploadedFile
|
||||
Methods: 42.86% ( 6/14) Lines: 39.22% ( 20/ 51)
|
||||
\CodeIgniter\Hooks::Hooks
|
||||
Methods: 66.67% ( 4/ 6) Lines: 92.31% ( 36/ 39)
|
||||
\CodeIgniter\Log::Logger
|
||||
Methods: 76.92% (10/13) Lines: 92.05% ( 81/ 88)
|
||||
\CodeIgniter\Router::RouteCollection
|
||||
Methods: 74.36% (29/39) Lines: 79.64% (133/167)
|
||||
\CodeIgniter\Router::Router
|
||||
Methods: 37.50% ( 6/16) Lines: 78.57% ( 77/ 98)
|
||||
\CodeIgniter\Security::Security
|
||||
Methods: 100.00% ( 6/ 6) Lines: 100.00% ( 50/ 50)
|
||||
\CodeIgniter\View::View
|
||||
Methods: 85.71% ( 6/ 7) Lines: 97.14% ( 34/ 35)
|
||||