2025-12-30 15:06:41 +09:00
|
|
|
import { describe, it, expect, spyOn, afterEach } from "bun:test"
|
|
|
|
|
import * as deps from "./dependencies"
|
|
|
|
|
|
|
|
|
|
describe("dependencies check", () => {
|
|
|
|
|
describe("checkAstGrepCli", () => {
|
|
|
|
|
it("returns dependency info", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given
|
|
|
|
|
// when checking ast-grep cli
|
2025-12-30 15:06:41 +09:00
|
|
|
const info = await deps.checkAstGrepCli()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should return valid info
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(info.name).toBe("AST-Grep CLI")
|
|
|
|
|
expect(info.required).toBe(false)
|
|
|
|
|
expect(typeof info.installed).toBe("boolean")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("checkAstGrepNapi", () => {
|
2026-01-21 15:42:21 +09:00
|
|
|
it("returns dependency info", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given
|
|
|
|
|
// when checking ast-grep napi
|
2026-01-21 15:42:21 +09:00
|
|
|
const info = await deps.checkAstGrepNapi()
|
2025-12-30 15:06:41 +09:00
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should return valid info
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(info.name).toBe("AST-Grep NAPI")
|
|
|
|
|
expect(info.required).toBe(false)
|
|
|
|
|
expect(typeof info.installed).toBe("boolean")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("checkCommentChecker", () => {
|
|
|
|
|
it("returns dependency info", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given
|
|
|
|
|
// when checking comment checker
|
2025-12-30 15:06:41 +09:00
|
|
|
const info = await deps.checkCommentChecker()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should return valid info
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(info.name).toBe("Comment Checker")
|
|
|
|
|
expect(info.required).toBe(false)
|
|
|
|
|
expect(typeof info.installed).toBe("boolean")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("checkDependencyAstGrepCli", () => {
|
|
|
|
|
let checkSpy: ReturnType<typeof spyOn>
|
|
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
|
checkSpy?.mockRestore()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it("returns pass when installed", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given ast-grep installed
|
2025-12-30 15:06:41 +09:00
|
|
|
checkSpy = spyOn(deps, "checkAstGrepCli").mockResolvedValue({
|
|
|
|
|
name: "AST-Grep CLI",
|
|
|
|
|
required: false,
|
|
|
|
|
installed: true,
|
|
|
|
|
version: "0.25.0",
|
|
|
|
|
path: "/usr/local/bin/sg",
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// when checking
|
2025-12-30 15:06:41 +09:00
|
|
|
const result = await deps.checkDependencyAstGrepCli()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should pass
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(result.status).toBe("pass")
|
|
|
|
|
expect(result.message).toContain("0.25.0")
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it("returns warn when not installed", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given ast-grep not installed
|
2025-12-30 15:06:41 +09:00
|
|
|
checkSpy = spyOn(deps, "checkAstGrepCli").mockResolvedValue({
|
|
|
|
|
name: "AST-Grep CLI",
|
|
|
|
|
required: false,
|
|
|
|
|
installed: false,
|
|
|
|
|
version: null,
|
|
|
|
|
path: null,
|
|
|
|
|
installHint: "Install: npm install -g @ast-grep/cli",
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// when checking
|
2025-12-30 15:06:41 +09:00
|
|
|
const result = await deps.checkDependencyAstGrepCli()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should warn (optional)
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(result.status).toBe("warn")
|
|
|
|
|
expect(result.message).toContain("optional")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("checkDependencyAstGrepNapi", () => {
|
|
|
|
|
let checkSpy: ReturnType<typeof spyOn>
|
|
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
|
checkSpy?.mockRestore()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it("returns pass when installed", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given napi installed
|
2026-01-21 15:42:21 +09:00
|
|
|
checkSpy = spyOn(deps, "checkAstGrepNapi").mockResolvedValue({
|
2025-12-30 15:06:41 +09:00
|
|
|
name: "AST-Grep NAPI",
|
|
|
|
|
required: false,
|
|
|
|
|
installed: true,
|
|
|
|
|
version: null,
|
|
|
|
|
path: null,
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// when checking
|
2025-12-30 15:06:41 +09:00
|
|
|
const result = await deps.checkDependencyAstGrepNapi()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should pass
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(result.status).toBe("pass")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("checkDependencyCommentChecker", () => {
|
|
|
|
|
let checkSpy: ReturnType<typeof spyOn>
|
|
|
|
|
|
|
|
|
|
afterEach(() => {
|
|
|
|
|
checkSpy?.mockRestore()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
it("returns warn when not installed", async () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given comment checker not installed
|
2025-12-30 15:06:41 +09:00
|
|
|
checkSpy = spyOn(deps, "checkCommentChecker").mockResolvedValue({
|
|
|
|
|
name: "Comment Checker",
|
|
|
|
|
required: false,
|
|
|
|
|
installed: false,
|
|
|
|
|
version: null,
|
|
|
|
|
path: null,
|
|
|
|
|
installHint: "Hook will be disabled if not available",
|
|
|
|
|
})
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// when checking
|
2025-12-30 15:06:41 +09:00
|
|
|
const result = await deps.checkDependencyCommentChecker()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should warn
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(result.status).toBe("warn")
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
describe("getDependencyCheckDefinitions", () => {
|
|
|
|
|
it("returns definitions for all dependencies", () => {
|
2026-02-01 16:47:50 +09:00
|
|
|
// given
|
|
|
|
|
// when getting definitions
|
2025-12-30 15:06:41 +09:00
|
|
|
const defs = deps.getDependencyCheckDefinitions()
|
|
|
|
|
|
2026-02-01 16:47:50 +09:00
|
|
|
// then should have 3 definitions
|
2025-12-30 15:06:41 +09:00
|
|
|
expect(defs.length).toBe(3)
|
|
|
|
|
expect(defs.every((d) => d.category === "dependencies")).toBe(true)
|
|
|
|
|
expect(defs.every((d) => d.critical === false)).toBe(true)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
})
|