/* @vitest-environment jsdom */ import { act, renderHook } from '@testing-library/react'; import { afterEach, describe, expect, it, vi } from 'vitest'; import type { ProfileRechargeCenterResponse } from '../../../packages/shared/src/contracts/runtime'; import { usePlatformProfileCenterController } from './usePlatformProfileCenterController'; const getPlatformProfileRechargeCenterMock = vi.hoisted(() => vi.fn()); vi.mock('../../services/platform-entry/platformProfileClient', async () => { const actual = await vi.importActual< typeof import('../../services/platform-entry/platformProfileClient') >('../../services/platform-entry/platformProfileClient'); return { ...actual, getPlatformProfileRechargeCenter: getPlatformProfileRechargeCenterMock, }; }); const rechargeCenter: ProfileRechargeCenterResponse = { walletBalance: 100, mudPointBalance: { totalPoints: 100, permanentPoints: 100, limitedPoints: 0, limitedExpiresAt: null, dailyFreePoints: 0, dailyFreeResetPoints: 0, dailyFreeResetsAt: null, }, membership: { status: 'normal', tier: 'normal', startedAt: null, expiresAt: null, updatedAt: null, cycleStartedAt: null, cycleResetsAt: null, cycleGrantedPoints: 0, cycleRemainingPoints: 0, cyclePeriodDays: 30, }, pointProducts: [], membershipProducts: [], benefits: [], latestOrder: null, hasPointsRecharged: false, }; describe('usePlatformProfileCenterController', () => { afterEach(() => { getPlatformProfileRechargeCenterMock.mockReset(); }); it('aborts an unfinished recharge center read when the consumer unmounts', async () => { let resolveRechargeCenter!: (center: ProfileRechargeCenterResponse) => void; const pendingRead = new Promise((resolve) => { resolveRechargeCenter = resolve; }); getPlatformProfileRechargeCenterMock.mockReturnValue(pendingRead); const { result, unmount } = renderHook(() => usePlatformProfileCenterController({ activeTab: 'editor-canvas', isAuthenticated: false, showRechargeEntry: true, requestLogin: vi.fn(), currentUser: null, }), ); act(() => result.current.loadRechargeCenter()); const requestOptions = getPlatformProfileRechargeCenterMock.mock.calls[0]?.[0]; expect(requestOptions?.signal.aborted).toBe(false); unmount(); expect(requestOptions?.signal.aborted).toBe(true); resolveRechargeCenter(rechargeCenter); await pendingRead; }); });