mirror of
https://github.com/shlinkio/shlink.git
synced 2025-02-20 01:09:56 +03:00
Created GenerateCharsetCommand
This commit is contained in:
parent
ce2b28a0b4
commit
9b9b1415fe
4 changed files with 112 additions and 8 deletions
|
@ -10,6 +10,7 @@ return [
|
||||||
Command\ListShortcodesCommand::class,
|
Command\ListShortcodesCommand::class,
|
||||||
Command\GetVisitsCommand::class,
|
Command\GetVisitsCommand::class,
|
||||||
Command\ProcessVisitsCommand::class,
|
Command\ProcessVisitsCommand::class,
|
||||||
|
Command\Config\GenerateCharsetCommand::class,
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
<?php
|
<?php
|
||||||
use Acelaya\ZsmAnnotatedServices\Factory\V3\AnnotatedFactory;
|
use Acelaya\ZsmAnnotatedServices\Factory\V3\AnnotatedFactory;
|
||||||
use Shlinkio\Shlink\CLI;
|
use Shlinkio\Shlink\CLI\Command;
|
||||||
use Symfony\Component\Console;
|
use Shlinkio\Shlink\CLI\Factory\ApplicationFactory;
|
||||||
|
use Symfony\Component\Console\Application;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
'dependencies' => [
|
'dependencies' => [
|
||||||
'factories' => [
|
'factories' => [
|
||||||
Console\Application::class => CLI\Factory\ApplicationFactory::class,
|
Application::class => ApplicationFactory::class,
|
||||||
|
|
||||||
CLI\Command\GenerateShortcodeCommand::class => AnnotatedFactory::class,
|
Command\GenerateShortcodeCommand::class => AnnotatedFactory::class,
|
||||||
CLI\Command\ResolveUrlCommand::class => AnnotatedFactory::class,
|
Command\ResolveUrlCommand::class => AnnotatedFactory::class,
|
||||||
CLI\Command\ListShortcodesCommand::class => AnnotatedFactory::class,
|
Command\ListShortcodesCommand::class => AnnotatedFactory::class,
|
||||||
CLI\Command\GetVisitsCommand::class => AnnotatedFactory::class,
|
Command\GetVisitsCommand::class => AnnotatedFactory::class,
|
||||||
CLI\Command\ProcessVisitsCommand::class => AnnotatedFactory::class,
|
Command\ProcessVisitsCommand::class => AnnotatedFactory::class,
|
||||||
|
Command\ProcessVisitsCommand::class => AnnotatedFactory::class,
|
||||||
|
Command\Config\GenerateCharsetCommand::class => AnnotatedFactory::class,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|
44
module/CLI/src/Command/Config/GenerateCharsetCommand.php
Normal file
44
module/CLI/src/Command/Config/GenerateCharsetCommand.php
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
<?php
|
||||||
|
namespace Shlinkio\Shlink\CLI\Command\Config;
|
||||||
|
|
||||||
|
use Acelaya\ZsmAnnotatedServices\Annotation\Inject;
|
||||||
|
use Shlinkio\Shlink\Core\Service\UrlShortener;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use Zend\I18n\Translator\TranslatorInterface;
|
||||||
|
|
||||||
|
class GenerateCharsetCommand extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var TranslatorInterface
|
||||||
|
*/
|
||||||
|
private $translator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GenerateCharsetCommand constructor.
|
||||||
|
* @param TranslatorInterface $translator
|
||||||
|
*
|
||||||
|
* @Inject({"translator"})
|
||||||
|
*/
|
||||||
|
public function __construct(TranslatorInterface $translator)
|
||||||
|
{
|
||||||
|
$this->translator = $translator;
|
||||||
|
parent::__construct(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function configure()
|
||||||
|
{
|
||||||
|
$this->setName('config:generate-charset')
|
||||||
|
->setDescription(sprintf($this->translator->translate(
|
||||||
|
'Generates a character set sample just by shuffling the default one, "%s". '
|
||||||
|
. 'Then it can be set in the SHORTCODE_CHARS environment variable'
|
||||||
|
), UrlShortener::DEFAULT_CHARS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$charSet = str_shuffle(UrlShortener::DEFAULT_CHARS);
|
||||||
|
$output->writeln($this->translator->translate('Character set:') . sprintf(' <info>%s</info>', $charSet));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
<?php
|
||||||
|
namespace ShlinkioTest\Shlink\CLI\Command\Config;
|
||||||
|
|
||||||
|
use PHPUnit_Framework_TestCase as TestCase;
|
||||||
|
use Shlinkio\Shlink\CLI\Command\Config\GenerateCharsetCommand;
|
||||||
|
use Shlinkio\Shlink\Core\Service\UrlShortener;
|
||||||
|
use Symfony\Component\Console\Application;
|
||||||
|
use Symfony\Component\Console\Tester\CommandTester;
|
||||||
|
use Zend\I18n\Translator\Translator;
|
||||||
|
|
||||||
|
class GenerateCharsetCommandTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var CommandTester
|
||||||
|
*/
|
||||||
|
protected $commandTester;
|
||||||
|
|
||||||
|
public function setUp()
|
||||||
|
{
|
||||||
|
$command = new GenerateCharsetCommand(Translator::factory([]));
|
||||||
|
$app = new Application();
|
||||||
|
$app->add($command);
|
||||||
|
|
||||||
|
$this->commandTester = new CommandTester($command);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function charactersAreGeneratedFromDefault()
|
||||||
|
{
|
||||||
|
$prefix = 'Character set: ';
|
||||||
|
$prefixLength = strlen($prefix);
|
||||||
|
|
||||||
|
$this->commandTester->execute([
|
||||||
|
'command' => 'config:generate-charset',
|
||||||
|
]);
|
||||||
|
$output = $this->commandTester->getDisplay();
|
||||||
|
|
||||||
|
// Both default character set and the new one should have the same length
|
||||||
|
$this->assertEquals($prefixLength + strlen(UrlShortener::DEFAULT_CHARS) + 1, strlen($output));
|
||||||
|
|
||||||
|
// Both default character set and the new one should have the same characters
|
||||||
|
$charset = substr($output, $prefixLength, strlen(UrlShortener::DEFAULT_CHARS));
|
||||||
|
$orderedDefault = $this->orderStringLetters(UrlShortener::DEFAULT_CHARS);
|
||||||
|
$orderedCharset = $this->orderStringLetters($charset);
|
||||||
|
$this->assertEquals($orderedDefault, $orderedCharset);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function orderStringLetters($string)
|
||||||
|
{
|
||||||
|
$letters = str_split($string);
|
||||||
|
sort($letters);
|
||||||
|
return implode('', $letters);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue