Merge pull request #2002 from flarum/fl/extender-tests

Start testing extenders
This commit is contained in:
Franz Liedke 2020-02-14 18:47:58 +01:00 committed by GitHub
commit eaf1767008
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 87 additions and 15 deletions

View File

@ -10,33 +10,22 @@
namespace Flarum\Tests\integration;
use Dflydev\FigCookies\SetCookie;
use Flarum\Extend\ExtenderInterface;
use Flarum\Foundation\InstalledSite;
use Illuminate\Database\ConnectionInterface;
use Laminas\Diactoros\CallbackStream;
use Laminas\Diactoros\ServerRequest;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
abstract class TestCase extends \PHPUnit\Framework\TestCase
{
public function setUp()
{
parent::setUp();
// Boot the Flarum app
$this->app();
}
/**
* @var \Flarum\Foundation\InstalledApp
*/
protected $app;
/**
* @var \Psr\Http\Server\RequestHandlerInterface
*/
protected $server;
/**
* @return \Flarum\Foundation\InstalledApp
*/
@ -53,13 +42,38 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
include __DIR__.'/tmp/config.php'
);
$site->extendWith($this->extenders);
$this->app = $site->bootApp();
$this->server = $this->app->getRequestHandler();
}
return $this->app;
}
/**
* @var ExtenderInterface[]
*/
protected $extenders = [];
protected function extend(ExtenderInterface $extender)
{
$this->extenders[] = $extender;
}
/**
* @var RequestHandlerInterface
*/
protected $server;
protected function server(): RequestHandlerInterface
{
if (is_null($this->server)) {
$this->server = $this->app()->getRequestHandler();
}
return $this->server;
}
protected $database;
protected function database(): ConnectionInterface
@ -111,7 +125,7 @@ abstract class TestCase extends \PHPUnit\Framework\TestCase
*/
protected function send(ServerRequestInterface $request): ResponseInterface
{
return $this->server->handle($request);
return $this->server()->handle($request);
}
/**

View File

@ -0,0 +1,58 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Tests\integration\extenders;
use Flarum\Extend;
use Flarum\Tests\integration\TestCase;
use Laminas\Diactoros\Response\TextResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Server\RequestHandlerInterface;
class RoutesTest extends TestCase
{
/**
* @test
*/
public function custom_route_does_not_exist_by_default()
{
$response = $this->send(
$this->request('GET', '/custom')
);
$this->assertEquals(404, $response->getStatusCode());
}
/**
* @test
*/
public function custom_route_can_be_added_by_extender()
{
$this->extend(
(new Extend\Routes('forum'))
->get('/custom', 'custom', CustomRoute::class)
);
$response = $this->send(
$this->request('GET', '/custom')
);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('Hello Flarumites!', $response->getBody());
}
}
class CustomRoute implements RequestHandlerInterface
{
public function handle(ServerRequestInterface $request): ResponseInterface
{
return new TextResponse('Hello Flarumites!');
}
}