diff --git a/README.md b/README.md index b9ab254..0acd9cc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- +

diff --git a/src/Command/Router/RouterDumpCommand.php b/src/Command/Router/RouterDumpCommand.php index 282648a..6882666 100644 --- a/src/Command/Router/RouterDumpCommand.php +++ b/src/Command/Router/RouterDumpCommand.php @@ -103,31 +103,31 @@ protected function analyseRoute(Route $router, ?string $module = null): object } /** - * @param string[] $defaults + * @param array $defaults */ protected function analyseDefaults(array $defaults): string { $primary = []; if (isset($defaults['presenter'])) { - $primary[] = $defaults['presenter']; + $primary[] = $this->stringifyDefault($defaults['presenter']); unset($defaults['presenter']); } if (isset($defaults['action'])) { - $primary[] = $defaults['action']; + $primary[] = $this->stringifyDefault($defaults['action']); unset($defaults['action']); } if (isset($defaults['id'])) { - $primary[] = $defaults['id']; + $primary[] = $this->stringifyDefault($defaults['id']); unset($defaults['id']); } $secondary = []; foreach ($defaults as $key => $value) { - $secondary[] = sprintf('%s=>%s', $key, $value); + $secondary[] = sprintf('%s=>%s', $key, $this->stringifyDefault($value)); } if ($secondary !== []) { @@ -137,4 +137,17 @@ protected function analyseDefaults(array $defaults): string return implode(':', $primary); } + protected function stringifyDefault(mixed $value): string + { + if (is_string($value)) { + return $value; + } + + if (is_scalar($value) || $value === null) { + return var_export($value, true); + } + + return get_debug_type($value); + } + } diff --git a/tests/Cases/Command/Router/RouterDumpCommand.phpt b/tests/Cases/Command/Router/RouterDumpCommand.phpt new file mode 100644 index 0000000..19648b0 --- /dev/null +++ b/tests/Cases/Command/Router/RouterDumpCommand.phpt @@ -0,0 +1,58 @@ +addRoute('api//', [ + 'presenter' => 'Api:Dashboard', + 'action' => 'default', + ]); + + $admin = $router->withModule('Admin'); + $admin->addRoute('admin//[/]', [ + 'presenter' => 'Dashboard', + 'action' => 'default', + 'id' => 1, + 'lang' => 'cs', + 'secured' => true, + 'meta' => ['role' => 'admin'], + ]); + + $application = new Application(); + $application->addCommand(new RouterDumpCommand($router)); + + $command = $application->find('nette:router:dump'); + $commandTester = new CommandTester($command); + $commandTester->execute([]); + + $display = $commandTester->getDisplay(); + $analyseDefaults = \Closure::bind( + fn (array $defaults): string => $this->analyseDefaults($defaults), + $command, + RouterDumpCommand::class, + ); + + Assert::true(str_contains($display, 'api//')); + Assert::true(str_contains($display, 'Api:Dashboard:default')); + Assert::true(str_contains($display, 'admin//[/]')); + Assert::true(str_contains($display, 'Admin')); + Assert::true(str_contains($display, 'Dashboard:default:1 [lang=>cs,secured=>1]')); + Assert::same('Dashboard:default:1 [lang=>cs,secured=>true,meta=>array]', $analyseDefaults([ + 'presenter' => 'Dashboard', + 'action' => 'default', + 'id' => 1, + 'lang' => 'cs', + 'secured' => true, + 'meta' => ['role' => 'admin'], + ])); +});