import { describe, it, expect, vi, beforeEach } from 'vitest' import { useNuxtApp } from 'nuxt/app' import { useBanners } from '@/composables' import { useGames } from '@/composables/game' import { useNavigate } from '@/composables/common/use-navigate' vi.mock('nuxt/app', () => ({ useNuxtApp: vi.fn().mockReturnValue({ $site: { banners: vi.fn(), }, }), useRuntimeConfig: vi.fn().mockReturnValue({ public: { API_URL: '/api', }, }), useNuxtData: vi.fn().mockReturnValue({ data: [], }), useAsyncData: vi.fn().mockReturnValue({ data: [], }), })) vi.mock('@/composables/game', () => ({ useGames: vi.fn().mockReturnValue({ playGame: vi.fn(), }), })) vi.mock('@/composables/common/use-navigate', () => ({ useNavigate: vi.fn().mockReturnValue({ navigate: vi.fn(), }), })) vi.mock('#lib/composables/service/use-api-fetch', () => ({ useApiFetch: vi.fn().mockReturnValue({ request: vi.fn(), }), })) vi.mock('#imports', () => ({ persistedState: vi.fn().mockReturnValue({ localStorage: {}, }), })) describe('useBanners', () => { let $site: any let playGame: any let navigate: any beforeEach(() => { $site = useNuxtApp().$site playGame = useGames().playGame navigate = useNavigate().navigate }) it('should handle click event with a link', async () => { const { onClickBanner } = useBanners() const bannerItem = { link: '/some-link', loginRequired: false, newTab: false, } await onClickBanner(bannerItem as any) expect(navigate).toHaveBeenCalledWith( bannerItem.link, bannerItem.loginRequired, bannerItem.newTab, ) expect(playGame).not.toHaveBeenCalled() }) it('should handle click event with link and not play game', async () => { const { onClickBanner } = useBanners() const bannerItem = { link: '/some-link', loginRequired: false, newTab: false, } await onClickBanner(bannerItem as any) expect(navigate).toHaveBeenCalledWith( bannerItem.link, bannerItem.loginRequired, bannerItem.newTab, ) expect(playGame).not.toHaveBeenCalled() }) })