ConsoleUITest.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Tests\Service\Cron\UI;
  3. use App\Service\Cron\UI\ConsoleUI;
  4. use PHPUnit\Framework\TestCase;
  5. use Symfony\Component\Console\Output\OutputInterface;
  6. class MockableProgressBar {
  7. public function setProgress(int $step): void {}
  8. public function setMaxSteps(int $max): void {}
  9. }
  10. class TestableConsoleUI extends ConsoleUI {
  11. public function setProgressBar(MockableProgressBar $progressBar): void
  12. {
  13. $this->progressBar = $progressBar;
  14. }
  15. }
  16. class ConsoleUITest extends TestCase
  17. {
  18. private mixed $output;
  19. public function setUp(): void
  20. {
  21. $this->output = $this->getMockBuilder(OutputInterface::class)->disableOriginalConstructor()->getMock();
  22. }
  23. public function testPrint(): void
  24. {
  25. $consoleUI = $this->getMockBuilder(ConsoleUI::class)
  26. ->setConstructorArgs([$this->output])
  27. ->setMethodsExcept(['print'])
  28. ->getMock();
  29. $this->output->expects(self::once())->method('writeln')->with('foo');
  30. $consoleUI->print('foo');
  31. }
  32. public function testProgress(): void {
  33. $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock();
  34. $consoleUI = $this->getMockBuilder(TestableConsoleUI::class)
  35. ->setConstructorArgs([$this->output])
  36. ->setMethodsExcept(['progress', 'setProgressBar'])
  37. ->getMock();
  38. $consoleUI->setProgressBar($progressBar);
  39. $progressBar->expects(self::once())
  40. ->method('setProgress')
  41. ->with(21);
  42. $progressBar->expects(self::once())
  43. ->method('setMaxSteps')
  44. ->with(100);
  45. $consoleUI->progress(21, 100);
  46. }
  47. public function testProgressEnd(): void {
  48. $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock();
  49. $consoleUI = $this->getMockBuilder(TestableConsoleUI::class)
  50. ->setConstructorArgs([$this->output])
  51. ->setMethodsExcept(['progress', 'setProgressBar'])
  52. ->getMock();
  53. $consoleUI->setProgressBar($progressBar);
  54. $progressBar->expects(self::once())
  55. ->method('setProgress')
  56. ->with(100);
  57. $progressBar->expects(self::once())
  58. ->method('setMaxSteps')
  59. ->with(100);
  60. $consoleUI->expects(self::once())->method('print')->with('');
  61. $consoleUI->progress(100, 100);
  62. }
  63. }