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