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 })