import { describe, expect } from "bun:test" import { Effect, Layer } from "effect" import { Location } from "@opencode-ai/core/location" import { Project } from "@opencode-ai/core/project" import { AbsolutePath } from "@opencode-ai/core/schema" import { testEffect } from "./lib/effect" const ref = { directory: AbsolutePath.make("/repo/packages/app"), workspaceID: "workspace" } const projectLayer = Layer.succeed( Project.Service, Project.Service.of({ resolve: () => Effect.succeed({ id: Project.ID.make("project"), directory: AbsolutePath.make("/repo"), vcs: { type: "git", store: AbsolutePath.make("/repo/.git") }, }), commit: () => Effect.void, }), ) const it = testEffect(Location.layer(ref).pipe(Layer.provide(projectLayer))) describe("Location", () => { it.effect("resolves the current project and vcs information", () => Effect.gen(function* () { const location = yield* Location.Service expect(location.directory).toBe(AbsolutePath.make("/repo/packages/app")) expect(location.workspaceID).toBe("workspace") expect(location.project.id).toBe(Project.ID.make("project")) expect(location.project.directory).toBe(AbsolutePath.make("/repo")) expect(location.vcs).toEqual({ type: "git", store: AbsolutePath.make("/repo/.git"), }) }), ) })