mirror of https://github.com/flightphp/core
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							124 lines
						
					
					
						
							3.7 KiB
						
					
					
				
			
		
		
	
	
							124 lines
						
					
					
						
							3.7 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace tests\commands;
 | 
						|
 | 
						|
use Ahc\Cli\Application;
 | 
						|
use Ahc\Cli\IO\Interactor;
 | 
						|
use Flight;
 | 
						|
use flight\commands\RouteCommand;
 | 
						|
use flight\Engine;
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
 | 
						|
class RouteCommandTest extends TestCase
 | 
						|
{
 | 
						|
 | 
						|
	protected static $in = __DIR__ . '/input.test';
 | 
						|
    protected static $ou = __DIR__ . '/output.test';
 | 
						|
 | 
						|
    public function setUp(): void
 | 
						|
    {
 | 
						|
        file_put_contents(static::$in, '', LOCK_EX);
 | 
						|
        file_put_contents(static::$ou, '', LOCK_EX);
 | 
						|
		$_SERVER = [];
 | 
						|
        $_REQUEST = [];
 | 
						|
        Flight::init();
 | 
						|
        Flight::setEngine(new Engine());
 | 
						|
    }
 | 
						|
 | 
						|
    public function tearDown(): void
 | 
						|
    {
 | 
						|
        // Make sure we clean up after ourselves:
 | 
						|
        if (file_exists(static::$in)) {
 | 
						|
            unlink(static::$in);
 | 
						|
        }
 | 
						|
        if (file_exists(static::$ou)) {
 | 
						|
            unlink(static::$ou);
 | 
						|
        }
 | 
						|
 | 
						|
		if (file_exists(__DIR__.'/index.php')) {
 | 
						|
			unlink(__DIR__.'/index.php');
 | 
						|
		}
 | 
						|
 | 
						|
		unset($_REQUEST);
 | 
						|
        unset($_SERVER);
 | 
						|
        Flight::clear();
 | 
						|
	}
 | 
						|
 | 
						|
	protected function newApp(string $name, string $version = '')
 | 
						|
    {
 | 
						|
        $app = new Application($name, $version ?: '0.0.1', fn () => false);
 | 
						|
 | 
						|
        return $app->io(new Interactor(static::$in, static::$ou));
 | 
						|
    }
 | 
						|
 | 
						|
	protected function createIndexFile()
 | 
						|
	{
 | 
						|
		$index = <<<PHP
 | 
						|
<?php
 | 
						|
 | 
						|
require __DIR__ . '/../../vendor/autoload.php';
 | 
						|
 | 
						|
Flight::route('GET /', function () {});
 | 
						|
Flight::post('/post', function () {})->addMiddleware(function() {});
 | 
						|
Flight::delete('/delete', function () {});
 | 
						|
Flight::put('/put', function () {});
 | 
						|
Flight::patch('/patch', function () {})->addMiddleware('SomeMiddleware');
 | 
						|
Flight::router()->case_sensitive = true;
 | 
						|
 | 
						|
Flight::start();
 | 
						|
PHP;
 | 
						|
 | 
						|
		file_put_contents(__DIR__.'/index.php', $index);
 | 
						|
	}
 | 
						|
 | 
						|
	protected function removeColors(string $str): string
 | 
						|
	{
 | 
						|
		return preg_replace('/\e\[[\d;]*m/', '', $str);
 | 
						|
	}
 | 
						|
 | 
						|
	public function testConfigIndexRootNotSet()
 | 
						|
	{
 | 
						|
		$app = $this->newApp('test', '0.0.1');
 | 
						|
		$app->add(new RouteCommand([]));
 | 
						|
		$app->handle(['runway', 'routes']);
 | 
						|
 | 
						|
		$this->assertStringContainsString('index_root not set in .runway-config.json', file_get_contents(static::$ou));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetRoutes()
 | 
						|
	{
 | 
						|
		$app = $this->newApp('test', '0.0.1');
 | 
						|
		$this->createIndexFile();
 | 
						|
		$app->add(new RouteCommand(['index_root' => 'tests/commands/index.php']));
 | 
						|
		$app->handle(['runway', 'routes']);
 | 
						|
 | 
						|
		$this->assertStringContainsString('Routes', file_get_contents(static::$ou));
 | 
						|
		$this->assertStringContainsString('+---------+-----------+-------+----------+----------------+
 | 
						|
| Pattern | Methods   | Alias | Streamed | Middleware     |
 | 
						|
+---------+-----------+-------+----------+----------------+
 | 
						|
| /       | GET, HEAD |       | No       | -              |
 | 
						|
| /post   | POST      |       | No       | Closure        |
 | 
						|
| /delete | DELETE    |       | No       | -              |
 | 
						|
| /put    | PUT       |       | No       | -              |
 | 
						|
| /patch  | PATCH     |       | No       | Bad Middleware |
 | 
						|
+---------+-----------+-------+----------+----------------+', $this->removeColors(file_get_contents(static::$ou)));
 | 
						|
	}
 | 
						|
 | 
						|
	public function testGetPostRoute() {
 | 
						|
		$app = $this->newApp('test', '0.0.1');
 | 
						|
		$this->createIndexFile();
 | 
						|
		$app->add(new RouteCommand(['index_root' => 'tests/commands/index.php']));
 | 
						|
		$app->handle(['runway', 'routes', '--post']);
 | 
						|
 | 
						|
		$this->assertStringContainsString('Routes', file_get_contents(static::$ou));
 | 
						|
		$this->assertStringContainsString('+---------+---------+-------+----------+------------+
 | 
						|
| Pattern | Methods | Alias | Streamed | Middleware |
 | 
						|
+---------+---------+-------+----------+------------+
 | 
						|
| /post   | POST    |       | No       | Closure    |
 | 
						|
+---------+---------+-------+----------+------------+', $this->removeColors(file_get_contents(static::$ou)));
 | 
						|
	}
 | 
						|
 | 
						|
}
 |