90 lines
2.3 KiB
PHP
90 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace TorstenHettstedt\OptLogin\Tests\unit;
|
|
|
|
use Codeception\Test\Unit;
|
|
use DI\ContainerBuilder;
|
|
use Exception;
|
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
|
use Slim\App;
|
|
use Slim\Factory\AppFactory;
|
|
use Slim\Psr7\Factory\StreamFactory;
|
|
use Slim\Psr7\Headers;
|
|
use Slim\Psr7\Request as SlimRequest;
|
|
use Slim\Psr7\Uri;
|
|
|
|
class TestCase extends Unit
|
|
{
|
|
/**
|
|
* @return App
|
|
* @throws Exception
|
|
*/
|
|
protected function getAppInstance(): App
|
|
{
|
|
// Instantiate PHP-DI ContainerBuilder
|
|
$containerBuilder = new ContainerBuilder();
|
|
|
|
$app_folder = __DIR__ . '/../../app';
|
|
|
|
// Container intentionally not compiled for tests.
|
|
|
|
// Set up settings
|
|
$settings = require $app_folder . '/settings.php';
|
|
$settings($containerBuilder);
|
|
|
|
// Set up dependencies
|
|
$dependencies = require $app_folder . '/dependencies.php';
|
|
$dependencies($containerBuilder);
|
|
|
|
// Set up repositories
|
|
$repositories = require $app_folder . '/repositories.php';
|
|
$repositories($containerBuilder);
|
|
|
|
// Build PHP-DI Container instance
|
|
$container = $containerBuilder->build();
|
|
|
|
// Instantiate the app
|
|
AppFactory::setContainer($container);
|
|
$app = AppFactory::create();
|
|
|
|
// Register middleware
|
|
$middleware = require $app_folder . '/middleware.php';
|
|
$middleware($app);
|
|
|
|
// Register routes
|
|
$routes = require $app_folder . '/routes.php';
|
|
$routes($app);
|
|
|
|
return $app;
|
|
}
|
|
|
|
/**
|
|
* @param string $method
|
|
* @param string $path
|
|
* @param array $headers
|
|
* @param array $cookies
|
|
* @param array $serverParams
|
|
* @return Request
|
|
*/
|
|
protected function createRequest(
|
|
string $method,
|
|
string $path,
|
|
array $headers = ['HTTP_ACCEPT' => 'application/json'],
|
|
array $cookies = [],
|
|
array $serverParams = []
|
|
): Request {
|
|
$uri = new Uri('', '', 80, $path);
|
|
$handle = fopen('php://temp', 'w+');
|
|
$stream = (new StreamFactory())->createStreamFromResource($handle);
|
|
|
|
$h = new Headers();
|
|
foreach ($headers as $name => $value) {
|
|
$h->addHeader($name, $value);
|
|
}
|
|
|
|
return new SlimRequest($method, $uri, $h, $cookies, $serverParams, $stream);
|
|
}
|
|
}
|