Files
Genarrative/src/components/platform-entry/usePlatformProfileCenterController.test.tsx
T
kdletters 071faa482c 统一 Rust 与 TypeScript 格式化门禁
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口

完成项目 TypeScript/Prettier 与 Rust 全量格式化

修复 Pingora expected executable 门禁的空白敏感误报

同步开发运维文档与 AGC skill pack 格式化忽略规则
2026-09-01 16:28:34 +08:00

86 lines
2.5 KiB
TypeScript

/* @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<ProfileRechargeCenterResponse>(
(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;
});
});