mirror of
https://github.com/filegator/filegator.git
synced 2025-08-31 22:51:53 +02:00
initial commit
This commit is contained in:
136
tests/backend/TestCase.php
Normal file
136
tests/backend/TestCase.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the FileGator package.
|
||||
*
|
||||
* (c) Milos Stojanovic <alcalbg@gmail.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE file
|
||||
*/
|
||||
|
||||
namespace Tests;
|
||||
|
||||
use Filegator\App;
|
||||
use Filegator\Config\Config;
|
||||
use Filegator\Container\Container;
|
||||
use Filegator\Kernel\Request;
|
||||
use Filegator\Kernel\Response;
|
||||
use Filegator\Services\Session\Session;
|
||||
use PHPUnit\Framework\TestCase as BaseTestCase;
|
||||
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage;
|
||||
|
||||
define('APP_ENV', 'test');
|
||||
|
||||
define('TEST_DIR', __DIR__.'/tmp');
|
||||
define('TEST_REPOSITORY', TEST_DIR.'/repository');
|
||||
define('TEST_ARCHIVE', TEST_DIR.'/testarchive.zip');
|
||||
define('TEST_FILE', TEST_DIR.'/sample.txt');
|
||||
define('TEST_TMP_PATH', TEST_DIR.'/temp/');
|
||||
|
||||
/**
|
||||
* @internal
|
||||
* @coversNothing
|
||||
*/
|
||||
class TestCase extends BaseTestCase
|
||||
{
|
||||
use TestResponse;
|
||||
|
||||
public $response;
|
||||
|
||||
public $previous_session = false;
|
||||
|
||||
protected $auth = false;
|
||||
|
||||
public function bootFreshApp($config = null, $request = null, $response = null, $mock_users = false)
|
||||
{
|
||||
$config = $config ?: $this->getMockConfig();
|
||||
$request = $request ?: new Request();
|
||||
|
||||
return new App($config, $request, new FakeResponse(), new FakeStreamedResponse(), new Container());
|
||||
}
|
||||
|
||||
public function sendRequest($method, $uri, $data = null, $files = [])
|
||||
{
|
||||
$fakeRequest = Request::create(
|
||||
'?r='.$uri,
|
||||
$method,
|
||||
[],
|
||||
[],
|
||||
$files,
|
||||
[
|
||||
'CONTENT_TYPE' => 'application/json',
|
||||
'HTTP_ACCEPT' => 'application/json',
|
||||
],
|
||||
json_encode($data)
|
||||
);
|
||||
|
||||
if ($this->previous_session) {
|
||||
$fakeRequest->setSession($this->previous_session);
|
||||
} else {
|
||||
$sessionStorage = new MockFileSessionStorage();
|
||||
$fakeRequest->setSession(new Session($sessionStorage));
|
||||
}
|
||||
|
||||
$app = $this->bootFreshApp(null, $fakeRequest, null, true);
|
||||
|
||||
$this->response = $app->resolve(Response::class);
|
||||
|
||||
return $app;
|
||||
}
|
||||
|
||||
public function signIn($username, $password)
|
||||
{
|
||||
$this->signOut();
|
||||
|
||||
$app = $this->sendRequest('POST', '/login', [
|
||||
'username' => $username,
|
||||
'password' => $password,
|
||||
]);
|
||||
|
||||
$request = $app->resolve(Request::class);
|
||||
$this->previous_session = $request->getSession();
|
||||
}
|
||||
|
||||
public function signOut()
|
||||
{
|
||||
$this->previous_session = false;
|
||||
}
|
||||
|
||||
public function getMockConfig()
|
||||
{
|
||||
$config = require __DIR__.'/configuration.php';
|
||||
|
||||
return new Config($config);
|
||||
}
|
||||
|
||||
public function delTree($dir)
|
||||
{
|
||||
if (! is_dir($dir)) {
|
||||
return;
|
||||
}
|
||||
$files = array_diff(scandir($dir), ['.', '..']);
|
||||
foreach ($files as $file) {
|
||||
(is_dir("{$dir}/{$file}")) ? $this->delTree("{$dir}/{$file}") : unlink("{$dir}/{$file}");
|
||||
}
|
||||
|
||||
return rmdir($dir);
|
||||
}
|
||||
|
||||
public function resetTempDir()
|
||||
{
|
||||
$this->delTree(TEST_TMP_PATH);
|
||||
$this->delTree(TEST_REPOSITORY);
|
||||
|
||||
mkdir(TEST_TMP_PATH);
|
||||
mkdir(TEST_REPOSITORY);
|
||||
}
|
||||
|
||||
public function invokeMethod(&$object, $methodName, array $parameters = [])
|
||||
{
|
||||
$reflection = new \ReflectionClass(get_class($object));
|
||||
$method = $reflection->getMethod($methodName);
|
||||
$method->setAccessible(true);
|
||||
|
||||
return $method->invokeArgs($object, $parameters);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user