diff --git a/module/CLI/src/Factory/ApplicationFactory.php b/module/CLI/src/Factory/ApplicationFactory.php index 51d5fdb3..a8e24bf3 100644 --- a/module/CLI/src/Factory/ApplicationFactory.php +++ b/module/CLI/src/Factory/ApplicationFactory.php @@ -25,7 +25,7 @@ class ApplicationFactory implements FactoryInterface public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $config = $container->get('config')['cli']; - $app = new CliApp(); + $app = new CliApp('Shlink', '1.0.0'); $commands = isset($config['commands']) ? $config['commands'] : []; foreach ($commands as $command) { diff --git a/module/CLI/test/Command/ResolveUrlCommandTest.php b/module/CLI/test/Command/ResolveUrlCommandTest.php new file mode 100644 index 00000000..a2f47c92 --- /dev/null +++ b/module/CLI/test/Command/ResolveUrlCommandTest.php @@ -0,0 +1,85 @@ +urlShortener = $this->prophesize(UrlShortener::class); + $command = new ResolveUrlCommand($this->urlShortener->reveal(), Translator::factory([])); + $app = new Application(); + $app->add($command); + + $this->commandTester = new CommandTester($command); + } + + /** + * @test + */ + public function correctShortCodeResolvesUrl() + { + $shortCode = 'abc123'; + $expectedUrl = 'http://domain.com/foo/bar'; + $this->urlShortener->shortCodeToUrl($shortCode)->willReturn($expectedUrl) + ->shouldBeCalledTimes(1); + + $this->commandTester->execute([ + 'command' => 'shortcode:parse', + 'shortCode' => $shortCode, + ]); + $output = $this->commandTester->getDisplay(); + $this->assertEquals('Long URL: ' . $expectedUrl . PHP_EOL, $output); + } + + /** + * @test + */ + public function incorrectShortCodeOutputsErrorMessage() + { + $shortCode = 'abc123'; + $this->urlShortener->shortCodeToUrl($shortCode)->willReturn(null) + ->shouldBeCalledTimes(1); + + $this->commandTester->execute([ + 'command' => 'shortcode:parse', + 'shortCode' => $shortCode, + ]); + $output = $this->commandTester->getDisplay(); + $this->assertEquals('No URL found for short code "' . $shortCode . '"' . PHP_EOL, $output); + } + + /** + * @test + */ + public function wrongShortCodeFormatOutputsErrorMessage() + { + $shortCode = 'abc123'; + $this->urlShortener->shortCodeToUrl($shortCode)->willThrow(new InvalidShortCodeException()) + ->shouldBeCalledTimes(1); + + $this->commandTester->execute([ + 'command' => 'shortcode:parse', + 'shortCode' => $shortCode, + ]); + $output = $this->commandTester->getDisplay(); + $this->assertEquals('Provided short code "' . $shortCode . '" has an invalid format.' . PHP_EOL, $output); + } +}