| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { describe, expect } from "bun:test"
- import { Effect, Exit, Layer, Scope } from "effect"
- import { AbsolutePath } from "@opencode-ai/core/schema"
- import { Global } from "@opencode-ai/core/global"
- import { Reference } from "@opencode-ai/core/reference"
- import { Repository } from "@opencode-ai/core/repository"
- import { RepositoryCache } from "@opencode-ai/core/repository-cache"
- import { EventV2 } from "@opencode-ai/core/event"
- import { it } from "./lib/effect"
- const cache = Layer.mock(RepositoryCache.Service, {
- ensure: () => Effect.die("unexpected Git materialization"),
- })
- describe("Reference", () => {
- it.effect("registers normalized sources for the owning scope", () =>
- Effect.gen(function* () {
- const references = yield* Reference.Service
- const scope = yield* Scope.make()
- const path = AbsolutePath.make("/docs")
- const source = new Reference.LocalSource({
- type: "local",
- path,
- description: "Use for API documentation",
- hidden: true,
- })
- yield* references.transform((editor) => editor.add("docs", source)).pipe(Scope.provide(scope))
- expect(yield* references.list()).toEqual([
- new Reference.Info({ name: "docs", path, description: "Use for API documentation", hidden: true, source }),
- ])
- yield* Scope.close(scope, Exit.void)
- expect(yield* references.list()).toEqual([])
- }).pipe(
- Effect.provide(Reference.layer),
- Effect.provide(cache),
- Effect.provide(EventV2.defaultLayer),
- Effect.provide(Global.defaultLayer),
- ),
- )
- it.effect("derives Git paths without exposing cache operations", () =>
- Effect.gen(function* () {
- const references = yield* Reference.Service
- const repository = Repository.parseRemote("owner/repo")
- const source = new Reference.GitSource({ type: "git", repository: "owner/repo", branch: "main" })
- yield* references.transform((editor) => editor.add("sdk", source))
- expect(yield* references.list()).toEqual([
- new Reference.Info({
- name: "sdk",
- path: AbsolutePath.make(Repository.cachePath(Global.Path.repos, repository)),
- source,
- }),
- ])
- }).pipe(
- Effect.scoped,
- Effect.provide(Reference.layer),
- Effect.provide(cache),
- Effect.provide(EventV2.defaultLayer),
- Effect.provide(Global.defaultLayer),
- ),
- )
- it.effect("preserves configured Git descriptions", () =>
- Effect.gen(function* () {
- const references = yield* Reference.Service
- const repository = Repository.parseRemote("owner/repo")
- const source = new Reference.GitSource({
- type: "git",
- repository: "owner/repo",
- description: "Use for SDK implementation details",
- })
- yield* references.transform((editor) => editor.add("sdk", source))
- expect(yield* references.list()).toEqual([
- new Reference.Info({
- name: "sdk",
- path: AbsolutePath.make(Repository.cachePath(Global.Path.repos, repository)),
- description: "Use for SDK implementation details",
- source,
- }),
- ])
- }).pipe(
- Effect.scoped,
- Effect.provide(Reference.layer),
- Effect.provide(cache),
- Effect.provide(EventV2.defaultLayer),
- Effect.provide(Global.defaultLayer),
- ),
- )
- })
|