diff --git a/module/CLI/src/Command/Shortcode/ListShortcodesCommand.php b/module/CLI/src/Command/Shortcode/ListShortcodesCommand.php
index 31ba923e..1e8ce12c 100644
--- a/module/CLI/src/Command/Shortcode/ListShortcodesCommand.php
+++ b/module/CLI/src/Command/Shortcode/ListShortcodesCommand.php
@@ -7,12 +7,10 @@ use Shlinkio\Shlink\Common\Paginator\Adapter\PaginableRepositoryAdapter;
use Shlinkio\Shlink\Common\Paginator\Util\PaginatorUtilsTrait;
use Shlinkio\Shlink\Core\Service\ShortUrlServiceInterface;
use Symfony\Component\Console\Command\Command;
-use Symfony\Component\Console\Helper\QuestionHelper;
-use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
-use Symfony\Component\Console\Question\ConfirmationQuestion;
+use Symfony\Component\Console\Style\SymfonyStyle;
use Zend\I18n\Translator\TranslatorInterface;
class ListShortcodesCommand extends Command
@@ -34,7 +32,7 @@ class ListShortcodesCommand extends Command
{
$this->shortUrlService = $shortUrlService;
$this->translator = $translator;
- parent::__construct(null);
+ parent::__construct();
}
public function configure()
@@ -83,19 +81,16 @@ class ListShortcodesCommand extends Command
public function execute(InputInterface $input, OutputInterface $output)
{
+ $io = new SymfonyStyle($input, $output);
$page = (int) $input->getOption('page');
$searchTerm = $input->getOption('searchTerm');
$tags = $input->getOption('tags');
- $tags = ! empty($tags) ? explode(',', $tags) : [];
+ $tags = ! empty($tags) ? \explode(',', $tags) : [];
$showTags = $input->getOption('showTags');
- /** @var QuestionHelper $helper */
- $helper = $this->getHelper('question');
-
do {
$result = $this->shortUrlService->listShortUrls($page, $searchTerm, $tags, $this->processOrderBy($input));
$page++;
- $table = new Table($output);
$headers = [
$this->translator->translate('Short code'),
@@ -106,8 +101,8 @@ class ListShortcodesCommand extends Command
if ($showTags) {
$headers[] = $this->translator->translate('Tags');
}
- $table->setHeaders($headers);
+ $rows = [];
foreach ($result as $row) {
$shortUrl = $row->jsonSerialize();
if ($showTags) {
@@ -120,27 +115,23 @@ class ListShortcodesCommand extends Command
unset($shortUrl['tags']);
}
- $table->addRow(array_values($shortUrl));
+ $rows[] = \array_values($shortUrl);
}
- $table->render();
+ $io->table($headers, $rows);
if ($this->isLastPage($result)) {
$continue = false;
- $output->writeln(
- sprintf('%s', $this->translator->translate('You have reached last page'))
- );
+ $io->success($this->translator->translate('Short codes properly listed'));
} else {
- $continue = $helper->ask($input, $output, new ConfirmationQuestion(
- sprintf('' . $this->translator->translate(
- 'Continue with page'
- ) . ' %s>? (y/N) ', $page),
+ $continue = $io->confirm(
+ \sprintf($this->translator->translate('Continue with page') . ' %s>?', $page),
false
- ));
+ );
}
} while ($continue);
}
- protected function processOrderBy(InputInterface $input)
+ private function processOrderBy(InputInterface $input)
{
$orderBy = $input->getOption('orderBy');
if (empty($orderBy)) {
diff --git a/module/CLI/test/Command/Shortcode/ListShortcodesCommandTest.php b/module/CLI/test/Command/Shortcode/ListShortcodesCommandTest.php
index a18cf217..8aede93a 100644
--- a/module/CLI/test/Command/Shortcode/ListShortcodesCommandTest.php
+++ b/module/CLI/test/Command/Shortcode/ListShortcodesCommandTest.php
@@ -10,7 +10,6 @@ use Shlinkio\Shlink\CLI\Command\Shortcode\ListShortcodesCommand;
use Shlinkio\Shlink\Core\Entity\ShortUrl;
use Shlinkio\Shlink\Core\Service\ShortUrlServiceInterface;
use Symfony\Component\Console\Application;
-use Symfony\Component\Console\Helper\QuestionHelper;
use Symfony\Component\Console\Tester\CommandTester;
use Zend\I18n\Translator\Translator;
use Zend\Paginator\Adapter\ArrayAdapter;
@@ -22,10 +21,6 @@ class ListShortcodesCommandTest extends TestCase
* @var CommandTester
*/
protected $commandTester;
- /**
- * @var QuestionHelper
- */
- protected $questionHelper;
/**
* @var ObjectProphecy
*/
@@ -37,8 +32,6 @@ class ListShortcodesCommandTest extends TestCase
$app = new Application();
$command = new ListShortcodesCommand($this->shortUrlService->reveal(), Translator::factory([]));
$app->add($command);
-
- $this->questionHelper = $command->getHelper('question');
$this->commandTester = new CommandTester($command);
}
@@ -47,10 +40,10 @@ class ListShortcodesCommandTest extends TestCase
*/
public function noInputCallsListJustOnce()
{
- $this->questionHelper->setInputStream($this->getInputStream('\n'));
$this->shortUrlService->listShortUrls(1, null, [], null)->willReturn(new Paginator(new ArrayAdapter()))
->shouldBeCalledTimes(1);
+ $this->commandTester->setInputs(['n']);
$this->commandTester->execute(['command' => 'shortcode:list']);
}
@@ -61,22 +54,15 @@ class ListShortcodesCommandTest extends TestCase
{
// The paginator will return more than one page for the first 3 times
$data = [];
- for ($i = 0; $i < 30; $i++) {
+ for ($i = 0; $i < 50; $i++) {
$data[] = new ShortUrl();
}
- $data = array_chunk($data, 11);
- $questionHelper = $this->questionHelper;
- $that = $this;
- $this->shortUrlService->listShortUrls(Argument::cetera())->will(function () use (
- &$data,
- $questionHelper,
- $that
- ) {
- $questionHelper->setInputStream($that->getInputStream('y'));
- return new Paginator(new ArrayAdapter(array_shift($data)));
+ $this->shortUrlService->listShortUrls(Argument::cetera())->will(function () use (&$data) {
+ return new Paginator(new ArrayAdapter($data));
})->shouldBeCalledTimes(3);
+ $this->commandTester->setInputs(['y', 'y', 'n']);
$this->commandTester->execute(['command' => 'shortcode:list']);
}
@@ -91,10 +77,10 @@ class ListShortcodesCommandTest extends TestCase
$data[] = new ShortUrl();
}
- $this->questionHelper->setInputStream($this->getInputStream('n'));
$this->shortUrlService->listShortUrls(Argument::cetera())->willReturn(new Paginator(new ArrayAdapter($data)))
->shouldBeCalledTimes(1);
+ $this->commandTester->setInputs(['n']);
$this->commandTester->execute(['command' => 'shortcode:list']);
}
@@ -104,10 +90,10 @@ class ListShortcodesCommandTest extends TestCase
public function passingPageWillMakeListStartOnThatPage()
{
$page = 5;
- $this->questionHelper->setInputStream($this->getInputStream('\n'));
$this->shortUrlService->listShortUrls($page, null, [], null)->willReturn(new Paginator(new ArrayAdapter()))
->shouldBeCalledTimes(1);
+ $this->commandTester->setInputs(['y']);
$this->commandTester->execute([
'command' => 'shortcode:list',
'--page' => $page,
@@ -119,24 +105,15 @@ class ListShortcodesCommandTest extends TestCase
*/
public function ifTagsFlagIsProvidedTagsColumnIsIncluded()
{
- $this->questionHelper->setInputStream($this->getInputStream('\n'));
$this->shortUrlService->listShortUrls(1, null, [], null)->willReturn(new Paginator(new ArrayAdapter()))
->shouldBeCalledTimes(1);
+ $this->commandTester->setInputs(['y']);
$this->commandTester->execute([
'command' => 'shortcode:list',
'--showTags' => true,
]);
$output = $this->commandTester->getDisplay();
- $this->assertTrue(strpos($output, 'Tags') > 0);
- }
-
- protected function getInputStream($inputData)
- {
- $stream = fopen('php://memory', 'r+', false);
- fputs($stream, $inputData);
- rewind($stream);
-
- return $stream;
+ $this->assertContains('Tags', $output);
}
}