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}