mirror of
https://github.com/shlinkio/shlink.git
synced 2024-11-27 08:18:24 +03:00
Updated ListTagsCommand so that it displays extended information
This commit is contained in:
parent
fbb1c449da
commit
c336bb1901
3 changed files with 32 additions and 14 deletions
|
@ -6,7 +6,7 @@ namespace Shlinkio\Shlink\CLI\Command\Tag;
|
||||||
|
|
||||||
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
||||||
use Shlinkio\Shlink\CLI\Util\ShlinkTable;
|
use Shlinkio\Shlink\CLI\Util\ShlinkTable;
|
||||||
use Shlinkio\Shlink\Core\Entity\Tag;
|
use Shlinkio\Shlink\Core\Tag\Model\TagInfo;
|
||||||
use Shlinkio\Shlink\Core\Tag\TagServiceInterface;
|
use Shlinkio\Shlink\Core\Tag\TagServiceInterface;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
@ -35,17 +35,20 @@ class ListTagsCommand extends Command
|
||||||
|
|
||||||
protected function execute(InputInterface $input, OutputInterface $output): ?int
|
protected function execute(InputInterface $input, OutputInterface $output): ?int
|
||||||
{
|
{
|
||||||
ShlinkTable::fromOutput($output)->render(['Name'], $this->getTagsRows());
|
ShlinkTable::fromOutput($output)->render(['Name', 'URLs amount', 'Visits amount'], $this->getTagsRows());
|
||||||
return ExitCodes::EXIT_SUCCESS;
|
return ExitCodes::EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getTagsRows(): array
|
private function getTagsRows(): array
|
||||||
{
|
{
|
||||||
$tags = $this->tagService->listTags();
|
$tags = $this->tagService->tagsInfo();
|
||||||
if (empty($tags)) {
|
if (empty($tags)) {
|
||||||
return [['No tags yet']];
|
return [['No tags found', '-', '-']];
|
||||||
}
|
}
|
||||||
|
|
||||||
return map($tags, fn (Tag $tag) => [(string) $tag]);
|
return map(
|
||||||
|
$tags,
|
||||||
|
fn (TagInfo $tagInfo) => [(string) $tagInfo->tag(), $tagInfo->shortUrlsCount(), $tagInfo->visitsCount()],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ use PHPUnit\Framework\TestCase;
|
||||||
use Prophecy\Prophecy\ObjectProphecy;
|
use Prophecy\Prophecy\ObjectProphecy;
|
||||||
use Shlinkio\Shlink\CLI\Command\Tag\ListTagsCommand;
|
use Shlinkio\Shlink\CLI\Command\Tag\ListTagsCommand;
|
||||||
use Shlinkio\Shlink\Core\Entity\Tag;
|
use Shlinkio\Shlink\Core\Entity\Tag;
|
||||||
|
use Shlinkio\Shlink\Core\Tag\Model\TagInfo;
|
||||||
use Shlinkio\Shlink\Core\Tag\TagServiceInterface;
|
use Shlinkio\Shlink\Core\Tag\TagServiceInterface;
|
||||||
use Symfony\Component\Console\Application;
|
use Symfony\Component\Console\Application;
|
||||||
use Symfony\Component\Console\Tester\CommandTester;
|
use Symfony\Component\Console\Tester\CommandTester;
|
||||||
|
@ -31,28 +32,32 @@ class ListTagsCommandTest extends TestCase
|
||||||
/** @test */
|
/** @test */
|
||||||
public function noTagsPrintsEmptyMessage(): void
|
public function noTagsPrintsEmptyMessage(): void
|
||||||
{
|
{
|
||||||
$listTags = $this->tagService->listTags()->willReturn([]);
|
$tagsInfo = $this->tagService->tagsInfo()->willReturn([]);
|
||||||
|
|
||||||
$this->commandTester->execute([]);
|
$this->commandTester->execute([]);
|
||||||
$output = $this->commandTester->getDisplay();
|
$output = $this->commandTester->getDisplay();
|
||||||
|
|
||||||
$this->assertStringContainsString('No tags yet', $output);
|
$this->assertStringContainsString('No tags found', $output);
|
||||||
$listTags->shouldHaveBeenCalled();
|
$tagsInfo->shouldHaveBeenCalled();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function listOfTagsIsPrinted(): void
|
public function listOfTagsIsPrinted(): void
|
||||||
{
|
{
|
||||||
$listTags = $this->tagService->listTags()->willReturn([
|
$tagsInfo = $this->tagService->tagsInfo()->willReturn([
|
||||||
new Tag('foo'),
|
new TagInfo(new Tag('foo'), 10, 2),
|
||||||
new Tag('bar'),
|
new TagInfo(new Tag('bar'), 7, 32),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->commandTester->execute([]);
|
$this->commandTester->execute([]);
|
||||||
$output = $this->commandTester->getDisplay();
|
$output = $this->commandTester->getDisplay();
|
||||||
|
|
||||||
$this->assertStringContainsString('foo', $output);
|
$this->assertStringContainsString('| foo', $output);
|
||||||
$this->assertStringContainsString('bar', $output);
|
$this->assertStringContainsString('| bar', $output);
|
||||||
$listTags->shouldHaveBeenCalled();
|
$this->assertStringContainsString('| 10 ', $output);
|
||||||
|
$this->assertStringContainsString('| 2 ', $output);
|
||||||
|
$this->assertStringContainsString('| 7 ', $output);
|
||||||
|
$this->assertStringContainsString('| 32 ', $output);
|
||||||
|
$tagsInfo->shouldHaveBeenCalled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,16 @@ final class TagInfo implements JsonSerializable
|
||||||
return $this->tag;
|
return $this->tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function shortUrlsCount(): int
|
||||||
|
{
|
||||||
|
return $this->shortUrlsCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function visitsCount(): int
|
||||||
|
{
|
||||||
|
return $this->visitsCount;
|
||||||
|
}
|
||||||
|
|
||||||
public function jsonSerialize(): array
|
public function jsonSerialize(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
|
|
Loading…
Reference in a new issue