import assert from "node:assert/strict"; import { afterEach, beforeEach, describe, test } from "vitest"; import { cancelShutdown, isDaemonMode, isShutdownPending, scheduleShutdown, } from "../shutdown-gate.ts"; describe("shutdown-gate", () => { afterEach(() => { // Always clean up any pending timers between tests cancelShutdown(); delete process.env.SF_WEB_DAEMON_MODE; }); describe("default mode (no daemon)", () => { test("scheduleShutdown() sets a pending timer", () => { scheduleShutdown(); assert.equal(isShutdownPending(), true); }); test("cancelShutdown() clears the pending timer", () => { scheduleShutdown(); cancelShutdown(); assert.equal(isShutdownPending(), false); }); test("isDaemonMode() returns false", () => { assert.equal(isDaemonMode(), false); }); }); describe("daemon mode (SF_WEB_DAEMON_MODE=1)", () => { beforeEach(() => { process.env.SF_WEB_DAEMON_MODE = "1"; }); test("isDaemonMode() returns true", () => { assert.equal(isDaemonMode(), true); }); test("scheduleShutdown() does not schedule a timer", () => { scheduleShutdown(); assert.equal( isShutdownPending(), false, "shutdown timer must not be set in daemon mode", ); }); test("scheduleShutdown() is safe to call multiple times", () => { scheduleShutdown(); scheduleShutdown(); scheduleShutdown(); assert.equal(isShutdownPending(), false); }); }); describe("daemon mode is not activated by other values", () => { test("SF_WEB_DAEMON_MODE=0 does not enable daemon mode", () => { process.env.SF_WEB_DAEMON_MODE = "0"; assert.equal(isDaemonMode(), false); scheduleShutdown(); assert.equal(isShutdownPending(), true); }); test("SF_WEB_DAEMON_MODE=true does not enable daemon mode", () => { process.env.SF_WEB_DAEMON_MODE = "true"; assert.equal(isDaemonMode(), false); scheduleShutdown(); assert.equal(isShutdownPending(), true); }); test("unset SF_WEB_DAEMON_MODE does not enable daemon mode", () => { delete process.env.SF_WEB_DAEMON_MODE; assert.equal(isDaemonMode(), false); scheduleShutdown(); assert.equal(isShutdownPending(), true); }); }); });