. */ namespace SP\Tests\Modules\Cli; use DI\ContainerBuilder; use DI\DependencyException; use DI\NotFoundException; use Exception; use PHPUnit\Framework\TestCase; use Psr\Container\ContainerInterface; use SP\Domain\Core\Context\Context; use SP\Domain\Database\Ports\DbStorageHandler; use Symfony\Component\Console\Tester\CommandTester; use function SP\Tests\getDbHandler; use const SP\Tests\APP_DEFINITIONS_FILE; define('APP_MODULE', 'cli'); /** * Class CliTestCase */ abstract class CliTestCase extends TestCase { protected static ContainerInterface $dic; /** * @var string[] */ protected static array $commandInputData = []; /** * This method is called before the first test of this test class is run. * * @throws Exception */ public static function setUpBeforeClass(): void { parent::setUpBeforeClass(); $builder = new ContainerBuilder(); $builder->addDefinitions( APP_DEFINITIONS_FILE, MODULES_PATH.DIRECTORY_SEPARATOR.'cli'.DIRECTORY_SEPARATOR.'module.php' ); self::$dic = $builder->build(); $context = self::$dic->get(Context::class); $context->initialize(); } /** * @throws DependencyException * @throws NotFoundException */ protected function executeCommandTest( string $commandClass, ?array $inputData = null, bool $useInputData = true ): CommandTester { $installCommand = self::$dic->get($commandClass); if (null === $inputData && $useInputData) { $inputData = static::$commandInputData; } $commandTester = new CommandTester($installCommand); $commandTester->execute( $inputData ?? [], ['interactive' => false] ); return $commandTester; } protected function setupDatabase(): void { self::$dic->set(DbStorageHandler::class, getDbHandler()); } }