From 253d19be3a173d2542cd6ef13a124cf370b71caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Valverd=C3=A9?= Date: Mon, 25 May 2026 17:38:59 +0200 Subject: [PATCH] Add tests --- packages/effect-lens/src/tests.ts | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 packages/effect-lens/src/tests.ts diff --git a/packages/effect-lens/src/tests.ts b/packages/effect-lens/src/tests.ts new file mode 100644 index 0000000..d1d4138 --- /dev/null +++ b/packages/effect-lens/src/tests.ts @@ -0,0 +1,46 @@ +import { Console, Effect, Stream, SubscriptionRef } from "effect" +import { Lens } from "./index.js" + + +class State extends Effect.Service()("State", { + effect: Effect.gen(function*() { + const ref = yield* SubscriptionRef.make({ + users: [ + { name: "Adolf" } + ] + }) + + return { + lens: Lens.fromSubscriptionRef(ref) + } as const + }) +}) {} + + +Effect.gen(function*() { + const lens = Lens.unwrap(Effect.andThen( + State, + state => state.lens, + )).pipe( + Lens.provideContext(yield* Effect.provide(Effect.context(), State.Default)) + ) + + const adolfNameLens = lens.pipe( + Lens.focusObjectOn("users"), + Lens.focusArrayAt(0), + Lens.focusObjectOn("name"), + Lens.catchAllRead(() => Lens.makeLazy({ + sourceGet: Effect.succeed("User not found"), + sourceChanges: Stream.make("User not found"), + sourceCommit: () => Console.log("Test"), + withLock: Effect.unsafeMakeSemaphore(1).withPermits(1), + })), + ) + + console.log(yield* Lens.get(adolfNameLens)) + yield* Lens.set(lens, { users: [] }) + yield* Lens.set(adolfNameLens, "Himmler") + console.log(yield* Lens.get(adolfNameLens)) +}).pipe( + Effect.runSync, +)