true]; require dirname(__DIR__) . '/src/bootstrap.php'; $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__DIR__) . '/src')); foreach ($iterator as $file) { if ($file instanceof SplFileInfo && $file->isFile() && $file->getExtension() === 'php' && $file->getFilename() !== 'bootstrap.php') { require_once $file->getPathname(); } } $config = new Config(dirname(__DIR__)); $database = new Database($config); new ObjectRepository($database); new UsageRepository($database); new SettingsRepository($database); ob_start(); View::render('login', [ 'appName' => 'R2 Manager', 'csrf' => 'token', 'flash' => [], ]); View::render('dashboard', [ 'appName' => 'R2 Manager', 'bucket' => 'example-bucket', 'configured' => false, 'missingSettings' => ['R2_ACCOUNT_ID'], 'prefix' => '', 'breadcrumbs' => [['label' => 'Bucket root', 'prefix' => '']], 'search' => '', 'tagFilter' => '', 'tagNames' => [], 'folders' => [], 'objects' => [], 'stats' => ['objects' => 0, 'folders' => 0, 'bytes' => 0, 'latest_sync' => null], 'eventSummary' => [], 'billingSummary' => [ 'storage_bytes' => 0, 'class_a_requests' => 0, 'class_b_requests' => 0, 'local_requests' => 0, 'uploaded_bytes' => 0, 'downloaded_bytes' => 0, ], 'dailySummary' => [], 'recentShares' => [], 'shareCount' => 0, 'selected' => null, 'selectedPublicUrl' => null, 'corsJson' => '[]', 'csrf' => 'token', 'flash' => [], ]); $html = ob_get_clean(); if (!is_string($html) || !str_contains($html, 'Storage manager') || !str_contains($html, 'Objects')) { throw new RuntimeException('Expected smoke-render content was not produced.'); } echo "Smoke OK\n";