fix(worktree): type expected errors (#27296)

This commit is contained in:
Shoubhit Dash
2026-05-13 15:05:30 +05:30
committed by GitHub
parent ccf93f3523
commit 2e7cf92c8b
7 changed files with 125 additions and 62 deletions
@@ -135,13 +135,17 @@ describe("Worktree", () => {
{ git: true },
)
it.instance("throws NotGitError for non-git directories", () =>
it.instance("fails with NotGitError for non-git directories", () =>
Effect.gen(function* () {
const svc = yield* Worktree.Service
const exit = yield* Effect.exit(svc.makeWorktreeInfo())
expect(Exit.isFailure(exit)).toBe(true)
if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Worktree.NotGitError)
if (Exit.isFailure(exit)) {
const error = Cause.squash(exit.cause)
expect(error).toBeInstanceOf(Worktree.NotGitError)
if (error instanceof Worktree.NotGitError) expect(error._tag).toBe("WorktreeNotGitError")
}
}),
)
@@ -286,14 +290,18 @@ describe("Worktree", () => {
{ git: true },
)
it.instance("throws NotGitError for non-git directories", () =>
it.instance("fails with NotGitError for non-git directories", () =>
Effect.gen(function* () {
const test = yield* TestInstance
const svc = yield* Worktree.Service
const exit = yield* Effect.exit(svc.remove({ directory: path.join(test.directory, "fake") }))
expect(Exit.isFailure(exit)).toBe(true)
if (Exit.isFailure(exit)) expect(Cause.squash(exit.cause)).toBeInstanceOf(Worktree.NotGitError)
if (Exit.isFailure(exit)) {
const error = Cause.squash(exit.cause)
expect(error).toBeInstanceOf(Worktree.NotGitError)
if (error instanceof Worktree.NotGitError) expect(error._tag).toBe("WorktreeNotGitError")
}
}),
)
})
@@ -171,7 +171,7 @@ function withContext<A, E>(
messages: (sessionID) =>
run(modules.Session.Service.use((svc) => svc.messages({ sessionID }).pipe(Effect.orDie))),
todos: (sessionID, todos) => run(modules.Todo.Service.use((svc) => svc.update({ sessionID, todos }))),
worktree: (input) => run(modules.Worktree.Service.use((svc) => svc.create(input))),
worktree: (input) => run(modules.Worktree.Service.use((svc) => svc.create(input).pipe(Effect.orDie))),
worktreeRemove: (directory) =>
run(modules.Worktree.Service.use((svc) => svc.remove({ directory })).pipe(Effect.ignore)),
llmText: (value) => Effect.suspend(() => llm().text(value)),
@@ -192,6 +192,23 @@ describe("experimental HttpApi", () => {
},
)
it.instance("returns declared worktree errors", () =>
Effect.gen(function* () {
const tmp = yield* TestInstance
const response = yield* request(ExperimentalPaths.worktree, tmp.directory, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({}),
})
expect(response.status).toBe(400)
expect(yield* json(response)).toEqual({
name: "WorktreeNotGitError",
data: { message: "Worktrees are only supported for git projects" },
})
}),
)
it.instance(
"serves Console org switch through the default server app",
() =>