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 ( 50 typeof text === "string" ? content.includes(text) : text.test(content) 51 ) { 52 return; 53 } 54 await new Promise((resolve) => setTimeout(resolve, 10)); 55 } 56 throw new Error(`Text "${text}" not found within timeout`); 57} 58 59export function mockLocalStorage( 60 initialData: Record<string, string> = {}, 61): void { 62 const store: Record<string, string> = { ...initialData }; 63 Object.defineProperty(window, "localStorage", { 64 value: { 65 getItem: (key: string) => store[key] || null, 66 setItem: (key: string, value: string) => { 67 store[key] = value; 68 }, 69 removeItem: (key: string) => { 70 delete store[key]; 71 }, 72 clear: () => { 73 Object.keys(store).forEach((key) => delete store[key]); 74 }, 75 key: (index: number) => Object.keys(store)[index] || null, 76 get length() { 77 return Object.keys(store).length; 78 }, 79 }, 80 writable: true, 81 }); 82} 83 84export function setAuthState(session: { 85 did: string; 86 handle: string; 87 email?: string; 88 emailConfirmed?: boolean; 89 accessJwt: string; 90 refreshJwt: string; 91}): void { 92 localStorage.setItem("session", JSON.stringify(session)); 93} 94 95export function clearAuthState(): void { 96 localStorage.removeItem("session"); 97}