Browse Source

Removed Tests from GIT.

Updated DB Schema with current table structure.

Signed-off-by: Rick Hays <rhays@haysgang.com>
master
Rick Hays 6 years ago
parent
commit
0ee1c5b006
  1. 39
      app/Database/DB_schema
  2. 5
      tests/_support/Autoloader/UnnamespacedClass.php
  3. 8
      tests/_support/CIDatabaseTestCase.php
  4. 8
      tests/_support/CIUnitTestCase.php
  5. 198
      tests/_support/Cache/Handlers/MockHandler.php
  6. 13
      tests/_support/Commands/AbstractInfo.php
  7. 36
      tests/_support/Commands/AppInfo.php
  8. 18
      tests/_support/Commands/CommandsTestStreamFilter.php
  9. 18
      tests/_support/Config/BadRegistrar.php
  10. 34
      tests/_support/Config/MockAppConfig.php
  11. 21
      tests/_support/Config/MockAutoload.php
  12. 32
      tests/_support/Config/MockCLIConfig.php
  13. 103
      tests/_support/Config/MockLogger.php
  14. 28
      tests/_support/Config/MockServices.php
  15. 27
      tests/_support/Config/Registrar.php
  16. 7
      tests/_support/Config/Routes.php
  17. 77
      tests/_support/Controllers/Popcorn.php
  18. 148
      tests/_support/Database/Migrations/20160428212500_Create_test_tables.php
  19. 15
      tests/_support/Database/MockBuilder.php
  20. 298
      tests/_support/Database/MockConnection.php
  21. 8
      tests/_support/Database/MockQuery.php
  22. 93
      tests/_support/Database/MockResult.php
  23. 7
      tests/_support/Database/MockTestClass.php
  24. 78
      tests/_support/Database/Seeds/CITestSeeder.php
  25. 24
      tests/_support/Database/SupportMigrations/001_Some_migration.php
  26. 148
      tests/_support/DatabaseTestMigrations/Database/Migrations/20160428212500_Create_test_tables.php
  27. 66
      tests/_support/Events/MockEvents.php
  28. 6
      tests/_support/Files/able/apple.php
  29. 6
      tests/_support/Files/able/fig_3.php
  30. 6
      tests/_support/Files/able/prune_ripe.php
  31. 6
      tests/_support/Files/baker/banana.php
  32. 1
      tests/_support/HTTP/Files/CookiesHolder.txt
  33. 1
      tests/_support/HTTP/Files/tmp/fileA.txt
  34. 1
      tests/_support/HTTP/Files/tmp/fileB.txt
  35. 52
      tests/_support/HTTP/MockCURLRequest.php
  36. 17
      tests/_support/HTTP/MockIncomingRequest.php
  37. 31
      tests/_support/HTTP/MockResponse.php
  38. BIN
      tests/_support/Images/EXIFsamples/down-mirrored.jpg
  39. BIN
      tests/_support/Images/EXIFsamples/down.jpg
  40. BIN
      tests/_support/Images/EXIFsamples/left-mirrored.jpg
  41. BIN
      tests/_support/Images/EXIFsamples/left.jpg
  42. BIN
      tests/_support/Images/EXIFsamples/right-mirrored.jpg
  43. BIN
      tests/_support/Images/EXIFsamples/right.jpg
  44. BIN
      tests/_support/Images/EXIFsamples/up-mirrored.jpg
  45. BIN
      tests/_support/Images/EXIFsamples/up.jpg
  46. BIN
      tests/_support/Images/Steveston_dusk.JPG
  47. BIN
      tests/_support/Images/ci-logo.gif
  48. BIN
      tests/_support/Images/ci-logo.jpeg
  49. BIN
      tests/_support/Images/ci-logo.png
  50. 61
      tests/_support/Language/MockLanguage.php
  51. 27
      tests/_support/Language/SecondMockLanguage.php
  52. 8
      tests/_support/Language/ab-CD/Allin.php
  53. 8
      tests/_support/Language/ab/Allin.php
  54. 6
      tests/_support/Language/en-ZZ/More.php
  55. 8
      tests/_support/Language/en/Allin.php
  56. 20
      tests/_support/Language/en/Core.php
  57. 7
      tests/_support/Language/en/More.php
  58. 5
      tests/_support/Language/ru/Language.php
  59. 25
      tests/_support/Log/Handlers/MockChromeHandler.php
  60. 25
      tests/_support/Log/Handlers/MockFileHandler.php
  61. 64
      tests/_support/Log/Handlers/TestHandler.php
  62. 82
      tests/_support/Log/TestLogger.php
  63. 24
      tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102300_Another_migration.py
  64. 24
      tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102301_Some_migration.php
  65. 28
      tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102302_Another_migration.php
  66. 11
      tests/_support/MockCodeIgniter.php
  67. 37
      tests/_support/MockCommon.php
  68. 22
      tests/_support/Models/EntityModel.php
  69. 79
      tests/_support/Models/EventModel.php
  70. 23
      tests/_support/Models/JobModel.php
  71. 21
      tests/_support/Models/SecondaryModel.php
  72. 16
      tests/_support/Models/SimpleEntity.php
  73. 27
      tests/_support/Models/UserModel.php
  74. 30
      tests/_support/Models/ValidErrorsModel.php
  75. 34
      tests/_support/Models/ValidModel.php
  76. 24
      tests/_support/RESTful/MockResourceController.php
  77. 24
      tests/_support/RESTful/MockResourcePresenter.php
  78. 11
      tests/_support/RESTful/Worker.php
  79. 12
      tests/_support/RESTful/Worker2.php
  80. 17
      tests/_support/Security/MockSecurity.php
  81. 70
      tests/_support/Services.php
  82. 72
      tests/_support/Session/MockSession.php
  83. 14
      tests/_support/SomeEntity.php
  84. 14
      tests/_support/Validation/TestRules.php
  85. BIN
      tests/_support/Validation/uploads/phpUxc0ty
  86. 17
      tests/_support/View/MockTable.php
  87. 52
      tests/_support/View/SampleClass.php
  88. 1
      tests/_support/View/Views/simple.php
  89. 1
      tests/_support/View/Views/simpler.php
  90. 32
      tests/_support/_bootstrap.php
  91. 70
      tests/_support/coverage.txt

