public static function setUpBeforeClass()
{
// Load configuration
$config = (require __DIR__ . '/../config/config.php');
// Override config settings
$config['debug'] = true;
$config['config_cache_enabled'] = false;
$dependencies = $config['dependencies'];
$dependencies['services']['config'] = $config;
// Build container
self::$container = new ServiceManager($dependencies);
// Get application from container
self::$app = self::$container->get(Application::class);
self::$app->raiseThrowables();
// Setup middleware
self::$app->pipe(ServerUrlMiddleware::class);
self::$app->pipe(ErrorHandler::class);
self::$app->pipe(SessionMiddleware::class);
self::$app->pipeRoutingMiddleware();
self::$app->pipe(UrlHelperMiddleware::class);
self::$app->pipeDispatchMiddleware();
self::$app->pipe(NotFoundHandler::class);
// Setup routes
self::$app->route('/', Action\HomePageAction::class, ['GET'], 'home');
self::$app->route('/blog', Action\BlogIndexAction::class, ['GET'], 'blog');
self::$app->route('/blog/feed.xml', Action\BlogXmlFeedAction::class, ['GET'], 'feed');
self::$app->route('/blog/{id:[0-9a-zA-Z\\-]+}', Action\BlogPostAction::class, ['GET'], 'blog.post');
self::$app->route('/code', Action\CodeAction::class, ['GET'], 'code');
self::$app->route('/contact', Action\ContactAction::class, ['GET', 'POST'], 'contact');
}