previewGenerator = $this->prophesize(PreviewGenerator::class); $this->shortUrlService = $this->prophesize(ShortUrlService::class); $command = new GeneratePreviewCommand( $this->shortUrlService->reveal(), $this->previewGenerator->reveal(), Translator::factory([]) ); $app = new Application(); $app->add($command); $this->commandTester = new CommandTester($command); } /** * @test */ public function previewsForEveryUrlAreGenerated() { $paginator = $this->createPaginator([ new ShortUrl('http://foo.com'), new ShortUrl('https://bar.com'), new ShortUrl('http://baz.com/something'), ]); $this->shortUrlService->listShortUrls(1)->willReturn($paginator)->shouldBeCalledOnce(); $this->previewGenerator->generatePreview('http://foo.com')->shouldBeCalledOnce(); $this->previewGenerator->generatePreview('https://bar.com')->shouldBeCalledOnce(); $this->previewGenerator->generatePreview('http://baz.com/something')->shouldBeCalledOnce(); $this->commandTester->execute([ 'command' => 'shortcode:process-previews', ]); } /** * @test */ public function exceptionWillOutputError() { $items = [ new ShortUrl('http://foo.com'), new ShortUrl('https://bar.com'), new ShortUrl('http://baz.com/something'), ]; $paginator = $this->createPaginator($items); $this->shortUrlService->listShortUrls(1)->willReturn($paginator)->shouldBeCalledOnce(); $this->previewGenerator->generatePreview(Argument::any())->willThrow(PreviewGenerationException::class) ->shouldBeCalledTimes(count($items)); $this->commandTester->execute([ 'command' => 'shortcode:process-previews', ]); $output = $this->commandTester->getDisplay(); $this->assertEquals(count($items), substr_count($output, 'Error')); } protected function createPaginator(array $items) { $paginator = new Paginator(new ArrayAdapter($items)); $paginator->setItemCountPerPage(count($items)); return $paginator; } }