Skip to content

Commit

Permalink
[WIP] Add command controller to create test data
Browse files Browse the repository at this point in the history
Related: #11120
  • Loading branch information
kanow committed May 8, 2024
1 parent 2d91568 commit 60272f9
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
79 changes: 79 additions & 0 deletions Classes/Command/CreateTestDataCommand.php
Original file line number Diff line number Diff line change
@@ -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;
}
}
10 changes: 10 additions & 0 deletions Configuration/Services.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

namespace Symfony\Component\DependencyInjection\Loader\Configurator;

use TTN\Tea\Command\CreateTestDataCommand;

return static function (ContainerConfigurator $containerConfigurator) {
$services = $containerConfigurator->services()
->defaults()
Expand All @@ -12,4 +14,12 @@

$services->load('TTN\\Tea\\', '../Classes/*')
->exclude('../Classes/Domain/Model/*');

$services->set(CreateTestDataCommand::class)
->tag('console.command', [
'command' => 'tea:createtestdata',
'description'=>'Create test data in existing sysfolder'
]
);

};

0 comments on commit 60272f9

Please sign in to comment.