/ test / useRepo.test.tsx
useRepo.test.tsx
 1  import {Repo} from "@automerge/automerge-repo"
 2  import {render} from "@solidjs/testing-library"
 3  import {describe, expect, test, vi} from "vitest"
 4  import type {ParentComponent} from "solid-js"
 5  import useRepo from "../src/useRepo.js"
 6  import {RepoContext} from "../src/context.js"
 7  
 8  describe("useRepo", () => {
 9  	const Component = ({onRepo}: {onRepo: (repo: Repo) => void}) => {
10  		const repo = useRepo()
11  		onRepo(repo)
12  		return null
13  	}
14  
15  	test("should error when context unavailable", () => {
16  		// Prevent console spam by swallowing console.error "uncaught error" message
17  		const spy = vi.spyOn(console, "error")
18  		spy.mockImplementation(() => {})
19  		expect(() => render(() => <Component onRepo={() => {}} />)).toThrow(
20  			/RepoContext/
21  		)
22  		spy.mockRestore()
23  	})
24  
25  	test("should return repo from context", () => {
26  		const repo = new Repo()
27  		const wrapper: ParentComponent = props => (
28  			<RepoContext.Provider value={repo}>{props.children}</RepoContext.Provider>
29  		)
30  		const onRepo = vi.fn()
31  		render(() => <Component onRepo={onRepo} />, {wrapper})
32  		expect(onRepo).toHaveBeenLastCalledWith(repo)
33  	})
34  })