39
app/Database/DB_schema

@ -1,24 +1,26 @@
create table countries create table Log
( (
id INTEGER id INTEGER
primary key autoincrement, primary key autoincrement,
Country text not null, IP text not null,
CountryCode text not null, City text not null,
FlagURL text not null, State text not null,
Wins int default 0 not null, Country text not null,
Loses int default 0 not null, DateTime date
DateCreated date,
DateUpdated date,
DateDeleted date
); );
create unique index countries_Country create table plays
on countries (Country); (
id INTEGER
create unique index countries_CountryCode primary key autoincrement,
on countries (CountryCode); 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 create table users
( (
@ -27,10 +29,13 @@ create table users
UserName text not null, UserName text not null,
Wins int default 0 not null, Wins int default 0 not null,
Loses int default 0 not null, Loses int default 0 not null,
Ties int default 0 not null,
IP text not null, IP text not null,
City text not null, City text not null,
State text not null, State text not null,
Country text not null, Country text not null,
CountryCode text not null,
FlagURL text not null,
DateCreated date, DateCreated date,
DateUpdated date, DateUpdated date,
DateDeleted date DateDeleted date

5
tests/_support/Autoloader/UnnamespacedClass.php

@ -1,5 +0,0 @@
<?php
class UnnamespacedClass
{
}

8
tests/_support/CIDatabaseTestCase.php

@ -1,8 +0,0 @@
<?php
use CodeIgniter\Test;
class CIDatabaseTestCase extends Test\CIDatabaseTestCase
{
}

8
tests/_support/CIUnitTestCase.php

@ -1,8 +0,0 @@
<?php
use CodeIgniter\Test;
class CIUnitTestCase extends Test\CIUnitTestCase
{
}

198
tests/_support/Cache/Handlers/MockHandler.php

@ -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;
}
//--------------------------------------------------------------------
}

13
tests/_support/Commands/AbstractInfo.php

@ -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.';
}

