ConsoleUITest.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. $this->progressBar = $this->getMockBuilder(MockableProgressBar::class)->disableOriginalConstructor()->getMockForAbstractClass();
  23. }
  24. public function testPrint(): void
  25. {
  26. $consoleUI = $this->getMockBuilder(ConsoleUI::class)
  27. ->setConstructorArgs([$this->output])
  28. ->setMethodsExcept(['print'])
  29. ->getMock();
  30. $this->output->expects(self::once())->method('writeln')->with('foo');
  31. $consoleUI->print('foo');
  32. }
  33. public function testProgress(): void {
  34. $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock();
  35. $consoleUI = $this->getMockBuilder(TestableConsoleUI::class)
  36. ->setConstructorArgs([$this->output])
  37. ->setMethodsExcept(['progress', 'setProgressBar'])
  38. ->getMock();
  39. $consoleUI->setProgressBar($progressBar);
  40. $progressBar->expects(self::once())
  41. ->method('setProgress')
  42. ->with(21);
  43. $progressBar->expects(self::once())
  44. ->method('setMaxSteps')
  45. ->with(100);
  46. $consoleUI->progress(21, 100);
  47. }
  48. public function testProgressEnd(): void {
  49. $progressBar = $this->getMockBuilder(MockableProgressBar::class)->getMock();
  50. $consoleUI = $this->getMockBuilder(TestableConsoleUI::class)
  51. ->setConstructorArgs([$this->output])
  52. ->setMethodsExcept(['progress', 'setProgressBar'])
  53. ->getMock();
  54. $consoleUI->setProgressBar($progressBar);
  55. $progressBar->expects(self::once())
  56. ->method('setProgress')
  57. ->with(100);
  58. $progressBar->expects(self::once())
  59. ->method('setMaxSteps')
  60. ->with(100);
  61. $consoleUI->expects(self::once())->method('print')->with('');
  62. $consoleUI->progress(100, 100);
  63. }
  64. }