Просмотр исходного кода

test: lock in process, ripgrep, and installation helpers

Dax Raad 1 месяц назад
Родитель
Сommit
e6d1aae33a

+ 34 - 0
packages/opencode/test/file/ripgrep.test.ts

@@ -36,4 +36,38 @@ describe("file.ripgrep", () => {
     expect(hasVisible).toBe(true)
     expect(hasVisible).toBe(true)
     expect(hasHidden).toBe(false)
     expect(hasHidden).toBe(false)
   })
   })
+
+  test("search returns match metadata", async () => {
+    await using tmp = await tmpdir({
+      init: async (dir) => {
+        await Bun.write(path.join(dir, "match.ts"), "const value = 'needle'\n")
+        await Bun.write(path.join(dir, "other.ts"), "const value = 'other'\n")
+      },
+    })
+
+    const hits = await Ripgrep.search({
+      cwd: tmp.path,
+      pattern: "needle",
+    })
+
+    expect(hits.length).toBe(1)
+    expect(hits[0]?.path.text).toBe("match.ts")
+    expect(hits[0]?.line_number).toBe(1)
+    expect(hits[0]?.lines.text).toContain("needle")
+  })
+
+  test("search returns empty when nothing matches", async () => {
+    await using tmp = await tmpdir({
+      init: async (dir) => {
+        await Bun.write(path.join(dir, "match.ts"), "const value = 'other'\n")
+      },
+    })
+
+    const hits = await Ripgrep.search({
+      cwd: tmp.path,
+      pattern: "needle",
+    })
+
+    expect(hits).toEqual([])
+  })
 })
 })

+ 47 - 0
packages/opencode/test/installation/installation.test.ts

@@ -0,0 +1,47 @@
+import { afterEach, describe, expect, test } from "bun:test"
+import { Installation } from "../../src/installation"
+
+const fetch0 = globalThis.fetch
+
+afterEach(() => {
+  globalThis.fetch = fetch0
+})
+
+describe("installation", () => {
+  test("reads release version from GitHub releases", async () => {
+    globalThis.fetch = (async () =>
+      new Response(JSON.stringify({ tag_name: "v1.2.3" }), {
+        status: 200,
+        headers: { "content-type": "application/json" },
+      })) as unknown as typeof fetch
+
+    expect(await Installation.latest("unknown")).toBe("1.2.3")
+  })
+
+  test("reads scoop manifest versions", async () => {
+    globalThis.fetch = (async () =>
+      new Response(JSON.stringify({ version: "2.3.4" }), {
+        status: 200,
+        headers: { "content-type": "application/json" },
+      })) as unknown as typeof fetch
+
+    expect(await Installation.latest("scoop")).toBe("2.3.4")
+  })
+
+  test("reads chocolatey feed versions", async () => {
+    globalThis.fetch = (async () =>
+      new Response(
+        JSON.stringify({
+          d: {
+            results: [{ Version: "3.4.5" }],
+          },
+        }),
+        {
+          status: 200,
+          headers: { "content-type": "application/json" },
+        },
+      )) as unknown as typeof fetch
+
+    expect(await Installation.latest("choco")).toBe("3.4.5")
+  })
+})

+ 16 - 0
packages/opencode/test/util/process.test.ts

@@ -56,4 +56,20 @@ describe("util.process", () => {
     expect(out.code).not.toBe(0)
     expect(out.code).not.toBe(0)
     expect(Date.now() - started).toBeLessThan(1000)
     expect(Date.now() - started).toBeLessThan(1000)
   }, 3000)
   }, 3000)
+
+  test("uses cwd when spawning commands", async () => {
+    const out = await Process.run(node('process.stdout.write(process.cwd())'), {
+      cwd: "/tmp",
+    })
+    expect(out.stdout.toString()).toBe("/tmp")
+  })
+
+  test("merges environment overrides", async () => {
+    const out = await Process.run(node('process.stdout.write(process.env.OPENCODE_TEST ?? "")'), {
+      env: {
+        OPENCODE_TEST: "set",
+      },
+    })
+    expect(out.stdout.toString()).toBe("set")
+  })
 })
 })