import { afterEach, beforeEach, describe, expect, it } from 'vitest' import { applyMpEmbedDom, initMpEmbed, isMpEmbed, isMpNativeHeader } from './mpEmbed' describe('mpEmbed', () => { beforeEach(() => { sessionStorage.clear() document.documentElement.className = '' document.documentElement.style.removeProperty('--yxg-safe-top') document.documentElement.style.removeProperty('--yxg-page-top') window.history.replaceState({}, '', '/psy/') }) afterEach(() => { sessionStorage.clear() }) it('persists embed flag from ?mp=1', () => { window.history.replaceState({}, '', '/psy/?mp=1') initMpEmbed() expect(isMpEmbed()).toBe(true) }) it('persists status bar height from ?sbh=', () => { window.history.replaceState({}, '', '/psy/?mp=1&sbh=47') initMpEmbed() expect(document.documentElement.style.getPropertyValue('--yxg-safe-top')).toBe('47px') expect(document.documentElement.style.getPropertyValue('--yxg-page-top')).toBe('calc(47px + 50px)') expect(sessionStorage.getItem('yxg_sbh')).toBe('47') window.history.replaceState({}, '', '/psy/?mp=1') applyMpEmbedDom() expect(document.documentElement.style.getPropertyValue('--yxg-safe-top')).toBe('47px') }) it('uses native mini-program header mode with ?nh=1', () => { window.history.replaceState({}, '', '/psy/?mp=1&nh=1') initMpEmbed() expect(isMpNativeHeader()).toBe(true) expect(document.documentElement.classList.contains('mp-native-header')).toBe(true) expect(document.documentElement.style.getPropertyValue('--yxg-safe-top')).toBe('0px') expect(document.documentElement.style.getPropertyValue('--yxg-page-top')).toBe('4px') }) it('applies sbh in native header mode with ?nh=1&sbh=', () => { window.history.replaceState({}, '', '/psy/?mp=1&nh=1&sbh=12') initMpEmbed() expect(isMpNativeHeader()).toBe(true) expect(sessionStorage.getItem('yxg_sbh')).toBe('12') expect(document.documentElement.style.getPropertyValue('--yxg-page-top')).toBe('12px') window.history.replaceState({}, '', '/psy/?mp=1&nh=1') applyMpEmbedDom() expect(document.documentElement.style.getPropertyValue('--yxg-page-top')).toBe('12px') }) it('returns false without mp query', () => { initMpEmbed() expect(isMpEmbed()).toBe(false) }) })