import { afterEach, describe, expect, it, vi } from 'vitest'; import { insideVK, onVKPath, vkAppId, vkLaunchParams, vkStartParam } from './vk'; describe('vk launch detection', () => { afterEach(() => vi.unstubAllGlobals()); it('is not inside VK and not on the VK path without a location (node / SSR)', () => { expect(onVKPath()).toBe(false); expect(insideVK()).toBe(false); expect(vkLaunchParams()).toBe(''); }); it('detects the dedicated /vk/ entry path', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '' }); expect(onVKPath()).toBe(true); vi.stubGlobal('location', { pathname: '/app/', search: '' }); expect(onVKPath()).toBe(false); }); it('returns the signed launch query only when a sign is present', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&vk_ts=2&sign=abc' }); expect(vkLaunchParams()).toBe('vk_user_id=1&vk_ts=2&sign=abc'); expect(insideVK()).toBe(true); }); it('treats a URL carrying no sign as not a VK launch', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '?utm_source=catalog' }); expect(vkLaunchParams()).toBe(''); expect(insideVK()).toBe(false); }); }); describe('vk launch params', () => { afterEach(() => vi.unstubAllGlobals()); it('reads the VK app id from the launch query', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_app_id=6736218&sign=x' }); expect(vkAppId()).toBe('6736218'); }); it('reads the direct-link deep-link payload from the hash query param', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&sign=x&hash=f123456' }); expect(vkStartParam()).toBe('f123456'); }); it('returns empty app id / start param when absent', () => { vi.stubGlobal('location', { pathname: '/vk/', search: '?vk_user_id=1&sign=x' }); expect(vkAppId()).toBe(''); expect(vkStartParam()).toBe(''); }); });