# preflight.test.ts — test suite summary Smoke tests for the preflight orchestrator (`setup/preflight.ts`), which runs the 12 setup steps before installation. ## Setup / mocks - `spawnSync` is stubbed so no real subprocesses run — every call returns exit 0 by default - `fs.writeFileSync` / `mkdirSync` are stubbed to capture what gets written without touching disk - `process.exit` is spied on so a failing preflight does not kill the test runner - Two helpers extract the outputs: `getSummaryJson()` and `getSummaryEnv()` parse what was written to `summary.json` / `summary.env` ## 5 describe blocks, 17 tests ### basic run (no flags) All 12 steps run in the correct order: ``` environment → pi-config → jails → db → git → cms → hosts → mounts → telegram-auth → service → verify → doctor ``` - `summary.json` has `overallStatus: success` - `summary.env` has `OVERALL_STATUS=success`, `WITH_ONBOARDING=false`, `CAPTURE_PASSWORD_STEP=false` - `process.exit` is not called ### failure handling - A single failing step does not abort the run — all 12 still execute - `overallStatus` becomes `failed` - `process.exit(1)` is called - `--fail-fast` stops after the first failure (only 1 npm call, then exit 1) ### --with-onboarding - The interactive onboarding step skips gracefully in a non-TTY environment (test runner has no TTY) - All 12 non-interactive steps still run - `overallStatus` is `failed` because onboarding itself fails without a TTY - `WITH_ONBOARDING=true` appears in `summary.env` ### --capture-password-step - Implies `--with-onboarding` (verified via `summary.json` args) - The Python screenshot capture does NOT run when onboarding failed (no TTY) - `CAPTURE_PASSWORD_STEP=true` appears in `summary.env` ### summary output structure - Every step result in `summary.json` has all required fields: `id`, `label`, `commandLine`, `exitCode`, `status`, `startedAt`, `finishedAt`, `logFile` - Log file paths are bare filenames with no path separator (e.g. `environment.log`) - `summary.env` contains a `*_STATUS=` and `*_EXIT_CODE=` line for every step