import { describe, it, expect, vi, beforeEach } from 'vitest' import { useGameURL } from '../use-game-url' import { GameTypeEnum, IFrameGameURLEnum } from '#lib/enums' import { useUser } from '#lib/composables' import { useRuntimeConfig } from 'nuxt/app' const MOCK_TOKEN = 'test-mock-token' const MOCK_GP_TOKEN = 'test-mock-gp-token' const MOCK_LODE_URL = 'https://web-sg.apixld.com/?style=red&token=' const MOCK_LODE_DAICAT_URL = 'https://lode68.top?token=' const MOCK_LODE_SIEUTOC_URL = 'https://web-rng.apixld.com/game/60/?token=' const MOCK_TP_KENO_URL = 'https://keno.gamingon.net/' const MOCK_TP_NUMBERGAME_URL = 'https://nbg.apixld.com/' const MOCK_QUAYSO_LAS_VEGAS_URL = 'https://tablegame.quayso.club/' const MOCK_QUAYSO_CYPER_URL = 'https://lottery.quayso.club/' const MOCK_GP_URL = 'https://games.mt-sta.com/' const MOCK_INSTANT_GAME_URL = 'https://launch.spribegaming.com/' const MOCK_GAMEBAI_URL = 'https://games.prorichvip.com/' const mockNadal = { game: { gameLauncher: vi.fn().mockResolvedValue('') } } vi.mock('nuxt/app', () => ({ useRoute: vi.fn(() => ({ fullpath: 'fullPath', })), useRuntimeConfig: vi.fn().mockReturnValue({ public: { LODE_MOBILE_URL: '', LODE_URL: '', }, }), useCookie: vi.fn().mockReturnValue(''), })) vi.mock('#lib/composables', () => ({ useNadal: () => mockNadal, useUser: vi.fn().mockReturnValue({ subBalance: { value: 0, }, user: { value: {}, }, denyGameIds: { value: [], }, token: { value: '', }, gpToken: { value: '', }, memberId: { value: '1', }, }), useGameToast: vi.fn().mockReturnValue({}), })) vi.mock('#imports', () => ({ useDevice: vi.fn().mockReturnValue({ isMobile: false, }), })) describe('useGameURL', () => { beforeEach(() => { vi.clearAllMocks() useUser().gpToken.value = MOCK_GP_TOKEN useUser().token.value = MOCK_TOKEN window.open = vi.fn().mockReturnValue({ document: { open: vi.fn(), write: vi.fn(), close: vi.fn(), }, }) }) describe('getGameUrlIframe', () => { const { getGameUrlIframe } = useGameURL() it('should get correct URL of lode', () => { useRuntimeConfig().public.LODE_URL = MOCK_LODE_URL expect(getGameUrlIframe(IFrameGameURLEnum.LODE)).toEqual( `${MOCK_LODE_URL}${MOCK_GP_TOKEN}`, ) }) it('should get correct URL of lode dai cat', () => { useRuntimeConfig().public.LODE_DAICAT_URL = MOCK_LODE_DAICAT_URL expect(getGameUrlIframe(IFrameGameURLEnum.LODE_DAICAT)).toEqual( `${MOCK_LODE_DAICAT_URL}${MOCK_GP_TOKEN}`, ) }) it('should get correct URL of lode sieu toc', () => { useRuntimeConfig().public.LODE_SIEUTOC_URL = MOCK_LODE_SIEUTOC_URL expect(getGameUrlIframe(IFrameGameURLEnum.LODE_SIEUTOC)).toEqual( `${MOCK_LODE_SIEUTOC_URL}${MOCK_GP_TOKEN}`, ) }) it('should get correct URL of TP keno', () => { useRuntimeConfig().public.TP_KENO_URL = MOCK_TP_KENO_URL const params = new URLSearchParams({ operator_id: '2000', lang: 'vi', currency: 'VND', token: MOCK_GP_TOKEN, is_mobile: '0', }) expect(getGameUrlIframe(IFrameGameURLEnum.TP_KENO)).toEqual( `${MOCK_TP_KENO_URL}?${params.toString()}`, ) }) it('should get correct URL of TP number game', () => { useRuntimeConfig().public.TP_NUMBERGAME_URL = MOCK_TP_NUMBERGAME_URL const params = new URLSearchParams({ operator_id: '1000', lang: 'vi', currency: 'VND', is_mobile: '0', token: MOCK_GP_TOKEN, }) expect(getGameUrlIframe(IFrameGameURLEnum.TP_NUMBER_GAME)).toEqual( `${MOCK_TP_NUMBERGAME_URL}?${params.toString()}`, ) }) it('should get correct URL of lottery lasvegas', () => { useRuntimeConfig().public.QUAYSO_LAS_VEGAS_URL = MOCK_QUAYSO_LAS_VEGAS_URL expect(getGameUrlIframe(IFrameGameURLEnum.LOTTERY_LAS_VEGAS)).toEqual( `${MOCK_QUAYSO_LAS_VEGAS_URL}?token=${MOCK_GP_TOKEN}`, ) }) it('should get correct URL of lottery cyber', () => { useRuntimeConfig().public.QUAYSO_CYPER_URL = MOCK_QUAYSO_CYPER_URL expect(getGameUrlIframe(IFrameGameURLEnum.LOTTERY_CYBER_PUNK)).toEqual( `${MOCK_QUAYSO_CYPER_URL}?token=${MOCK_GP_TOKEN}`, ) }) }) describe('getGameTypeUrl', () => { const { getGameTypeUrl } = useGameURL() const MOCK_GAME_ID = 'mock-game-id' it('should get correct URL of GP_URL', () => { useRuntimeConfig().public.GP_URL = MOCK_GP_URL const data = getGameTypeUrl(GameTypeEnum.GP_URL, MOCK_GAME_ID) expect(data).toContain(MOCK_GP_URL) expect(data).toContain(`token=${MOCK_GP_TOKEN}`) }) it('should get correct URL of INSTANT_GAMES_URL', () => { useRuntimeConfig().public.INSTANT_GAME_URL = MOCK_INSTANT_GAME_URL const data = getGameTypeUrl(GameTypeEnum.INSTANT_GAMES_URL, MOCK_GAME_ID) expect(data).toContain(MOCK_INSTANT_GAME_URL) expect(data).toContain(`token=${MOCK_GP_TOKEN}-`) expect(data).toContain(`user=1`) }) it('should play game of PG_URL successfully', () => { const data = getGameTypeUrl(GameTypeEnum.PG_URL, MOCK_GAME_ID) expect(data).toEqual('') expect(mockNadal.game.gameLauncher).toHaveBeenCalled() }) it('should get correct GAME_BAI_URL', () => { useRuntimeConfig().public.GAMEBAI_URL = MOCK_GAMEBAI_URL const MOCK_PROVIDER_URL = 'mock-provider-url' const data = getGameTypeUrl( GameTypeEnum.GAME_BAI_URL, MOCK_GAME_ID, MOCK_PROVIDER_URL, ) expect(data).contain(`token=${MOCK_GP_TOKEN}`) expect(data).contain(`gameid=${MOCK_GAME_ID}`) expect(data).contain(MOCK_PROVIDER_URL) }) it('should get empty URL when gameType is incorrect', () => { useRuntimeConfig().public.GAMEBAI_URL = MOCK_GAMEBAI_URL const data = getGameTypeUrl('test' as GameTypeEnum, MOCK_GAME_ID) expect(data).toEqual('') }) }) })