setup-bun/tests/utils.spec.ts
copilot-swe-agent[bot] f1e7007589 test: improve cross-platform compatibility and cleanup in utils tests
Co-authored-by: xhyrom <56601352+xhyrom@users.noreply.github.com>
2026-01-04 23:34:27 +00:00

115 lines
3.4 KiB
TypeScript

import { describe, expect, it, beforeEach, afterEach } from "bun:test";
import { existsSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
import { readVersionFromFile } from "../src/utils";
import { resolve } from "node:path";
import { tmpdir } from "node:os";
describe("readVersionFromFile", () => {
const testDir = resolve(tmpdir(), "setup-bun-tests");
const originalWorkspace = process.env.GITHUB_WORKSPACE;
beforeEach(() => {
// Set up test directory
if (!existsSync(testDir)) {
mkdirSync(testDir, { recursive: true });
}
process.env.GITHUB_WORKSPACE = testDir;
});
afterEach(() => {
// Clean up test directory
try {
if (existsSync(testDir)) {
rmSync(testDir, { recursive: true, force: true });
}
} catch (error) {
console.error("Error cleaning up test files:", error);
}
process.env.GITHUB_WORKSPACE = originalWorkspace;
});
describe("package.json with packageManager field", () => {
it("should read version from packageManager field", () => {
const packageJson = {
name: "test",
packageManager: "bun@1.0.25",
};
writeFileSync(
resolve(testDir, "package.json"),
JSON.stringify(packageJson, null, 2)
);
const version = readVersionFromFile("package.json");
expect(version).toBe("1.0.25");
});
it("should fallback to engines.bun when packageManager doesn't exist", () => {
const packageJson = {
name: "test",
engines: {
bun: ">=1.0.0",
},
};
writeFileSync(
resolve(testDir, "package.json"),
JSON.stringify(packageJson, null, 2)
);
const version = readVersionFromFile("package.json");
expect(version).toBe(">=1.0.0");
});
it("should return undefined when neither packageManager nor engines.bun exist (with warning)", () => {
const packageJson = {
name: "test",
};
writeFileSync(
resolve(testDir, "package.json"),
JSON.stringify(packageJson, null, 2)
);
const version = readVersionFromFile("package.json");
expect(version).toBeUndefined();
});
});
describe("silent mode", () => {
it("should not warn when file doesn't exist and silent is true", () => {
// This should not produce a warning
const version = readVersionFromFile("package.json", true);
expect(version).toBeUndefined();
});
it("should not warn when version cannot be read and silent is true", () => {
const packageJson = {
name: "test",
};
writeFileSync(
resolve(testDir, "package.json"),
JSON.stringify(packageJson, null, 2)
);
const version = readVersionFromFile("package.json", true);
expect(version).toBeUndefined();
});
});
describe(".bun-version file", () => {
it("should read version from .bun-version file", () => {
writeFileSync(resolve(testDir, ".bun-version"), "1.0.20");
const version = readVersionFromFile(".bun-version");
expect(version).toBe("1.0.20");
});
});
describe(".tool-versions file", () => {
it("should read bun version from .tool-versions file", () => {
writeFileSync(resolve(testDir, ".tool-versions"), "nodejs 18.0.0\nbun 1.0.15\npython 3.9.0");
const version = readVersionFromFile(".tool-versions");
expect(version).toBe("1.0.15");
});
});
});