app-runtime-logger.test.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { expect, test } from "bun:test"
  2. import { Context, Effect, Layer, Logger } from "effect"
  3. import { AppRuntime } from "../../src/effect/app-runtime"
  4. import { InstanceRef } from "../../src/effect/instance-ref"
  5. import { EffectLogger } from "../../src/effect/logger"
  6. import { makeRuntime } from "../../src/effect/run-service"
  7. import { Instance } from "../../src/project/instance"
  8. import { tmpdir } from "../fixture/fixture"
  9. function check(loggers: ReadonlySet<Logger.Logger<unknown, any>>) {
  10. return {
  11. defaultLogger: loggers.has(Logger.defaultLogger),
  12. tracerLogger: loggers.has(Logger.tracerLogger),
  13. effectLogger: loggers.has(EffectLogger.logger),
  14. size: loggers.size,
  15. }
  16. }
  17. test("makeRuntime installs EffectLogger through Observability.layer", async () => {
  18. class Dummy extends Context.Service<Dummy, { readonly current: () => Effect.Effect<ReturnType<typeof check>> }>()(
  19. "@test/Dummy",
  20. ) {}
  21. const layer = Layer.effect(
  22. Dummy,
  23. Effect.gen(function* () {
  24. return Dummy.of({
  25. current: () => Effect.map(Effect.service(Logger.CurrentLoggers), check),
  26. })
  27. }),
  28. )
  29. const rt = makeRuntime(Dummy, layer)
  30. const current = await rt.runPromise((svc) => svc.current())
  31. expect(current.effectLogger).toBe(true)
  32. expect(current.defaultLogger).toBe(false)
  33. })
  34. test("AppRuntime also installs EffectLogger through Observability.layer", async () => {
  35. const current = await AppRuntime.runPromise(Effect.map(Effect.service(Logger.CurrentLoggers), check))
  36. expect(current.effectLogger).toBe(true)
  37. expect(current.defaultLogger).toBe(false)
  38. })
  39. test("AppRuntime attaches InstanceRef from ALS", async () => {
  40. await using tmp = await tmpdir({ git: true })
  41. const dir = await Instance.provide({
  42. directory: tmp.path,
  43. fn: () =>
  44. AppRuntime.runPromise(
  45. Effect.gen(function* () {
  46. return (yield* InstanceRef)?.directory
  47. }),
  48. ),
  49. })
  50. expect(dir).toBe(tmp.path)
  51. })