// @ts-nocheck import { describe, it, expect, vi, beforeEach } from 'vitest' import { useCashbackPromotion } from '../use-cashback-promotion' import { PromotionPlanEnum } from '#lib/enums' import * as utils from '#lib/utils' import { ref } from 'vue' // Mock dependencies const mockPromotionStore = { promotionUser: ref({ total_bet: 0, yesterday_refund: 0, total_refund: 0, rolling: 0, deposit_amount: 0, promotion_amount: 0, multiplier: 0, turnover: 0, }), packageId: ref(), isUsingPromotion: vi.fn(), isCommissionType: ref(false), fetchUserPromotion: vi.fn(), fetchPromotionPackages: vi.fn(), } const mockCancelPromotion = { openModalCancelPromotion: vi.fn(), } vi.mock('#lib/composables/promotion', () => ({ usePromotion: () => mockPromotionStore, useCancelPromotion: () => mockCancelPromotion, })) vi.mock('#lib/utils', () => ({ formatAmountUnit: vi.fn(), })) describe('useCashbackPromotion composable', () => { beforeEach(() => { vi.clearAllMocks() }) it('should return cashback information for commission type', () => { mockPromotionStore.isCommissionType.value = true mockPromotionStore.promotionUser.value = { total_bet: 1000, yesterday_refund: 500, total_refund: 2000, } vi.mocked(utils.formatAmountUnit).mockImplementation((amount) => amount.toString(), ) const promotion = useCashbackPromotion() expect(promotion.cashbackInformation.value).toEqual([ { title: 'Tổng cược hôm nay', type: 'totalToday', value: '1000', }, { title: 'Hoàn trả hôm qua', type: 'totalYesterday', value: '500', }, { title: 'Tổng hoàn trả', type: 'totalCashback', value: '2000', }, ]) }) it('should return cashback information for non-commission type with valid package ID', () => { mockPromotionStore.isCommissionType.value = false mockPromotionStore.packageId.value = PromotionPlanEnum.WELCOME mockPromotionStore.promotionUser.value = { deposit_amount: 1000, promotion_amount: 500, } vi.mocked(utils.formatAmountUnit).mockImplementation((amount) => amount.toString(), ) const promotion = useCashbackPromotion() expect(promotion.cashbackInformation.value).toEqual([ { title: 'Số tiền nạp', type: 'depositAmount', value: '1000', }, { title: 'Số tiền khuyến mãi', imgSrc: 'promotionAmount', value: '500', }, ]) }) it('should return empty cashback information for non-commission type without package ID', () => { mockPromotionStore.isCommissionType.value = false mockPromotionStore.packageId.value = null const promotion = useCashbackPromotion() expect(promotion.cashbackInformation.value).toEqual([]) }) it('should correctly calculate promotion usage detail', () => { mockPromotionStore.promotionUser.value = { rolling: 1000, multiplier: 5, turnover: 3000, } const promotion = useCashbackPromotion() expect(promotion.promotionUsageDetail.value).toEqual({ totalRound: 5, currentRound: 15, ratioRound: 300, }) }) it('should return zero promotion usage detail if rolling or multiplier is missing', () => { mockPromotionStore.promotionUser.value = { rolling: null, multiplier: null, turnover: 3000, } const promotion = useCashbackPromotion() expect(promotion.promotionUsageDetail.value).toEqual({ totalRound: 0, currentRound: 0, ratioRound: 0, }) }) it('should open cancel promotion modal', () => { const promotion = useCashbackPromotion() promotion.openModalCancelPromotion() expect(mockCancelPromotion.openModalCancelPromotion).toHaveBeenCalled() }) it('should fetch user promotion details', async () => { const promotion = useCashbackPromotion() await promotion.fetchUserPromotion() expect(mockPromotionStore.fetchUserPromotion).toHaveBeenCalled() }) it('should fetch promotion packages', async () => { const promotion = useCashbackPromotion() await promotion.fetchPromotionPackages() expect(mockPromotionStore.fetchPromotionPackages).toHaveBeenCalled() }) })