import { describe, it, expect, vi, beforeEach } from 'vitest' import { useResponsiveComponent } from '#lib/composables' import { useDevice } from '#imports' import { DeviceEnum } from '#lib/enums' vi.mock('nuxt/app', () => ({ useNuxtApp: vi.fn(), })) vi.mock('#imports', () => ({ useDevice: vi.fn().mockReturnValue({ isMobile: false }), persistedState: vi.fn().mockReturnValue({ localStorage: {}, }), })) describe('useResponsiveComponent', () => { const defaultUseDeviceProps = { isMobile: false, userAgent: '', isDesktop: false, isIos: false, isAndroid: false, isMobileOrTablet: false, isDesktopOrTablet: false, isTablet: false, isWindows: false, isMacOS: false, isApple: false, isSafari: false, isFirefox: false, isEdge: false, isChrome: false, isSamsung: false, isCrawler: false, } it('should return the desktop component and layout when not on mobile', () => { const componentDesktop = { template: '
Desktop Component
' } const componentMobile = { template: '
Mobile Component
' } const { component, layout } = useResponsiveComponent( componentDesktop, componentMobile, ) expect(component).toBe(componentDesktop) expect(layout).toBe(DeviceEnum.DESKTOP) }) it('should return the mobile component and layout when on mobile', () => { vi.mocked(useDevice).mockReturnValueOnce({ ...defaultUseDeviceProps, isMobile: true, }) const componentDesktop = { template: '
Desktop Component
' } const componentMobile = { template: '
Mobile Component
' } const { component, layout } = useResponsiveComponent( componentDesktop, componentMobile, ) expect(component).toBe(componentMobile) expect(layout).toBe(DeviceEnum.MOBILE) }) it('should return undefined for component if none are provided', () => { const { component, layout } = useResponsiveComponent() expect(component).toBeUndefined() expect(layout).toBe(DeviceEnum.DESKTOP) }) it('should return desktop layout even if component is undefined', () => { const { component, layout } = useResponsiveComponent(undefined, undefined) expect(component).toBeUndefined() expect(layout).toBe(DeviceEnum.DESKTOP) }) })