Files
openchamber/packages/ui/src/lib/gitApi.test.ts
T

51 lines
1.4 KiB
TypeScript

import { describe, expect, test } from "bun:test"
import type { GitAPI, GitStatus } from "./api/types"
import { getGitStatus } from "./gitApi"
const status: GitStatus = {
current: "main",
tracking: null,
ahead: 0,
behind: 0,
files: [],
isClean: true,
}
const withRuntimeGit = async (git: GitAPI, callback: () => Promise<void>) => {
const previousWindowDescriptor = Object.getOwnPropertyDescriptor(globalThis, "window")
Object.defineProperty(globalThis, "window", {
configurable: true,
value: {
__OPENCHAMBER_RUNTIME_APIS__: { git },
},
})
try {
await callback()
} finally {
if (previousWindowDescriptor) {
Object.defineProperty(globalThis, "window", previousWindowDescriptor)
} else {
delete (globalThis as { window?: Window }).window
}
}
}
describe("getGitStatus", () => {
test("forwards light-mode options to runtime git APIs", async () => {
let received: { directory: string; options?: { mode?: "light" } } | null = null
const runtimeGit = {
getGitStatus: async (directory: string, options?: { mode?: "light" }) => {
received = { directory, options }
return status
},
} as Partial<GitAPI> as GitAPI
await withRuntimeGit(runtimeGit, async () => {
await getGitStatus("/repo", { mode: "light" })
})
expect(received).toEqual({ directory: "/repo", options: { mode: "light" } })
})
})