diff --git a/packages/effect-lens/src/Lens.test.ts b/packages/effect-lens/src/Lens.test.ts index 8d84d2f..de10c5d 100644 --- a/packages/effect-lens/src/Lens.test.ts +++ b/packages/effect-lens/src/Lens.test.ts @@ -233,6 +233,31 @@ describe("Lens", () => { expect(result.count).toBe(iterations) }) + test("unwrap delegates reads, writes, and locking to the inner lens", async () => { + const iterations = 100 + + const result = await Effect.runPromise(Effect.flatMap( + SubscriptionRef.make(0), + parent => { + const lens = Lens.unwrap(Effect.succeed(Lens.fromSubscriptionRef(parent))) + + return Effect.flatMap( + Effect.forEach( + Array.from({ length: iterations }), + () => Lens.updateEffect( + lens, + count => Effect.as(Effect.yieldNow(), count + 1), + ), + { concurrency: "unbounded", discard: true }, + ), + () => Effect.all([Lens.get(lens), parent.get] as const), + ) + }, + )) + + expect(result).toEqual([iterations, iterations]) + }) + test("focusObjectOn focuses a nested property without touching other fields", async () => { const [initialCount, updatedState] = await Effect.runPromise( Effect.flatMap(