reference-guidance.test.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { describe, expect } from "bun:test"
  2. import { Effect, Layer } from "effect"
  3. import { AbsolutePath } from "@opencode-ai/core/schema"
  4. import { Reference } from "@opencode-ai/core/reference"
  5. import { ReferenceGuidance } from "@opencode-ai/core/reference/guidance"
  6. import { SystemContext } from "@opencode-ai/core/system-context/index"
  7. import { it } from "./lib/effect"
  8. describe("ReferenceGuidance", () => {
  9. it.effect("lists available references in the system context", () =>
  10. Effect.gen(function* () {
  11. const guidance = yield* ReferenceGuidance.Service
  12. const generation = yield* SystemContext.initialize(yield* guidance.load())
  13. expect(generation.baseline).toContain("<available_references>")
  14. expect(generation.baseline).toContain("<name>docs</name>")
  15. expect(generation.baseline).toContain("<path>/docs</path>")
  16. expect(generation.baseline).toContain("<description>Use for product documentation</description>")
  17. }).pipe(
  18. Effect.provide(ReferenceGuidance.layer),
  19. Effect.provide(
  20. Layer.mock(Reference.Service, {
  21. list: () =>
  22. Effect.succeed([
  23. new Reference.Info({
  24. name: "docs",
  25. path: AbsolutePath.make("/docs"),
  26. description: "Use for product documentation",
  27. source: Reference.LocalSource.make({
  28. type: "local",
  29. path: AbsolutePath.make("/docs"),
  30. description: "Use for product documentation",
  31. }),
  32. }),
  33. ]),
  34. }),
  35. ),
  36. ),
  37. )
  38. it.effect("omits guidance when no references are available", () =>
  39. Effect.gen(function* () {
  40. const guidance = yield* ReferenceGuidance.Service
  41. const generation = yield* SystemContext.initialize(yield* guidance.load())
  42. expect(generation.baseline).toBe("")
  43. }).pipe(
  44. Effect.provide(ReferenceGuidance.layer),
  45. Effect.provide(Layer.mock(Reference.Service, { list: () => Effect.succeed([]) })),
  46. ),
  47. )
  48. it.effect("omits references without descriptions", () =>
  49. Effect.gen(function* () {
  50. const guidance = yield* ReferenceGuidance.Service
  51. const generation = yield* SystemContext.initialize(yield* guidance.load())
  52. expect(generation.baseline).toBe("")
  53. }).pipe(
  54. Effect.provide(ReferenceGuidance.layer),
  55. Effect.provide(
  56. Layer.mock(Reference.Service, {
  57. list: () =>
  58. Effect.succeed([
  59. new Reference.Info({
  60. name: "docs",
  61. path: AbsolutePath.make("/docs"),
  62. source: Reference.LocalSource.make({ type: "local", path: AbsolutePath.make("/docs") }),
  63. }),
  64. ]),
  65. }),
  66. ),
  67. ),
  68. )
  69. })