36
tests/_support/Commands/AppInfo.php

@ -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');
}
}

18
tests/_support/Commands/CommandsTestStreamFilter.php

@ -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');

18
tests/_support/Config/BadRegistrar.php

@ -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';
}
}

34
tests/_support/Config/MockAppConfig.php

@ -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',
];
}

21
tests/_support/Config/MockAutoload.php

@ -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();
}
//--------------------------------------------------------------------
}

32
tests/_support/Config/MockCLIConfig.php

@ -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',
];
}

103
tests/_support/Config/MockLogger.php

@ -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',
],
],
];
}

28
tests/_support/Config/MockServices.php

@ -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());
}
}

27
tests/_support/Config/Registrar.php

@ -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',
],
];
}
}

7
tests/_support/Config/Routes.php

@ -1,7 +0,0 @@
<?php
/**
* This is a simple file to include for testing the RouteCollection class.
*/
$routes->add('testing', 'TestController::index');

77
tests/_support/Controllers/Popcorn.php

@ -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>');
}
}

148
tests/_support/Database/Migrations/20160428212500_Create_test_tables.php

@ -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);
}
//--------------------------------------------------------------------
}

15
tests/_support/Database/MockBuilder.php

@ -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);
}
//--------------------------------------------------------------------
}

298
tests/_support/Database/MockConnection.php

@ -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;
}
//--------------------------------------------------------------------
}

8
tests/_support/Database/MockQuery.php

@ -1,8 +0,0 @@
<?php namespace Tests\Support\Database;
use CodeIgniter\Database\Query;
class MockQuery extends Query
{
}

93
tests/_support/Database/MockResult.php

@ -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')
{
}
//--------------------------------------------------------------------
}

7
tests/_support/Database/MockTestClass.php

@ -1,7 +0,0 @@
<?php
namespace Tests\Support\Database;
class MockTestClass
{
}

78
tests/_support/Database/Seeds/CITestSeeder.php

@ -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);
}
}
}
//--------------------------------------------------------------------
}

24
tests/_support/Database/SupportMigrations/001_Some_migration.php

@ -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);
}
}

148
tests/_support/DatabaseTestMigrations/Database/Migrations/20160428212500_Create_test_tables.php

@ -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);
}
//--------------------------------------------------------------------
}

66
tests/_support/Events/MockEvents.php

@ -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;
}
}

6
tests/_support/Files/able/apple.php

@ -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.
*/

6
tests/_support/Files/able/fig_3.php

@ -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.
*/

6
tests/_support/Files/able/prune_ripe.php

@ -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.
*/

6
tests/_support/Files/baker/banana.php

@ -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
tests/_support/HTTP/Files/CookiesHolder.txt

@ -1 +0,0 @@

1
tests/_support/HTTP/Files/tmp/fileA.txt

@ -1 +0,0 @@

1
tests/_support/HTTP/Files/tmp/fileB.txt

@ -1 +0,0 @@

52
tests/_support/HTTP/MockCURLRequest.php

@ -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;
}
}

17
tests/_support/HTTP/MockIncomingRequest.php

@ -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...
}
}

31
tests/_support/HTTP/MockResponse.php

@ -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;
}
}

BIN
tests/_support/Images/EXIFsamples/down-mirrored.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

BIN
tests/_support/Images/EXIFsamples/down.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

BIN
tests/_support/Images/EXIFsamples/left-mirrored.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

BIN
tests/_support/Images/EXIFsamples/left.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

BIN
tests/_support/Images/EXIFsamples/right-mirrored.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

BIN
tests/_support/Images/EXIFsamples/right.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

BIN
tests/_support/Images/EXIFsamples/up-mirrored.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

BIN
tests/_support/Images/EXIFsamples/up.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

BIN
tests/_support/Images/Steveston_dusk.JPG

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

BIN
tests/_support/Images/ci-logo.gif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

