HummingBirdAnimeClient/tests/AnimeClient/AnimeClientTestCase.php

165 lines
3.7 KiB
PHP
Raw Permalink Normal View History

<?php declare(strict_types=1);
/**
* Hummingbird Anime List Client
*
2018-08-22 13:48:27 -04:00
* An API client for Kitsu to manage anime and manga watch lists
*
2023-07-13 11:08:05 -04:00
* PHP version 8.1
*
2023-07-13 11:08:05 -04:00
* @copyright 2015 - 2023 Timothy J. Warren <tim@timshome.page>
* @license http://www.opensource.org/licenses/mit-license.html MIT License
2020-12-10 17:06:50 -05:00
* @version 5.2
2023-07-13 11:08:05 -04:00
* @link https://git.timshomepage.net/timw4mail/HummingBirdAnimeClient
*/
2015-10-19 12:50:46 -04:00
2017-02-15 11:49:38 -05:00
namespace Aviat\AnimeClient\Tests;
2022-03-04 12:19:47 -05:00
use Aviat\Ion\Di\{ContainerAware, ContainerInterface};
2016-10-20 22:32:17 -04:00
use Aviat\Ion\Json;
2022-03-04 12:19:47 -05:00
2020-03-12 09:52:45 -04:00
use Laminas\Diactoros\{
2017-01-12 15:41:20 -05:00
Response as HttpResponse,
ServerRequestFactory
};
2022-03-04 12:19:47 -05:00
use PHPUnit\Framework\TestCase;
use Spatie\Snapshots\MatchesSnapshots;
use function Aviat\Ion\_dir;
use function call_user_func_array;
2015-10-19 12:50:46 -04:00
2021-02-26 14:42:07 -05:00
use const Aviat\AnimeClient\{
DEFAULT_CONTROLLER,
2022-03-04 12:19:47 -05:00
SLUG_PATTERN,
2021-02-26 14:42:07 -05:00
};
2015-10-19 12:50:46 -04:00
/**
* Base class for TestCases
*/
2022-03-04 12:19:47 -05:00
class AnimeClientTestCase extends TestCase
{
2021-02-26 14:42:07 -05:00
use ContainerAware;
use MatchesSnapshots;
// Test directory constants
2023-05-19 10:56:23 -04:00
final public const ROOT_DIR = AC_TEST_ROOT_DIR;
final public const SRC_DIR = SRC_DIR;
final public const TEST_DATA_DIR = __DIR__ . '/test_data';
final public const TEST_VIEW_DIR = __DIR__ . '/test_views';
2021-02-26 14:42:07 -05:00
protected ContainerInterface $container;
2015-10-20 15:59:51 -04:00
2019-12-06 09:15:49 -05:00
public static function setUpBeforeClass(): void
2015-10-19 12:50:46 -04:00
{
2015-11-17 16:45:41 -05:00
// Remove test cache files
2020-03-12 09:52:45 -04:00
$files = glob(_dir(self::TEST_DATA_DIR, 'cache', '*.json'));
2015-11-17 16:45:41 -05:00
array_map('unlink', $files);
2015-10-19 12:50:46 -04:00
}
2022-03-04 12:19:47 -05:00
protected function setUp(): void
2015-10-19 12:50:46 -04:00
{
parent::setUp();
2015-10-20 15:59:51 -04:00
2015-10-19 12:50:46 -04:00
$config_array = [
2021-02-23 15:38:29 -05:00
'root' => self::ROOT_DIR,
2018-10-05 14:32:05 -04:00
'asset_path' => '/assets',
2021-02-03 10:27:04 -05:00
'img_cache_path' => _dir(self::ROOT_DIR, 'public/images'),
2020-03-12 09:52:45 -04:00
'data_cache_path' => _dir(self::TEST_DATA_DIR, 'cache'),
2017-01-10 21:13:44 -05:00
'cache' => [
'driver' => 'null',
2022-03-04 12:19:47 -05:00
'connection' => [],
2017-01-10 21:13:44 -05:00
],
2015-12-08 16:39:49 -05:00
'database' => [
'collection' => [
'type' => 'sqlite',
'host' => '',
'user' => '',
'pass' => '',
'port' => '',
'name' => 'default',
2022-03-04 12:19:47 -05:00
'database' => '',
2015-12-08 16:39:49 -05:00
'file' => ':memory:',
],
'cache' => [
'type' => 'sqlite',
'host' => '',
'user' => '',
'pass' => '',
'port' => '',
'name' => 'default',
2022-03-04 12:19:47 -05:00
'database' => '',
'file' => ':memory:',
2022-03-04 12:19:47 -05:00
],
2015-12-08 16:39:49 -05:00
],
2022-03-04 12:19:47 -05:00
'routes' => [],
2015-10-19 12:50:46 -04:00
];
2015-10-20 15:59:51 -04:00
2015-10-19 12:50:46 -04:00
// Set up DI container
2022-03-04 12:19:47 -05:00
$di = require self::ROOT_DIR . '/app/bootstrap.php';
2015-10-19 12:50:46 -04:00
$container = $di($config_array);
// Use mock session handler
2023-05-19 10:57:59 -04:00
$container->set('session-handler', static function (): TestSessionHandler {
$session_handler = new TestSessionHandler();
session_set_save_handler($session_handler, TRUE);
2022-03-04 12:19:47 -05:00
return $session_handler;
});
2015-10-19 12:50:46 -04:00
$this->container = $container;
}
/**
* Set arbitrary superglobal values for testing purposes
*
* @param array $supers
*/
2019-01-07 09:08:00 -05:00
public function setSuperGlobals($supers = []): void
2015-10-19 12:50:46 -04:00
{
$default = [
2020-12-11 14:26:54 -05:00
'_SERVER' => $GLOBALS['_SERVER'],
2015-10-19 12:50:46 -04:00
'_GET' => $_GET,
'_POST' => $_POST,
'_COOKIE' => $_COOKIE,
2022-03-04 12:19:47 -05:00
'_FILES' => $_FILES,
2015-10-19 12:50:46 -04:00
];
2022-03-04 12:19:47 -05:00
$request = call_user_func_array(
2023-05-19 10:56:23 -04:00
ServerRequestFactory::fromGlobals(...),
2020-12-11 14:26:54 -05:00
array_values(array_merge($default, $supers)),
);
$this->container->setInstance('request', $request);
2022-03-04 12:19:47 -05:00
$this->container->set('response', static fn () => new HttpResponse());
2015-10-19 12:50:46 -04:00
}
2015-10-21 15:43:51 -04:00
/**
* Simplify getting test data
*
* Takes multiple path arguments
*
* @return string - contents of the data file
*/
2019-01-07 09:08:00 -05:00
public function getMockFile(): string
{
$args = func_get_args();
2020-03-12 09:52:45 -04:00
array_unshift($args, self::TEST_DATA_DIR);
$filePath = implode(DIRECTORY_SEPARATOR, $args);
return file_get_contents($filePath);
}
/**
* Simplify getting mocked test data
*
* Takes multiple path arguments
*
2019-12-06 09:15:49 -05:00
* @param array $args
* @return mixed - the decoded data
*/
2021-02-26 14:42:07 -05:00
public function getMockFileData(mixed ...$args): mixed
{
$rawData = $this->getMockFile(...$args);
return Json::decode($rawData);
}
2015-10-19 12:50:46 -04:00
}
2022-03-04 12:19:47 -05:00
// End of AnimeClientTestCase.php