mirror of https://github.com/FriendsOfTYPO3/tea.git synced 2024-11-09 03:36:13 +01:00

[FEATURE] Add command controller to create test data

Related: #11120
This commit is contained in:
Karsten Nowak 2024-05-07 14:21:17 +02:00
parent 94487006b1
commit b42f6ed08e
2 changed files with 89 additions and 0 deletions

View file

@ -0,0 +1,79 @@
<?php
declare(strict_types=1);
namespace TTN\Tea\Command;
/*
* Command to create test data for the tea extension.
*/
use phpDocumentor\Reflection\Types\Integer;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use TYPO3\CMS\Core\Database\Connection;
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
final class CreateTestDataCommand extends Command
{
/** @phpstan-ignore-next-line */
protected array $teaData = [
[
'title' => 'Darjeeling',
'description' => 'I love that tea!',
'sys_language_uid' => 0
],
[
'title' => 'Earl Grey',
'description' => 'A nice tea!',
'sys_language_uid' => 0
]
];
protected function configure(): void
{
$this
->setHelp('Create test data for the tea extension in an already existing page (sysfolder).')
->addArgument(
'pageId',
InputArgument::REQUIRED,
'Existing sysfolder page id.'
)
->addOption(
'delete-data-before',
'd',
InputOption::VALUE_NONE,
'Delete all tea data in the defined pid before creating new data.'
);
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
/** @var integer $pageId */
$pageId = $input->getArgument('pageId') ?? 0;
/** @var boolean $deleteDataBefore */
$deleteDataBefore = $input->getOption('delete-data-before') ?? false;
$table = 'tx_tea_domain_model_tea';
$connectionForTable = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
if($deleteDataBefore) {
$query = $connectionForTable;
$query->delete($table, ['pid' => $pageId], [Connection::PARAM_INT]);
$output->writeln(sprintf('Existing data in page %s deleted.',$pageId));
}
$query = $connectionForTable;
foreach ($this->teaData as $item) {
$item = ['pid' => $pageId, ...$item];
$query->insert($table,
$item
);
}
$output->writeln(sprintf('Test data in page %s created.', $pageId));
return Command::SUCCESS;
}
}

View file

@ -4,6 +4,8 @@ declare(strict_types=1);
namespace Symfony\Component\DependencyInjection\Loader\Configurator; namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use TTN\Tea\Command\CreateTestDataCommand;
return static function (ContainerConfigurator $containerConfigurator) { return static function (ContainerConfigurator $containerConfigurator) {
$services = $containerConfigurator->services() $services = $containerConfigurator->services()
->defaults() ->defaults()
@ -12,4 +14,12 @@ return static function (ContainerConfigurator $containerConfigurator) {
$services->load('TTN\\Tea\\', '../Classes/*') $services->load('TTN\\Tea\\', '../Classes/*')
->exclude('../Classes/Domain/Model/*'); ->exclude('../Classes/Domain/Model/*');
$services->set(CreateTestDataCommand::class)
->tag('console.command', [
'command' => 'tea:createtestdata',
'description'=>'Create test data in existing sysfolder'
]
);
}; };