CommandRunnerTest.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace Test\Michel\Console;
  3. use Michel\Console\CommandParser;
  4. use Michel\Console\CommandRunner;
  5. use Michel\Console\Output;
  6. use Michel\UniTester\TestCase;
  7. use Test\Michel\Console\Command\CacheClearCommand;
  8. use Test\Michel\Console\Command\MakeControllerCommand;
  9. use Test\Michel\Console\Command\MakeEntityCommand;
  10. use Test\Michel\Console\Command\UserCreateCommand;
  11. use Test\Michel\Console\Command\UserDisabledCommand;
  12. use Test\Michel\Console\Command\UserListCommand;
  13. use Test\Michel\Console\Command\UserResetPasswordCommand;
  14. class CommandRunnerTest extends TestCase
  15. {
  16. private CommandRunner $commandRunner;
  17. protected function setUp(): void
  18. {
  19. $this->commandRunner = new CommandRunner([
  20. new CacheClearCommand(),
  21. new MakeControllerCommand(),
  22. new MakeEntityCommand(),
  23. new UserCreateCommand(),
  24. new UserDisabledCommand(),
  25. new UserResetPasswordCommand(),
  26. new UserListCommand(),
  27. ]);
  28. }
  29. protected function tearDown(): void
  30. {
  31. // TODO: Implement tearDown() method.
  32. }
  33. protected function execute(): void
  34. {
  35. $exitCode = $this->commandRunner->run(new CommandParser(self::createArgv(['c:c'])), new Output(function ($message) {
  36. $this->assertEquals('Test OK : Clear cache', $message);
  37. })
  38. );
  39. $this->assertEquals(0, $exitCode);
  40. $message = '';
  41. $exitCode = $this->commandRunner->run(new CommandParser(self::createArgv(['c:c', '--verbose'])), new Output(function ($outputMessage) use (&$message) {
  42. $message .= $outputMessage;
  43. })
  44. );
  45. $this->assertStringContains( $message, 'Test OK : Clear cache');
  46. $this->assertStringContains( $message, 'Execution time:');
  47. $this->assertStringContains( $message, 'Peak memory usage:');
  48. $this->assertEquals(0, $exitCode);
  49. $messages = [];
  50. $exitCode = $this->commandRunner->run(new CommandParser(self::createArgv(['app:user:list'])), new Output(function ($message) use(&$messages){
  51. $messages[] = $message;
  52. })
  53. );
  54. $this->assertEquals(0, $exitCode);
  55. $this->assertEquals('Test OK : User list', $messages[0]);
  56. $this->assertEquals('LIMIT : 100', $messages[1]);
  57. $messages = [];
  58. $exitCode = $this->commandRunner->run(new CommandParser(self::createArgv(['app:user:list', '-l', '1000'])), new Output(function ($message) use(&$messages){
  59. $messages[] = $message;
  60. })
  61. );
  62. $this->assertEquals(0, $exitCode);
  63. $this->assertEquals('Test OK : User list', $messages[0]);
  64. $this->assertEquals('LIMIT : 1000', $messages[1]);
  65. }
  66. private static function createArgv(array $argv): array
  67. {
  68. return array_merge(['bin/console'], $argv);
  69. }
  70. }