From 0d6232ffef860a5144151a28758a1af2fd1bdb2c Mon Sep 17 00:00:00 2001 From: Kit Langton Date: Fri, 28 Aug 2026 13:37:42 -0400 Subject: [PATCH] test(core): share git test fixtures (#45640) --- packages/core/test/fixture/git.ts | 27 +++++++++++++++++++++ packages/core/test/git.test.ts | 26 +------------------- packages/core/test/repository-cache.test.ts | 18 +------------- packages/core/test/worktree.test.ts | 10 +------- 4 files changed, 30 insertions(+), 51 deletions(-) diff --git a/packages/core/test/fixture/git.ts b/packages/core/test/fixture/git.ts index f02da400af6..94610e90a51 100644 --- a/packages/core/test/fixture/git.ts +++ b/packages/core/test/fixture/git.ts @@ -1,9 +1,12 @@ +import { $ } from "bun" import { execFile } from "child_process" import fs from "fs/promises" import path from "path" import { promisify } from "util" import { pathToFileURL } from "url" import { Repository } from "@opencode-ai/core/repository" +import { Effect } from "effect" +import { tmpdir } from "./tmpdir" const exec = promisify(execFile) @@ -29,6 +32,30 @@ export async function gitRemote(root: string) { } } +export function withRemote(body: (fixture: Awaited>) => Effect.Effect) { + return Effect.acquireUseRelease( + Effect.promise(async () => { + const root = await tmpdir() + return { root, fixture: await gitRemote(root.path) } + }), + (input) => body(input.fixture), + (input) => Effect.promise(() => input.root[Symbol.asyncDispose]()), + ) +} + +export function read(file: string) { + return Effect.promise(() => fs.readFile(file, "utf8")).pipe(Effect.map((content) => content.replace(/\r\n/g, "\n"))) +} + +export async function initRepo(directory: string) { + await $`git init`.cwd(directory).quiet() + await $`git config core.fsmonitor false`.cwd(directory).quiet() + await $`git config commit.gpgsign false`.cwd(directory).quiet() + await $`git config user.email test@opencode.test`.cwd(directory).quiet() + await $`git config user.name Test`.cwd(directory).quiet() + await $`git commit --allow-empty -m root`.cwd(directory).quiet() +} + export async function commit(source: string, content: string, message: string) { await fs.writeFile(path.join(source, "README.md"), content) await git(source, "add", "README.md") diff --git a/packages/core/test/git.test.ts b/packages/core/test/git.test.ts index af54e444a11..49b3e59db29 100644 --- a/packages/core/test/git.test.ts +++ b/packages/core/test/git.test.ts @@ -6,7 +6,7 @@ import { Effect } from "effect" import { LayerNode } from "@opencode-ai/util/effect/layer-node" import { Git } from "@opencode-ai/core/git" import { AbsolutePath, RelativePath } from "@opencode-ai/core/schema" -import { branch, commit, gitRemote } from "./fixture/git" +import { branch, commit, initRepo, read, withRemote } from "./fixture/git" import { tmpdir } from "./fixture/tmpdir" import { testEffect } from "./lib/effect" @@ -75,30 +75,6 @@ describe("Git", () => { ) }) -function withRemote(body: (fixture: Awaited>) => Effect.Effect) { - return Effect.acquireUseRelease( - Effect.promise(async () => { - const root = await tmpdir() - return { root, fixture: await gitRemote(root.path) } - }), - (input) => body(input.fixture), - (input) => Effect.promise(() => input.root[Symbol.asyncDispose]()), - ) -} - -function read(file: string) { - return Effect.promise(() => fs.readFile(file, "utf8")).pipe(Effect.map((content) => content.replace(/\r\n/g, "\n"))) -} - -async function initRepo(directory: string) { - await $`git init`.cwd(directory).quiet() - await $`git config core.fsmonitor false`.cwd(directory).quiet() - await $`git config commit.gpgsign false`.cwd(directory).quiet() - await $`git config user.email test@opencode.test`.cwd(directory).quiet() - await $`git config user.name Test`.cwd(directory).quiet() - await $`git commit --allow-empty -m root`.cwd(directory).quiet() -} - describe("Git worktrees", () => { it.live("creates, lists, and removes linked worktrees", () => Effect.gen(function* () { diff --git a/packages/core/test/repository-cache.test.ts b/packages/core/test/repository-cache.test.ts index 6126f674a21..435584a719d 100644 --- a/packages/core/test/repository-cache.test.ts +++ b/packages/core/test/repository-cache.test.ts @@ -7,8 +7,7 @@ import { AppNodeBuilder } from "@opencode-ai/core/effect/app-node-builder" import { Global } from "@opencode-ai/util/global" import { Repository } from "@opencode-ai/core/repository" import { RepositoryCache } from "@opencode-ai/core/repository-cache" -import { branch, git, gitRemote } from "./fixture/git" -import { tmpdir } from "./fixture/tmpdir" +import { branch, git, read, withRemote } from "./fixture/git" import { testEffect } from "./lib/effect" const it = testEffect(Layer.empty) @@ -127,21 +126,6 @@ function cacheLayer(root: string) { ]) } -function withRemote(body: (fixture: Awaited>) => Effect.Effect) { - return Effect.acquireUseRelease( - Effect.promise(async () => { - const root = await tmpdir() - return { root, fixture: await gitRemote(root.path) } - }), - (input) => body(input.fixture), - (input) => Effect.promise(() => input.root[Symbol.asyncDispose]()), - ) -} - -function read(file: string) { - return Effect.promise(() => fs.readFile(file, "utf8")).pipe(Effect.map((content) => content.replace(/\r\n/g, "\n"))) -} - function exists(file: string) { return Effect.promise(() => fs.stat(file).then( diff --git a/packages/core/test/worktree.test.ts b/packages/core/test/worktree.test.ts index 1a7d956b572..60330708ae1 100644 --- a/packages/core/test/worktree.test.ts +++ b/packages/core/test/worktree.test.ts @@ -15,6 +15,7 @@ import { ProjectTable } from "@opencode-ai/core/project/sql" import { Worktree } from "@opencode-ai/core/worktree" import { WorktreeDirectory } from "@opencode-ai/core/worktree/directory" import { WorktreeTable } from "@opencode-ai/core/worktree/sql" +import { initRepo } from "./fixture/git" import { tmpdir } from "./fixture/tmpdir" import { testEffect } from "./lib/effect" @@ -29,15 +30,6 @@ function abs(input: string) { const gitWorktree = Worktree.StrategyID.make("git") -async function initRepo(directory: string) { - await $`git init`.cwd(directory).quiet() - await $`git config core.fsmonitor false`.cwd(directory).quiet() - await $`git config commit.gpgsign false`.cwd(directory).quiet() - await $`git config user.email test@opencode.test`.cwd(directory).quiet() - await $`git config user.name Test`.cwd(directory).quiet() - await $`git commit --allow-empty -m root`.cwd(directory).quiet() -} - function setup() { return Effect.gen(function* () { const root = yield* Effect.acquireRelease(