Skip to content

Commit 2fe58d7

Browse files
committed
add layer override test
1 parent bd9c214 commit 2fe58d7

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

packages/atom-react/test/index.test.tsx

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as Atom from "@effect-atom/atom/Atom"
22
import * as Registry from "@effect-atom/atom/Registry"
33
import { act, render, screen, waitFor } from "@testing-library/react"
4-
import { Effect, Schema } from "effect"
4+
import { Effect, Layer, Schema } from "effect"
55
import { Suspense } from "react"
66
import { renderToString } from "react-dom/server"
77
import { ErrorBoundary } from "react-error-boundary"
88
import { beforeEach, describe, expect, it, test, vi } from "vitest"
9-
import { Hydration, RegistryContext, Result, useAtomSuspense, useAtomValue } from "../src/index.js"
9+
import { Hydration, RegistryContext, RegistryProvider, Result, useAtomSuspense, useAtomValue } from "../src/index.js"
1010
import { HydrationBoundary } from "../src/ReactHydration.js"
1111

1212
describe("atom-react", () => {
@@ -16,6 +16,36 @@ describe("atom-react", () => {
1616
registry = Registry.make()
1717
})
1818

19+
describe("runtime", () => {
20+
test("can inject test layers", () => {
21+
class TheNumber extends Effect.Service<TheNumber>()("TheNumber", {
22+
succeed: { n: 42 as number }
23+
}) {}
24+
const runtime = Atom.runtime(TheNumber.Default)
25+
const numberAtom = runtime.atom(TheNumber.use((_) => Effect.succeed(_.n)))
26+
27+
function TestComponent() {
28+
const value = useAtomValue(numberAtom, Result.getOrThrow)
29+
return <div data-testid="value">{value}</div>
30+
}
31+
32+
render(
33+
<RegistryProvider
34+
initialValues={[
35+
Atom.initialValue(
36+
runtime.layer,
37+
Layer.succeed(TheNumber, new TheNumber({ n: 69 }))
38+
)
39+
]}
40+
>
41+
<TestComponent />
42+
</RegistryProvider>
43+
)
44+
45+
expect(screen.getByTestId("value")).toHaveTextContent("69")
46+
})
47+
})
48+
1949
describe("useAtomValue", () => {
2050
test("should read value from simple Atom", () => {
2151
const atom = Atom.make(42)

0 commit comments

Comments
 (0)