bootEnv(\dirname(__DIR__) . '/.env'); } global $APP_KERNEL; if (isset($_ENV['APP_ENV'])) { $env = $_ENV['APP_ENV']; } elseif (isset($_SERVER['APP_ENV'])) { $env = $_SERVER['APP_ENV']; } else { $env = 'test'; } if (isset($_ENV['APP_DEBUG'])) { $debug = $_ENV['APP_DEBUG']; } elseif (isset($_SERVER['APP_DEBUG'])) { $debug = $_SERVER['APP_DEBUG']; } else { $debug = true; } ini_set('memory_limit', '1G'); $APP_KERNEL = new \App\Kernel($env, (bool) $debug); $APP_KERNEL->boot(); $container = $APP_KERNEL->getContainer()->get('test.service_container'); $services = F\map( (new \ReflectionClass(GNUsocial::class))->getMethod('__construct')->getParameters(), fn ($p) => $container->get((string) $p->getType()), ); global $GNUSOCIAL; $GNUSOCIAL = new GNUsocial(...$services); $doctrine = $container->get(ManagerRegistry::class); $em = $container->get(EntityManagerInterface::class); $connection = $doctrine->getConnection(); $params = $connection->getParams(); $tmpConnection = DriverManager::getConnection($params); $name = $params['dbname']; if (!\in_array($name, $tmpConnection->getSchemaManager()->listDatabases())) { unset($params['dbname'], $params['path'], $params['url']); $tmpConnection = DriverManager::getConnection($params); $tmpConnection->getSchemaManager()->createDatabase($name); $metadatas = $em->getMetadataFactory()->getAllMetadata(); $schemaTool = new SchemaTool($em); $schemaTool->createSchema($metadatas); $fixturesLoader = $container->get('doctrine.fixtures.loader'); $fixtures = $fixturesLoader->getFixtures(); $executor = new ORMExecutor($em); $executor->execute($fixtures, append: true); $tmpConnection->close(); echo "Created database {$name}\n"; } $connection->connect(); $connection->setNestTransactionsWithSavepoints(true); $connection->beginTransaction(); register_shutdown_function(function ($connection) { echo 'Rolling back changes'; $connection->rollBack(); }, $connection);