|
@@ -0,0 +1,106 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+declare(strict_types=1);
|
|
|
+
|
|
|
+namespace ShlinkioTest\Shlink\CLI\Util;
|
|
|
+
|
|
|
+use PHPUnit\Framework\TestCase;
|
|
|
+use Prophecy\Argument;
|
|
|
+use Prophecy\PhpUnit\ProphecyTrait;
|
|
|
+use Prophecy\Prophecy\ObjectProphecy;
|
|
|
+use Shlinkio\Shlink\CLI\Util\ProcessRunner;
|
|
|
+use Symfony\Component\Console\Helper\DebugFormatterHelper;
|
|
|
+use Symfony\Component\Console\Helper\HelperSet;
|
|
|
+use Symfony\Component\Console\Helper\ProcessHelper;
|
|
|
+use Symfony\Component\Console\Output\OutputInterface;
|
|
|
+use Symfony\Component\Process\Process;
|
|
|
+
|
|
|
+class ProcessRunnerTest extends TestCase
|
|
|
+{
|
|
|
+ use ProphecyTrait;
|
|
|
+
|
|
|
+ private ProcessRunner $runner;
|
|
|
+ private ObjectProphecy $helper;
|
|
|
+ private ObjectProphecy $formatter;
|
|
|
+ private ObjectProphecy $process;
|
|
|
+ private ObjectProphecy $output;
|
|
|
+
|
|
|
+ protected function setUp(): void
|
|
|
+ {
|
|
|
+ $this->helper = $this->prophesize(ProcessHelper::class);
|
|
|
+ $this->formatter = $this->prophesize(DebugFormatterHelper::class);
|
|
|
+ $helperSet = $this->prophesize(HelperSet::class);
|
|
|
+ $helperSet->get('debug_formatter')->willReturn($this->formatter->reveal());
|
|
|
+ $this->helper->getHelperSet()->willReturn($helperSet->reveal());
|
|
|
+ $this->process = $this->prophesize(Process::class);
|
|
|
+
|
|
|
+ $this->runner = new ProcessRunner($this->helper->reveal(), fn () => $this->process->reveal());
|
|
|
+ $this->output = $this->prophesize(OutputInterface::class);
|
|
|
+ }
|
|
|
+
|
|
|
+ /** @test */
|
|
|
+ public function noMessagesAreWrittenWhenOutputIsNotVerbose(): void
|
|
|
+ {
|
|
|
+ $isVeryVerbose = $this->output->isVeryVerbose()->willReturn(false);
|
|
|
+ $isDebug = $this->output->isDebug()->willReturn(false);
|
|
|
+ $mustRun = $this->process->mustRun(Argument::cetera())->willReturn($this->process->reveal());
|
|
|
+
|
|
|
+ $this->runner->run($this->output->reveal(), []);
|
|
|
+
|
|
|
+ $isVeryVerbose->shouldHaveBeenCalledTimes(2);
|
|
|
+ $isDebug->shouldHaveBeenCalledOnce();
|
|
|
+ $mustRun->shouldHaveBeenCalledOnce();
|
|
|
+ $this->process->isSuccessful()->shouldNotHaveBeenCalled();
|
|
|
+ $this->process->getCommandLine()->shouldNotHaveBeenCalled();
|
|
|
+ $this->output->write(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $this->helper->wrapCallback(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $this->formatter->start(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $this->formatter->stop(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** @test */
|
|
|
+ public function someMessagesAreWrittenWhenOutputIsVerbose(): void
|
|
|
+ {
|
|
|
+ $isVeryVerbose = $this->output->isVeryVerbose()->willReturn(true);
|
|
|
+ $isDebug = $this->output->isDebug()->willReturn(false);
|
|
|
+ $mustRun = $this->process->mustRun(Argument::cetera())->willReturn($this->process->reveal());
|
|
|
+ $isSuccessful = $this->process->isSuccessful()->willReturn(true);
|
|
|
+ $getCommandLine = $this->process->getCommandLine()->willReturn('true');
|
|
|
+ $start = $this->formatter->start(Argument::cetera())->willReturn('');
|
|
|
+ $stop = $this->formatter->stop(Argument::cetera())->willReturn('');
|
|
|
+
|
|
|
+ $this->runner->run($this->output->reveal(), []);
|
|
|
+
|
|
|
+ $isVeryVerbose->shouldHaveBeenCalledTimes(2);
|
|
|
+ $isDebug->shouldHaveBeenCalledOnce();
|
|
|
+ $mustRun->shouldHaveBeenCalledOnce();
|
|
|
+ $this->output->write(Argument::cetera())->shouldHaveBeenCalledTimes(2);
|
|
|
+ $this->helper->wrapCallback(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $isSuccessful->shouldHaveBeenCalledTimes(2);
|
|
|
+ $getCommandLine->shouldHaveBeenCalledOnce();
|
|
|
+ $start->shouldHaveBeenCalledOnce();
|
|
|
+ $stop->shouldHaveBeenCalledOnce();
|
|
|
+ }
|
|
|
+
|
|
|
+ /** @test */
|
|
|
+ public function wrapsCallbackWhenOutputIsDebug(): void
|
|
|
+ {
|
|
|
+ $isVeryVerbose = $this->output->isVeryVerbose()->willReturn(false);
|
|
|
+ $isDebug = $this->output->isDebug()->willReturn(true);
|
|
|
+ $mustRun = $this->process->mustRun(Argument::cetera())->willReturn($this->process->reveal());
|
|
|
+ $wrapCallback = $this->helper->wrapCallback(Argument::cetera())->willReturn(function (): void {
|
|
|
+ });
|
|
|
+
|
|
|
+ $this->runner->run($this->output->reveal(), []);
|
|
|
+
|
|
|
+ $isVeryVerbose->shouldHaveBeenCalledTimes(2);
|
|
|
+ $isDebug->shouldHaveBeenCalledOnce();
|
|
|
+ $mustRun->shouldHaveBeenCalledOnce();
|
|
|
+ $wrapCallback->shouldHaveBeenCalledOnce();
|
|
|
+ $this->process->isSuccessful()->shouldNotHaveBeenCalled();
|
|
|
+ $this->process->getCommandLine()->shouldNotHaveBeenCalled();
|
|
|
+ $this->output->write(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $this->formatter->start(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ $this->formatter->stop(Argument::cetera())->shouldNotHaveBeenCalled();
|
|
|
+ }
|
|
|
+}
|