this repo has no description
1import { render, type RenderResult } from '@testing-library/svelte'
2import { tick } from 'svelte'
3import type { ComponentType } from 'svelte'
4export async function renderAndWait<T extends ComponentType>(
5 component: T,
6 options?: Parameters<typeof render>[1]
7): Promise<RenderResult<T>> {
8 const result = render(component, options)
9 await tick()
10 await new Promise(resolve => setTimeout(resolve, 0))
11 return result
12}
13export async function waitForElement(
14 queryFn: () => HTMLElement | null,
15 timeout = 1000
16): Promise<HTMLElement> {
17 const start = Date.now()
18 while (Date.now() - start < timeout) {
19 const element = queryFn()
20 if (element) return element
21 await new Promise(resolve => setTimeout(resolve, 10))
22 }
23 throw new Error('Element not found within timeout')
24}
25export async function waitForElementToDisappear(
26 queryFn: () => HTMLElement | null,
27 timeout = 1000
28): Promise<void> {
29 const start = Date.now()
30 while (Date.now() - start < timeout) {
31 const element = queryFn()
32 if (!element) return
33 await new Promise(resolve => setTimeout(resolve, 10))
34 }
35 throw new Error('Element still present after timeout')
36}
37export async function waitForText(
38 container: HTMLElement,
39 text: string | RegExp,
40 timeout = 1000
41): Promise<void> {
42 const start = Date.now()
43 while (Date.now() - start < timeout) {
44 const content = container.textContent || ''
45 if (typeof text === 'string' ? content.includes(text) : text.test(content)) {
46 return
47 }
48 await new Promise(resolve => setTimeout(resolve, 10))
49 }
50 throw new Error(`Text "${text}" not found within timeout`)
51}
52export function mockLocalStorage(initialData: Record<string, string> = {}): void {
53 const store: Record<string, string> = { ...initialData }
54 Object.defineProperty(window, 'localStorage', {
55 value: {
56 getItem: (key: string) => store[key] || null,
57 setItem: (key: string, value: string) => { store[key] = value },
58 removeItem: (key: string) => { delete store[key] },
59 clear: () => { Object.keys(store).forEach(key => delete store[key]) },
60 key: (index: number) => Object.keys(store)[index] || null,
61 get length() { return Object.keys(store).length },
62 },
63 writable: true,
64 })
65}
66export function setAuthState(session: {
67 did: string
68 handle: string
69 email?: string
70 emailConfirmed?: boolean
71 accessJwt: string
72 refreshJwt: string
73}): void {
74 localStorage.setItem('session', JSON.stringify(session))
75}
76export function clearAuthState(): void {
77 localStorage.removeItem('session')
78}