More test coverage
This commit is contained in:
parent
285a132d35
commit
fee09c50ae
@ -2,7 +2,10 @@
|
||||
<phpunit
|
||||
colors="true"
|
||||
stopOnFailure="false"
|
||||
bootstrap="tests/bootstrap.php">
|
||||
bootstrap="tests/bootstrap.php"
|
||||
beStrictAboutTestsThatDoNotTestAnything="true"
|
||||
checkForUnintentionallyCoveredCode="true"
|
||||
>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory suffix=".php">src/Aviat/Ion</directory>
|
||||
|
@ -8,6 +8,7 @@ use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Cookie\CookieJar;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use GuzzleHttp\Psr7\ResponseInterface;
|
||||
use GuzzleHttp\Exception\ClientException;
|
||||
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
use Aviat\AnimeClient\Model as BaseModel;
|
||||
@ -55,10 +56,11 @@ class API extends BaseModel {
|
||||
$this->client = new Client([
|
||||
'base_uri' => $this->base_url,
|
||||
'cookies' => TRUE,
|
||||
'http_errors' => FALSE,
|
||||
'defaults' => [
|
||||
'cookies' => $this->cookieJar,
|
||||
'headers' => [
|
||||
'User-Agent' => $_SERVER['HTTP_USER_AGENT'],
|
||||
'User-Agent' => "Tim's Anime Client/2.0",
|
||||
'Accept-Encoding' => 'application/json'
|
||||
],
|
||||
'timeout' => 5,
|
||||
@ -106,16 +108,16 @@ class API extends BaseModel {
|
||||
*/
|
||||
public function authenticate($username, $password)
|
||||
{
|
||||
$result = $this->post('https://hummingbird.me/api/v1/users/authenticate', [
|
||||
'body' => [
|
||||
$response = $this->post('https://hummingbird.me/api/v1/users/authenticate', [
|
||||
'form_params' => [
|
||||
'username' => $username,
|
||||
'password' => $password
|
||||
]
|
||||
]);
|
||||
|
||||
if ($result->getStatusCode() === 201)
|
||||
if ($response->getStatusCode() === 201)
|
||||
{
|
||||
return json_decode($result->getBody(), TRUE);
|
||||
return json_decode($response->getBody(), TRUE);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
81
tests/AnimeClient/Auth/HummingbirdAuthTest.php
Normal file
81
tests/AnimeClient/Auth/HummingbirdAuthTest.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
use Aura\Session\SessionFactory;
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Handler\MockHandler;
|
||||
use GuzzleHttp\HandlerStack;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\AnimeClient\Auth\HummingbirdAuth;
|
||||
|
||||
class HummingbirdAuthTest extends AnimeClient_TestCase {
|
||||
|
||||
static $session;
|
||||
static $sessionHandler;
|
||||
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
self::$session = (new SessionFactory)->newInstance([]);
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$auth = new HummingbirdAuth($this->container);
|
||||
$friend = new Friend($auth);
|
||||
$this->auth = $friend;
|
||||
$this->container->set('session', self::$session);
|
||||
}
|
||||
|
||||
public function dataAuthenticate()
|
||||
{
|
||||
$testToken = 'notReallyAValidTokenButThisIsATest';
|
||||
|
||||
return [
|
||||
'successful auth call' => [
|
||||
'username' => 'timw4mailtest',
|
||||
'password' => 'password',
|
||||
'response_data' => [
|
||||
'code' => 201,
|
||||
'body' => json_encode($testToken)
|
||||
],
|
||||
'session_value' => $testToken,
|
||||
'expected' => TRUE,
|
||||
],
|
||||
'unsuccessful auth call' => [
|
||||
'username' => 'foo',
|
||||
'password' => 'foobarbaz',
|
||||
'response_data' => [
|
||||
'code' => 401,
|
||||
'body' => '{"error":"Invalid credentials"}',
|
||||
],
|
||||
'session_value' => FALSE,
|
||||
'expected' => FALSE,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataAuthenticate
|
||||
*/
|
||||
public function testAuthenticate($username, $password, $response_data, $session_value, $expected)
|
||||
{
|
||||
$this->container->get('config')
|
||||
->set('hummingbird_username', $username);
|
||||
$model = new MockBaseApiModel($this->container);
|
||||
$mock = new MockHandler([
|
||||
new Response($response_data['code'], [], $response_data['body'])
|
||||
]);
|
||||
$handler = HandlerStack::create($mock);
|
||||
$client = new Client([
|
||||
'handler' => $handler,
|
||||
'http_errors' => FALSE // Don't throw an exception for 400/500 class status codes
|
||||
]);
|
||||
$model->__set('client', $client);
|
||||
$this->auth->__set('model', $model);
|
||||
|
||||
$actual = $this->auth->authenticate($password);
|
||||
$this->assertEquals($expected, $actual);
|
||||
|
||||
}
|
||||
}
|
@ -4,29 +4,12 @@ use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
use Aviat\AnimeClient\Model\Anime as AnimeModel;
|
||||
|
||||
class AnimeMock extends AnimeModel {
|
||||
|
||||
protected $transformed_data_file;
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
$this->transformed_data_file = __DIR__ . "/../../test_data/anime_list/anime-completed-transformed.json";
|
||||
}
|
||||
|
||||
protected function _get_list_from_api($status="all")
|
||||
{
|
||||
$data = json_decode(file_get_contents($this->transformed_data_file), TRUE);
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
class AnimeModelTest extends AnimeClient_TestCase {
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->animeModel = new Friend(new AnimeMock($this->container));
|
||||
$this->animeModel = new Friend(new TestAnimeModel($this->container));
|
||||
}
|
||||
|
||||
protected function _pluck_anime_titles($array)
|
||||
|
@ -1,24 +1,14 @@
|
||||
<?php
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Handler\MockHandler;
|
||||
use GuzzleHttp\HandlerStack;
|
||||
use GuzzleHttp\Psr7\Response;
|
||||
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
use Aviat\AnimeClient\Container;
|
||||
use Aviat\AnimeClient\Model\API as BaseApiModel;
|
||||
|
||||
class MockBaseApiModel extends BaseApiModel {
|
||||
|
||||
protected $base_url = 'https://httpbin.org/';
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
}
|
||||
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
}
|
||||
|
||||
class BaseApiModelTest extends AnimeClient_TestCase {
|
||||
|
||||
public function setUp()
|
||||
@ -229,4 +219,52 @@ class BaseApiModelTest extends AnimeClient_TestCase {
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
public function dataAuthenticate()
|
||||
{
|
||||
$test_token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4YTA5ZDk4Ny1iZWQxLTQyMTktYWVmOS0wMTcxYWVjYTE3ZWUiLCJzY29wZSI6WyJhbGwiXSwic3ViIjoxMDgwMTIsImlzcyI6MTQ0NTAxNzczNSwiZXhwIjoxNDUyOTY2NTM1fQ.fpha1ZDN9dSFAuHeJesfOP9pCk5-ZnZk4uv3zumRMY0';
|
||||
|
||||
return [
|
||||
'successful authentication' => [
|
||||
'username' => 'timw4mailtest',
|
||||
'password' => 'password',
|
||||
'response_data' => [
|
||||
'code' => 201,
|
||||
'body' => json_encode($test_token)
|
||||
],
|
||||
'expected' => $test_token
|
||||
],
|
||||
'failed authentication' => [
|
||||
'username' => 'foo',
|
||||
'password' => 'foobarbaz',
|
||||
'response_data' => [
|
||||
'code' => 401,
|
||||
'body' => '{"error":"Invalid credentials"}',
|
||||
],
|
||||
'expected' => FALSE
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataAuthenticate
|
||||
*/
|
||||
public function testAuthenticate($username, $password, $response_data, $expected)
|
||||
{
|
||||
$mock = new MockHandler([
|
||||
new Response($response_data['code'], [], $response_data['body'])
|
||||
]);
|
||||
$handler = HandlerStack::create($mock);
|
||||
$client = new Client([
|
||||
'handler' => $handler,
|
||||
'http_errors' => FALSE // Don't throw an exception for 400/500 class status codes
|
||||
]);
|
||||
|
||||
// Set the mock client
|
||||
$this->model->__set('client', $client);
|
||||
|
||||
// Check results based on mock data
|
||||
$actual = $this->model->authenticate($username, $password);
|
||||
$this->assertEquals($expected, $actual, "Incorrect method return value");
|
||||
}
|
||||
|
||||
}
|
73
tests/AnimeClient_TestCase.php
Normal file
73
tests/AnimeClient_TestCase.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
use Aura\Web\WebFactory;
|
||||
|
||||
use Aviat\AnimeClient\Config;
|
||||
|
||||
/**
|
||||
* Base class for TestCases
|
||||
*/
|
||||
class AnimeClient_TestCase extends PHPUnit_Framework_TestCase {
|
||||
protected $container;
|
||||
protected static $staticContainer;
|
||||
protected static $session_handler;
|
||||
|
||||
public static function setUpBeforeClass()
|
||||
{
|
||||
// Use mock session handler
|
||||
$session_handler = new TestSessionHandler();
|
||||
session_set_save_handler($session_handler, TRUE);
|
||||
self::$session_handler = $session_handler;
|
||||
}
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$config_array = [
|
||||
'asset_path' => '//localhost/assets/',
|
||||
'databaase' => [],
|
||||
'routing' => [
|
||||
|
||||
],
|
||||
'routes' => [
|
||||
'convention' => [
|
||||
'default_controller' => '',
|
||||
'default_method' => '',
|
||||
],
|
||||
'common' => [],
|
||||
'anime' => [],
|
||||
'manga' => []
|
||||
]
|
||||
];
|
||||
|
||||
// Set up DI container
|
||||
$di = require _dir(APP_DIR, 'bootstrap.php');
|
||||
$container = $di($config_array);
|
||||
$container->set('error-handler', new MockErrorHandler());
|
||||
$container->set('session-handler', self::$session_handler);
|
||||
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set arbitrary superglobal values for testing purposes
|
||||
*
|
||||
* @param array $supers
|
||||
* @return void
|
||||
*/
|
||||
public function setSuperGlobals($supers = [])
|
||||
{
|
||||
$default = [
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
'_COOKIE' => $_COOKIE,
|
||||
'_SERVER' => $_SERVER,
|
||||
'_FILES' => $_FILES
|
||||
];
|
||||
$web_factory = new WebFactory(array_merge($default,$supers));
|
||||
$this->container->set('request', $web_factory->newRequest());
|
||||
$this->container->set('response', $web_factory->newResponse());
|
||||
}
|
||||
}
|
||||
// End of AnimeClient_TestCase.php
|
@ -2,12 +2,6 @@
|
||||
|
||||
use Aviat\Ion\Enum;
|
||||
|
||||
class TestEnum extends Enum {
|
||||
const FOO = 'bar';
|
||||
const BAR = 'foo';
|
||||
const FOOBAR = 'baz';
|
||||
}
|
||||
|
||||
class EnumTest extends AnimeClient_TestCase {
|
||||
|
||||
protected $expectedConstList = [
|
||||
|
@ -2,36 +2,12 @@
|
||||
|
||||
use Aviat\Ion\Friend;
|
||||
|
||||
class GrandParentTestClass {
|
||||
protected $grandParentProtected = 84;
|
||||
}
|
||||
|
||||
class ParentTestClass extends GrandParentTestClass {
|
||||
protected $parentProtected = 47;
|
||||
private $parentPrivate = 654;
|
||||
}
|
||||
|
||||
class TestClass extends ParentTestClass {
|
||||
protected $protected = 356;
|
||||
private $private = 486;
|
||||
|
||||
protected function getProtected()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
private function getPrivate()
|
||||
{
|
||||
return 23;
|
||||
}
|
||||
}
|
||||
|
||||
class FriendTest extends AnimeClient_TestCase {
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$obj = new TestClass();
|
||||
$obj = new FriendTestClass();
|
||||
$this->friend = new Friend($obj);
|
||||
}
|
||||
|
||||
|
@ -1,23 +1,5 @@
|
||||
<?php
|
||||
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
|
||||
class TestTransformer extends AbstractTransformer {
|
||||
|
||||
public function transform($item)
|
||||
{
|
||||
$out = [];
|
||||
$genre_list = (array) $item;
|
||||
|
||||
foreach($genre_list as $genre)
|
||||
{
|
||||
$out[] = $genre['name'];
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
||||
class AbstractTransformerTest extends AnimeClient_TestCase {
|
||||
|
||||
protected $transformer;
|
||||
|
@ -2,33 +2,6 @@
|
||||
|
||||
include_once __DIR__ . "/../ViewTest.php";
|
||||
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\View;
|
||||
use Aviat\Ion\View\HtmlView;
|
||||
|
||||
class TestHtmlView extends HtmlView {
|
||||
protected function output() {
|
||||
$reflect = new ReflectionClass($this);
|
||||
$properties = $reflect->getProperties();
|
||||
$props = [];
|
||||
|
||||
foreach($properties as $reflectProp)
|
||||
{
|
||||
$reflectProp->setAccessible(TRUE);
|
||||
$props[$reflectProp->getName()] = $reflectProp->getValue($this);
|
||||
}
|
||||
|
||||
$view = new TestView($this->container);
|
||||
$friend = new Friend($view);
|
||||
foreach($props as $name => $val)
|
||||
{
|
||||
$friend->__set($name, $val);
|
||||
}
|
||||
|
||||
$friend->output();
|
||||
}
|
||||
}
|
||||
|
||||
class HtmlViewTest extends ViewTest {
|
||||
|
||||
protected $template_path;
|
||||
@ -36,13 +9,12 @@ class HtmlViewTest extends ViewTest {
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
$this->template_path = __DIR__ . "/../../test_views/";
|
||||
$this->view = new TestHtmlView($this->container);
|
||||
}
|
||||
|
||||
public function testRenderTemplate()
|
||||
{
|
||||
$path = $this->template_path . 'test_view.php';
|
||||
$path = _dir(TEST_VIEW_DIR, 'test_view.php');
|
||||
$expected = '<tag>foo</tag>';
|
||||
$actual = $this->view->render_template($path, [
|
||||
'var' => 'foo'
|
||||
|
@ -3,30 +3,6 @@
|
||||
include_once __DIR__ . "/../ViewTest.php";
|
||||
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\View\HttpView;
|
||||
|
||||
class TestHttpView extends HttpView {
|
||||
protected function output() {
|
||||
$reflect = new ReflectionClass($this);
|
||||
$properties = $reflect->getProperties();
|
||||
$props = [];
|
||||
|
||||
foreach($properties as $reflectProp)
|
||||
{
|
||||
$reflectProp->setAccessible(TRUE);
|
||||
$props[$reflectProp->getName()] = $reflectProp->getValue($this);
|
||||
}
|
||||
|
||||
$view = new TestView($this->container);
|
||||
$friend = new Friend($view);
|
||||
foreach($props as $name => $val)
|
||||
{
|
||||
$friend->__set($name, $val);
|
||||
}
|
||||
|
||||
$friend->output();
|
||||
}
|
||||
}
|
||||
|
||||
class HttpViewTest extends ViewTest {
|
||||
|
||||
|
@ -1,14 +1,9 @@
|
||||
<?php
|
||||
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\View\JsonView;
|
||||
|
||||
include_once __DIR__ . "/../ViewTest.php";
|
||||
|
||||
class TestJsonView extends JsonView {
|
||||
public function __destruct() {}
|
||||
}
|
||||
|
||||
class JsonViewTest extends ViewTest {
|
||||
|
||||
public function setUp()
|
||||
|
@ -2,11 +2,6 @@
|
||||
|
||||
use Aura\Web\WebFactory;
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\View;
|
||||
|
||||
class TestView extends View {
|
||||
|
||||
}
|
||||
|
||||
class ViewTest extends AnimeClient_TestCase {
|
||||
|
||||
|
53
tests/TestSessionHandler.php
Normal file
53
tests/TestSessionHandler.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
class TestSessionHandler implements SessionHandlerInterface {
|
||||
|
||||
public $data = [];
|
||||
public $save_path = __DIR__ . '/test_data/sessions';
|
||||
|
||||
public function close()
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$file = "$this->save_path/$id";
|
||||
if (file_exists($file))
|
||||
{
|
||||
@unlink($file);
|
||||
}
|
||||
$this->data[$id] = [];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
public function gc($maxLifetime)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
public function open($save_path, $name)
|
||||
{
|
||||
/*if ( ! array_key_exists($save_path, $this->data))
|
||||
{
|
||||
$this->save_path = $save_path;
|
||||
$this->data = [];
|
||||
}*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
public function read($id)
|
||||
{
|
||||
return json_decode(@file_get_contents("$this->save_path/$id"), TRUE);
|
||||
}
|
||||
|
||||
public function write($id, $data)
|
||||
{
|
||||
$file = "$this->save_path/$id";
|
||||
file_put_contents($file, json_encode($data));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
// End of TestSessionHandler.php
|
@ -2,11 +2,6 @@
|
||||
/**
|
||||
* Global setup for unit tests
|
||||
*/
|
||||
use Aura\Web\WebFactory;
|
||||
|
||||
use Aviat\AnimeClient\Config;
|
||||
use Aviat\Ion\Di\Container;
|
||||
use Aviat\AnimeClient\UrlGenerator;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Autoloaders
|
||||
@ -29,6 +24,8 @@ define('APP_DIR', _dir(ROOT_DIR, 'app'));
|
||||
define('CONF_DIR', _dir(APP_DIR, 'config'));
|
||||
define('SRC_DIR', _dir(ROOT_DIR, 'src'));
|
||||
define('BASE_DIR', _dir(SRC_DIR, 'Base'));
|
||||
define('TEST_DATA_DIR', _dir(__DIR__, 'test_data'));
|
||||
define('TEST_VIEW_DIR', _dir(__DIR__, 'test_views'));
|
||||
require _dir(ROOT_DIR, '/vendor/autoload.php');
|
||||
require _dir(SRC_DIR, '/functions.php');
|
||||
|
||||
@ -49,75 +46,26 @@ spl_autoload_register(function ($class) {
|
||||
}
|
||||
});
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Ini Settings
|
||||
// -----------------------------------------------------------------------------
|
||||
ini_set('session.use_cookies', 0);
|
||||
ini_set("session.use_only_cookies",0);
|
||||
ini_set("session.use_trans_sid",1);
|
||||
// Start session here to supress error about headers not sent
|
||||
session_start();
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Load base test case and mocks
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// Pre-define some superglobals
|
||||
$_SESSION = [];
|
||||
$_COOKIE = [];
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Mock the default error handler
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class MockErrorHandler {
|
||||
public function addDataTable($name, array $values=[]) {}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Define a base testcase class
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Base class for TestCases
|
||||
*/
|
||||
class AnimeClient_TestCase extends PHPUnit_Framework_TestCase {
|
||||
protected $container;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$config_array = [
|
||||
'asset_path' => '//localhost/assets/',
|
||||
'databaase' => [],
|
||||
'routing' => [
|
||||
|
||||
],
|
||||
'routes' => [
|
||||
'convention' => [
|
||||
'default_controller' => '',
|
||||
'default_method' => '',
|
||||
],
|
||||
'common' => [],
|
||||
'anime' => [],
|
||||
'manga' => []
|
||||
]
|
||||
];
|
||||
|
||||
$di = require _dir(APP_DIR, 'bootstrap.php');
|
||||
$container = $di($config_array);
|
||||
$container->set('error-handler', new MockErrorHandler());
|
||||
|
||||
$this->container = $container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set arbitrary superglobal values for testing purposes
|
||||
*
|
||||
* @param array $supers
|
||||
* @return void
|
||||
*/
|
||||
public function setSuperGlobals($supers = [])
|
||||
{
|
||||
$default = [
|
||||
'_GET' => $_GET,
|
||||
'_POST' => $_POST,
|
||||
'_COOKIE' => $_COOKIE,
|
||||
'_SERVER' => $_SERVER,
|
||||
'_FILES' => $_FILES
|
||||
];
|
||||
$web_factory = new WebFactory(array_merge($default,$supers));
|
||||
$this->container->set('request', $web_factory->newRequest());
|
||||
$this->container->set('response', $web_factory->newResponse());
|
||||
}
|
||||
}
|
||||
// Request base test case and mocks
|
||||
require _dir(__DIR__, 'TestSessionHandler.php');
|
||||
require _dir(__DIR__, 'mocks.php');
|
||||
require _dir(__DIR__, 'AnimeClient_TestCase.php');
|
||||
|
||||
// End of bootstrap.php
|
152
tests/mocks.php
Normal file
152
tests/mocks.php
Normal file
@ -0,0 +1,152 @@
|
||||
<?php
|
||||
/**
|
||||
* All the mock classes that extend the classes they are used to test
|
||||
*/
|
||||
|
||||
use Aviat\Ion\Enum;
|
||||
use Aviat\Ion\Friend;
|
||||
use Aviat\Ion\Di\ContainerInterface;
|
||||
use Aviat\Ion\Transformer\AbstractTransformer;
|
||||
use Aviat\Ion\View;
|
||||
use Aviat\Ion\View\HtmlView;
|
||||
use Aviat\Ion\View\HttpView;
|
||||
use Aviat\Ion\View\JsonView;
|
||||
|
||||
use Aviat\AnimeClient\Model\Anime as AnimeModel;
|
||||
use Aviat\AnimeClient\Model\API as BaseApiModel;
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Mock the default error handler
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class MockErrorHandler {
|
||||
public function addDataTable($name, array $values=[]) {}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Ion Mocks
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class TestEnum extends Enum {
|
||||
const FOO = 'bar';
|
||||
const BAR = 'foo';
|
||||
const FOOBAR = 'baz';
|
||||
}
|
||||
|
||||
class FriendGrandParentTestClass {
|
||||
protected $grandParentProtected = 84;
|
||||
}
|
||||
|
||||
class FriendParentTestClass extends FriendGrandParentTestClass {
|
||||
protected $parentProtected = 47;
|
||||
private $parentPrivate = 654;
|
||||
}
|
||||
|
||||
class FriendTestClass extends FriendParentTestClass {
|
||||
protected $protected = 356;
|
||||
private $private = 486;
|
||||
|
||||
protected function getProtected()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
private function getPrivate()
|
||||
{
|
||||
return 23;
|
||||
}
|
||||
}
|
||||
|
||||
class TestTransformer extends AbstractTransformer {
|
||||
|
||||
public function transform($item)
|
||||
{
|
||||
$out = [];
|
||||
$genre_list = (array) $item;
|
||||
|
||||
foreach($genre_list as $genre)
|
||||
{
|
||||
$out[] = $genre['name'];
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
||||
class TestView extends View {}
|
||||
|
||||
trait MockViewOutputTrait {
|
||||
protected function output() {
|
||||
$reflect = new ReflectionClass($this);
|
||||
$properties = $reflect->getProperties();
|
||||
$props = [];
|
||||
|
||||
foreach($properties as $reflectProp)
|
||||
{
|
||||
$reflectProp->setAccessible(TRUE);
|
||||
$props[$reflectProp->getName()] = $reflectProp->getValue($this);
|
||||
}
|
||||
|
||||
$view = new TestView($this->container);
|
||||
$friend = new Friend($view);
|
||||
foreach($props as $name => $val)
|
||||
{
|
||||
$friend->__set($name, $val);
|
||||
}
|
||||
|
||||
$friend->output();
|
||||
}
|
||||
}
|
||||
|
||||
class TestHtmlView extends HtmlView {
|
||||
use MockViewOutputTrait;
|
||||
}
|
||||
|
||||
class TestHttpView extends HttpView {
|
||||
use MockViewOutputTrait;
|
||||
}
|
||||
|
||||
class TestJsonView extends JsonView {
|
||||
public function __destruct() {}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// AnimeClient Mocks
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
class MockBaseApiModel extends BaseApiModel {
|
||||
|
||||
protected $base_url = 'https://httpbin.org/';
|
||||
|
||||
public function __get($key)
|
||||
{
|
||||
return $this->$key;
|
||||
}
|
||||
|
||||
public function __set($key, $value)
|
||||
{
|
||||
$this->$key = $value;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
class TestAnimeModel extends AnimeModel {
|
||||
|
||||
protected $transformed_data_file;
|
||||
|
||||
public function __construct(ContainerInterface $container)
|
||||
{
|
||||
parent::__construct($container);
|
||||
$this->transformed_data_file = _dir(
|
||||
TEST_DATA_DIR, 'anime_list','anime-completed-transformed.json'
|
||||
);
|
||||
}
|
||||
|
||||
protected function _get_list_from_api($status="all")
|
||||
{
|
||||
$data = json_decode(file_get_contents($this->transformed_data_file), TRUE);
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
// End of mocks.php
|
0
tests/test_data/sessions/.gitkeep
Normal file
0
tests/test_data/sessions/.gitkeep
Normal file
1
tests/test_data/sessions/3rhk4n2lh9cil0rhv7t0qi5na1
Normal file
1
tests/test_data/sessions/3rhk4n2lh9cil0rhv7t0qi5na1
Normal file
@ -0,0 +1 @@
|
||||
""
|
1
tests/test_data/sessions/8mh03j6ffnee1ldbtihfa392e7
Normal file
1
tests/test_data/sessions/8mh03j6ffnee1ldbtihfa392e7
Normal file
@ -0,0 +1 @@
|
||||
""
|
Loading…
Reference in New Issue
Block a user