BIN
tests/_support/Images/ci-logo.jpeg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

BIN
tests/_support/Images/ci-logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

61
tests/_support/Language/MockLanguage.php

@ -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;
}
}

27
tests/_support/Language/SecondMockLanguage.php

@ -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];
}
}

8
tests/_support/Language/ab-CD/Allin.php

@ -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',
];

8
tests/_support/Language/ab/Allin.php

@ -1,8 +0,0 @@
<?php
// seven deadly sins
return [
'two' => 'gluttony',
'tre' => 'greed',
'six' => 'envy',
'sev' => 'pride',
];

6
tests/_support/Language/en-ZZ/More.php

@ -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',
];

8
tests/_support/Language/en/Allin.php

@ -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',
];

20
tests/_support/Language/en/Core.php

@ -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
];

7
tests/_support/Language/en/More.php

@ -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',
];

5
tests/_support/Language/ru/Language.php

@ -1,5 +0,0 @@
<?php
return [
'languageGetLineInvalidArgumentException' => 'Whatever this would be, translated',
];

25
tests/_support/Log/Handlers/MockChromeHandler.php

@ -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];
}
}

25
tests/_support/Log/Handlers/MockFileHandler.php

@ -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;
}
}

64
tests/_support/Log/Handlers/TestHandler.php

@ -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;
}
//--------------------------------------------------------------------
}

82
tests/_support/Log/TestLogger.php

@ -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);
}
}

24
tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102300_Another_migration.py

@ -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);
}
}

24
tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102301_Some_migration.php

@ -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);
}
}

28
tests/_support/MigrationTestMigrations/Database/Migrations/2018-01-24-102302_Another_migration.php

@ -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');
}
}
}

11
tests/_support/MockCodeIgniter.php

@ -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.
}
}

37
tests/_support/MockCommon.php

@ -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;
}
}
//--------------------------------------------------------------------

22
tests/_support/Models/EntityModel.php

@ -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',
];
}

79
tests/_support/Models/EventModel.php

@ -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);
}
}

23
tests/_support/Models/JobModel.php

@ -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 = '';
}

21
tests/_support/Models/SecondaryModel.php

@ -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',
];
}

16
tests/_support/Models/SimpleEntity.php

@ -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
{
}

27
tests/_support/Models/UserModel.php

@ -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 = '';
}

30
tests/_support/Models/ValidErrorsModel.php

@ -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}]',
];
}

34
tests/_support/Models/ValidModel.php

@ -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!',
],
];
}

24
tests/_support/RESTful/MockResourceController.php

@ -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;
}
}

24
tests/_support/RESTful/MockResourcePresenter.php

@ -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;
}
}

11
tests/_support/RESTful/Worker.php

@ -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
{
}

12
tests/_support/RESTful/Worker2.php

@ -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
{
}

17
tests/_support/Security/MockSecurity.php

@ -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;
}
//--------------------------------------------------------------------
}

70
tests/_support/Services.php

@ -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);
}
}
//--------------------------------------------------------------------
}

72
tests/_support/Session/MockSession.php

@ -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();
}
//--------------------------------------------------------------------
}

14
tests/_support/SomeEntity.php

@ -1,14 +0,0 @@
<?php
namespace Tests\Support;
use CodeIgniter\Entity;
class SomeEntity extends Entity
{
protected $attributes = [
'foo' => null,
'bar' => null,
];
}

14
tests/_support/Validation/TestRules.php

@ -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;
}
//--------------------------------------------------------------------
}

BIN
tests/_support/Validation/uploads/phpUxc0ty

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

17
tests/_support/View/MockTable.php

@ -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');
}
}

52
tests/_support/View/SampleClass.php

@ -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
tests/_support/View/Views/simple.php

@ -1 +0,0 @@
<h1><?= $testString ?></h1>

1
tests/_support/View/Views/simpler.php

@ -1 +0,0 @@
<h1>{testString}</h1>

32
tests/_support/_bootstrap.php

@ -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';

70
tests/_support/coverage.txt

@ -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)
Loading…
Cancel
Save