mirror of
https://github.com/shlinkio/shlink.git
synced 2025-03-29 04:52:54 +03:00
Updated database commands so that internal commands are run with mustRun
This commit is contained in:
parent
a959b5bf02
commit
c34d5a35e2
6 changed files with 27 additions and 48 deletions
|
@ -5,6 +5,7 @@ declare(strict_types=1);
|
||||||
namespace Shlinkio\Shlink\CLI\Command\Db;
|
namespace Shlinkio\Shlink\CLI\Command\Db;
|
||||||
|
|
||||||
use Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand;
|
use Shlinkio\Shlink\CLI\Command\Util\AbstractLockedCommand;
|
||||||
|
use Shlinkio\Shlink\CLI\Command\Util\LockedCommandConfig;
|
||||||
use Symfony\Component\Console\Helper\ProcessHelper;
|
use Symfony\Component\Console\Helper\ProcessHelper;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
use Symfony\Component\Lock\Factory as Locker;
|
use Symfony\Component\Lock\Factory as Locker;
|
||||||
|
@ -29,6 +30,11 @@ abstract class AbstractDatabaseCommand extends AbstractLockedCommand
|
||||||
protected function runPhpCommand(OutputInterface $output, array $command): void
|
protected function runPhpCommand(OutputInterface $output, array $command): void
|
||||||
{
|
{
|
||||||
array_unshift($command, $this->phpBinary);
|
array_unshift($command, $this->phpBinary);
|
||||||
$this->processHelper->run($output, $command, null, null, $output->getVerbosity());
|
$this->processHelper->mustRun($output, $command);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getLockConfig(): LockedCommandConfig
|
||||||
|
{
|
||||||
|
return new LockedCommandConfig($this->getName(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,6 @@ declare(strict_types=1);
|
||||||
namespace Shlinkio\Shlink\CLI\Command\Db;
|
namespace Shlinkio\Shlink\CLI\Command\Db;
|
||||||
|
|
||||||
use Doctrine\DBAL\Connection;
|
use Doctrine\DBAL\Connection;
|
||||||
use Shlinkio\Shlink\CLI\Command\Util\LockedCommandConfig;
|
|
||||||
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
||||||
use Symfony\Component\Console\Helper\ProcessHelper;
|
use Symfony\Component\Console\Helper\ProcessHelper;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
@ -19,8 +18,8 @@ use function Functional\contains;
|
||||||
class CreateDatabaseCommand extends AbstractDatabaseCommand
|
class CreateDatabaseCommand extends AbstractDatabaseCommand
|
||||||
{
|
{
|
||||||
public const NAME = 'db:create';
|
public const NAME = 'db:create';
|
||||||
public const DOCTRINE_HELPER_SCRIPT = 'vendor/doctrine/orm/bin/doctrine.php';
|
public const DOCTRINE_SCRIPT = 'vendor/doctrine/orm/bin/doctrine.php';
|
||||||
public const DOCTRINE_HELPER_COMMAND = 'orm:schema-tool:create';
|
public const DOCTRINE_CREATE_SCHEMA_COMMAND = 'orm:schema-tool:create';
|
||||||
|
|
||||||
/** @var Connection */
|
/** @var Connection */
|
||||||
private $regularConn;
|
private $regularConn;
|
||||||
|
@ -61,7 +60,7 @@ class CreateDatabaseCommand extends AbstractDatabaseCommand
|
||||||
|
|
||||||
// Create database
|
// Create database
|
||||||
$io->writeln('<fg=blue>Creating database tables...</>');
|
$io->writeln('<fg=blue>Creating database tables...</>');
|
||||||
$this->runPhpCommand($output, [self::DOCTRINE_HELPER_SCRIPT, self::DOCTRINE_HELPER_COMMAND]);
|
$this->runPhpCommand($output, [self::DOCTRINE_SCRIPT, self::DOCTRINE_CREATE_SCHEMA_COMMAND]);
|
||||||
$io->success('Database properly created!');
|
$io->success('Database properly created!');
|
||||||
|
|
||||||
return ExitCodes::EXIT_SUCCESS;
|
return ExitCodes::EXIT_SUCCESS;
|
||||||
|
@ -87,13 +86,8 @@ class CreateDatabaseCommand extends AbstractDatabaseCommand
|
||||||
private function schemaExists(): bool
|
private function schemaExists(): bool
|
||||||
{
|
{
|
||||||
// If at least one of the shlink tables exist, we will consider the database exists somehow.
|
// If at least one of the shlink tables exist, we will consider the database exists somehow.
|
||||||
// Any inconsistency will be taken care by the migrations
|
// Any inconsistency should be taken care by the migrations
|
||||||
$schemaManager = $this->regularConn->getSchemaManager();
|
$schemaManager = $this->regularConn->getSchemaManager();
|
||||||
return ! empty($schemaManager->listTableNames());
|
return ! empty($schemaManager->listTableNames());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getLockConfig(): LockedCommandConfig
|
|
||||||
{
|
|
||||||
return new LockedCommandConfig($this->getName(), true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,6 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Shlinkio\Shlink\CLI\Command\Db;
|
namespace Shlinkio\Shlink\CLI\Command\Db;
|
||||||
|
|
||||||
use Shlinkio\Shlink\CLI\Command\Util\LockedCommandConfig;
|
|
||||||
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
use Shlinkio\Shlink\CLI\Util\ExitCodes;
|
||||||
use Symfony\Component\Console\Input\InputInterface;
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
@ -13,8 +12,8 @@ use Symfony\Component\Console\Style\SymfonyStyle;
|
||||||
class MigrateDatabaseCommand extends AbstractDatabaseCommand
|
class MigrateDatabaseCommand extends AbstractDatabaseCommand
|
||||||
{
|
{
|
||||||
public const NAME = 'db:migrate';
|
public const NAME = 'db:migrate';
|
||||||
public const DOCTRINE_HELPER_SCRIPT = 'vendor/doctrine/migrations/bin/doctrine-migrations.php';
|
public const DOCTRINE_MIGRATIONS_SCRIPT = 'vendor/doctrine/migrations/bin/doctrine-migrations.php';
|
||||||
public const DOCTRINE_HELPER_COMMAND = 'migrations:migrate';
|
public const DOCTRINE_MIGRATE_COMMAND = 'migrations:migrate';
|
||||||
|
|
||||||
protected function configure(): void
|
protected function configure(): void
|
||||||
{
|
{
|
||||||
|
@ -28,14 +27,9 @@ class MigrateDatabaseCommand extends AbstractDatabaseCommand
|
||||||
$io = new SymfonyStyle($input, $output);
|
$io = new SymfonyStyle($input, $output);
|
||||||
|
|
||||||
$io->writeln('<fg=blue>Migrating database...</>');
|
$io->writeln('<fg=blue>Migrating database...</>');
|
||||||
$this->runPhpCommand($output, [self::DOCTRINE_HELPER_SCRIPT, self::DOCTRINE_HELPER_COMMAND]);
|
$this->runPhpCommand($output, [self::DOCTRINE_MIGRATIONS_SCRIPT, self::DOCTRINE_MIGRATE_COMMAND]);
|
||||||
$io->success('Database properly migrated!');
|
$io->success('Database properly migrated!');
|
||||||
|
|
||||||
return ExitCodes::EXIT_SUCCESS;
|
return ExitCodes::EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getLockConfig(): LockedCommandConfig
|
|
||||||
{
|
|
||||||
return new LockedCommandConfig($this->getName(), true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,10 +116,10 @@ class CreateDatabaseCommandTest extends TestCase
|
||||||
$createDatabase = $this->schemaManager->createDatabase($shlinkDatabase)->will(function () {
|
$createDatabase = $this->schemaManager->createDatabase($shlinkDatabase)->will(function () {
|
||||||
});
|
});
|
||||||
$listTables = $this->schemaManager->listTableNames()->willReturn([]);
|
$listTables = $this->schemaManager->listTableNames()->willReturn([]);
|
||||||
$runCommand = $this->processHelper->run(Argument::type(OutputInterface::class), [
|
$runCommand = $this->processHelper->mustRun(Argument::type(OutputInterface::class), [
|
||||||
'/usr/local/bin/php',
|
'/usr/local/bin/php',
|
||||||
CreateDatabaseCommand::DOCTRINE_HELPER_SCRIPT,
|
CreateDatabaseCommand::DOCTRINE_SCRIPT,
|
||||||
CreateDatabaseCommand::DOCTRINE_HELPER_COMMAND,
|
CreateDatabaseCommand::DOCTRINE_CREATE_SCHEMA_COMMAND,
|
||||||
], Argument::cetera());
|
], Argument::cetera());
|
||||||
|
|
||||||
$this->commandTester->execute([]);
|
$this->commandTester->execute([]);
|
||||||
|
|
|
@ -48,36 +48,20 @@ class MigrateDatabaseCommandTest extends TestCase
|
||||||
$this->commandTester = new CommandTester($command);
|
$this->commandTester = new CommandTester($command);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** @test */
|
||||||
* @test
|
public function migrationsCommandIsRunWithProperVerbosity(): void
|
||||||
* @dataProvider provideVerbosities
|
|
||||||
*/
|
|
||||||
public function migrationsCommandIsRunWithProperVerbosity(int $verbosity): void
|
|
||||||
{
|
{
|
||||||
$runCommand = $this->processHelper->run(Argument::type(OutputInterface::class), [
|
$runCommand = $this->processHelper->mustRun(Argument::type(OutputInterface::class), [
|
||||||
'/usr/local/bin/php',
|
'/usr/local/bin/php',
|
||||||
MigrateDatabaseCommand::DOCTRINE_HELPER_SCRIPT,
|
MigrateDatabaseCommand::DOCTRINE_MIGRATIONS_SCRIPT,
|
||||||
MigrateDatabaseCommand::DOCTRINE_HELPER_COMMAND,
|
MigrateDatabaseCommand::DOCTRINE_MIGRATE_COMMAND,
|
||||||
], null, null, $verbosity);
|
], Argument::cetera());
|
||||||
|
|
||||||
$this->commandTester->execute([], [
|
$this->commandTester->execute([]);
|
||||||
'verbosity' => $verbosity,
|
|
||||||
]);
|
|
||||||
$output = $this->commandTester->getDisplay();
|
$output = $this->commandTester->getDisplay();
|
||||||
|
|
||||||
if ($verbosity >= OutputInterface::VERBOSITY_VERBOSE) {
|
|
||||||
$this->assertStringContainsString('Migrating database...', $output);
|
$this->assertStringContainsString('Migrating database...', $output);
|
||||||
$this->assertStringContainsString('Database properly migrated!', $output);
|
$this->assertStringContainsString('Database properly migrated!', $output);
|
||||||
}
|
|
||||||
$runCommand->shouldHaveBeenCalledOnce();
|
$runCommand->shouldHaveBeenCalledOnce();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function provideVerbosities(): iterable
|
|
||||||
{
|
|
||||||
yield 'debug' => [OutputInterface::VERBOSITY_DEBUG];
|
|
||||||
yield 'normal' => [OutputInterface::VERBOSITY_NORMAL];
|
|
||||||
yield 'quiet' => [OutputInterface::VERBOSITY_QUIET];
|
|
||||||
yield 'verbose' => [OutputInterface::VERBOSITY_VERBOSE];
|
|
||||||
yield 'very verbose' => [OutputInterface::VERBOSITY_VERY_VERBOSE];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,3 +4,4 @@ parameters:
|
||||||
- '#ObjectManager::flush()#'
|
- '#ObjectManager::flush()#'
|
||||||
- '#Undefined variable: \$metadata#'
|
- '#Undefined variable: \$metadata#'
|
||||||
- '#AbstractQuery::setParameters()#'
|
- '#AbstractQuery::setParameters()#'
|
||||||
|
- '#mustRun()#'
|
||||||
|
|
Loading…
Add table
Reference in a new issue