import { afterEach, describe, expect, it, vi } from 'vitest'; import { insideTelegram, telegramLaunch } from './telegram'; function stubWebApp(initData: string, startParam?: string) { vi.stubGlobal('window', { Telegram: { WebApp: { initData, initDataUnsafe: startParam ? { start_param: startParam } : {}, themeParams: { bg_color: '#101418' }, ready: () => {}, expand: () => {}, }, }, }); } describe('telegram launch detection', () => { afterEach(() => vi.unstubAllGlobals()); it('is not inside Telegram without a window', () => { expect(insideTelegram()).toBe(false); }); it('is inside Telegram only with non-empty initData', () => { stubWebApp(''); expect(insideTelegram()).toBe(false); stubWebApp('query_id=abc'); expect(insideTelegram()).toBe(true); }); it('telegramLaunch returns initData, start param and theme', () => { stubWebApp('query_id=abc', 'g123'); const launch = telegramLaunch(); expect(launch.initData).toBe('query_id=abc'); expect(launch.startParam).toBe('g123'); expect(launch.theme?.bg_color).toBe('#101418'); }); });