mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
100 lines
3.5 KiB
PHP
100 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace SilverStripe\Cli\Tests\Command;
|
|
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use SilverStripe\Cli\Command\NavigateCommand;
|
|
use SilverStripe\Cli\Tests\Command\NavigateCommandTest\TestController;
|
|
use SilverStripe\Control\Director;
|
|
use SilverStripe\Dev\SapphireTest;
|
|
use SilverStripe\PolyExecution\PolyOutput;
|
|
use Symfony\Component\Console\Input\ArrayInput;
|
|
use Symfony\Component\Console\Output\BufferedOutput;
|
|
|
|
class NavigateCommandTest extends SapphireTest
|
|
{
|
|
protected $usesDatabase = true;
|
|
|
|
public static function provideExecute(): array
|
|
{
|
|
return [
|
|
[
|
|
'path' => 'missing-route',
|
|
'getVars' => [],
|
|
'expectedExitCode' => 2,
|
|
'expectedOutput' => '',
|
|
],
|
|
[
|
|
'path' => 'test-controller',
|
|
'getVars' => [],
|
|
'expectedExitCode' => 0,
|
|
'expectedOutput' => 'This is the index for TestController.' . PHP_EOL,
|
|
],
|
|
[
|
|
'path' => 'test-controller/actionOne',
|
|
'getVars' => [],
|
|
'expectedExitCode' => 0,
|
|
'expectedOutput' => 'This is action one!' . PHP_EOL,
|
|
],
|
|
[
|
|
'path' => 'test-controller/errorResponse',
|
|
'getVars' => [],
|
|
'expectedExitCode' => 1,
|
|
'expectedOutput' => '',
|
|
],
|
|
[
|
|
'path' => 'test-controller/missing-action',
|
|
'getVars' => [],
|
|
'expectedExitCode' => 2,
|
|
'expectedOutput' => '',
|
|
],
|
|
[
|
|
'path' => 'test-controller',
|
|
'getVars' => [
|
|
'var1=1',
|
|
'var2=abcd',
|
|
'var3=',
|
|
'var4[]=a',
|
|
'var4[]=b',
|
|
'var4[]=c',
|
|
],
|
|
'expectedExitCode' => 0,
|
|
'expectedOutput' => 'This is the index for TestController. var1=1 var2=abcd var4=a,b,c' . PHP_EOL,
|
|
],
|
|
[
|
|
'path' => 'test-controller',
|
|
'getVars' => [
|
|
'var1=1&var2=abcd&var3=&var4[]=a&var4[]=b&var4[]=c',
|
|
],
|
|
'expectedExitCode' => 0,
|
|
'expectedOutput' => 'This is the index for TestController. var1=1 var2=abcd var4=a,b,c' . PHP_EOL,
|
|
],
|
|
];
|
|
}
|
|
|
|
#[DataProvider('provideExecute')]
|
|
public function testExecute(string $path, array $getVars, int $expectedExitCode, string $expectedOutput): void
|
|
{
|
|
// Intentionally override existing rules
|
|
Director::config()->set('rules', ['test-controller' => TestController::class]);
|
|
$navigateCommand = new NavigateCommand();
|
|
$inputParams = [
|
|
'path' => $path,
|
|
'get-vars' => $getVars,
|
|
];
|
|
$input = new ArrayInput($inputParams, $navigateCommand->getDefinition());
|
|
$input->setInteractive(false);
|
|
$buffer = new BufferedOutput();
|
|
$output = new PolyOutput(PolyOutput::FORMAT_ANSI, decorated: false, wrappedOutput: $buffer);
|
|
|
|
$exitCode = $navigateCommand->run($input, $output);
|
|
|
|
// Don't asset specific output for failed or invalid responses
|
|
// The response body for those is handled outside of the navigate command's control
|
|
if ($expectedExitCode === 0) {
|
|
$this->assertSame($expectedOutput, $buffer->fetch());
|
|
}
|
|
$this->assertSame($expectedExitCode, $exitCode);
|
|
}
|
|
}
|