runtime-flags.test.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { describe, expect } from "bun:test"
  2. import { ConfigProvider, Effect, Layer } from "effect"
  3. import { RuntimeFlags } from "../../src/effect/runtime-flags"
  4. import { it } from "../lib/effect"
  5. const fromConfig = (input: Record<string, unknown>) =>
  6. RuntimeFlags.defaultLayer.pipe(Layer.provide(ConfigProvider.layer(ConfigProvider.fromUnknown(input))))
  7. const readFlags = RuntimeFlags.Service.useSync((flags) => flags)
  8. describe("RuntimeFlags", () => {
  9. it.effect("defaultLayer parses plugin flags from the active ConfigProvider", () =>
  10. Effect.gen(function* () {
  11. const flags = yield* readFlags.pipe(
  12. Effect.provide(
  13. fromConfig({
  14. OPENCODE_PURE: "true",
  15. OPENCODE_DISABLE_DEFAULT_PLUGINS: "true",
  16. }),
  17. ),
  18. )
  19. expect(flags.pure).toBe(true)
  20. expect(flags.disableDefaultPlugins).toBe(true)
  21. }),
  22. )
  23. it.effect("layer accepts partial test overrides and fills defaults from Config definitions", () =>
  24. Effect.gen(function* () {
  25. const flags = yield* readFlags.pipe(Effect.provide(RuntimeFlags.layer({ disableDefaultPlugins: true })))
  26. expect(flags.pure).toBe(false)
  27. expect(flags.disableDefaultPlugins).toBe(true)
  28. }),
  29. )
  30. it.effect("layer ignores the active ConfigProvider for omitted test overrides", () =>
  31. Effect.gen(function* () {
  32. const flags = yield* readFlags.pipe(
  33. Effect.provide(RuntimeFlags.layer()),
  34. Effect.provide(
  35. ConfigProvider.layer(
  36. ConfigProvider.fromUnknown({
  37. OPENCODE_PURE: "true",
  38. OPENCODE_DISABLE_DEFAULT_PLUGINS: "true",
  39. }),
  40. ),
  41. ),
  42. )
  43. expect(flags.pure).toBe(false)
  44. expect(flags.disableDefaultPlugins).toBe(false)
  45. }),
  46. )
  47. })