isFile()) { continue; } $path = $file->getPathname(); $relative = substr($path, strlen(PLUGIN_ROOT) + 1); if (str_starts_with($relative, '.git/') || str_starts_with($relative, 'tests/')) { continue; } $content = file_get_contents($path) ?: ''; if (preg_match('/placeholder|TODO|FIXME|not implemented|stub/i', $content)) { $bad[] = $relative; } } assert_same([], $bad); }); test('package source does not ship removed custom mail integration files', function (): void { $removedPaths = [ 'scripts/' . 'back' . 'end.sh', 'scripts/' . 'ex' . 'im', 'scripts/global_auto' . 'responder_worker.php', 'exec/lib/Back' . 'endRuntimeConfig.php', 'exec/lib/Message' . 'Classifier.php', 'exec/lib/Mail' . 'Sender.php', 'exec/lib/Repeat' . 'State.php', ]; foreach ($removedPaths as $relative) { $path = PLUGIN_ROOT . '/' . $relative; assert_false(is_file($path) || is_dir($path), $relative . ' must not exist'); } }); test('lifecycle scripts install directadmin sync cron only', function (): void { $install = file_get_contents(PLUGIN_ROOT . '/scripts/install.sh') ?: ''; $update = file_get_contents(PLUGIN_ROOT . '/scripts/update.sh') ?: ''; $uninstall = file_get_contents(PLUGIN_ROOT . '/scripts/uninstall.sh') ?: ''; assert_contains('/etc/cron.d/global-autoresponder', $install); assert_contains('sync_directadmin_vacations.php', $install); assert_contains('/etc/cron.d/global-autoresponder', $update); assert_contains('sync_directadmin_vacations.php', $update); assert_false(str_contains($install, 'back' . 'end-state.json')); assert_false(str_contains($install, 'state/' . 'replies')); assert_false(str_contains($uninstall, 'back' . 'end.sh')); });