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(); } }