Co-authored-by: Isaac Sanchez <isanchez-hawkins@arize.com>
51 lines
1.4 KiB
TypeScript
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" } })
|
|
})
|
|
})
|