Files
Genarrative/src/components/platform-entry/PlatformProfilePlayedWorksModal.test.tsx
kdletters 4e3378be65 收口个人中心弹层组件
- 新增 PlatformProfileModalShell 统一个人中心主弹层与副弹层壳层
- 抽离 PlatformProfilePlayedWorksModal 与 PlatformProfileReferralModal 并移除首页内联历史与邀请弹层实现
- 让昵称充值任务兑换码账单等弹层复用共享壳层并补齐测试和文档
2026-06-10 19:44:19 +08:00

92 lines
2.9 KiB
TypeScript

/* @vitest-environment jsdom */
import { render, screen, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { describe, expect, test, vi } from 'vitest';
import { PlatformProfilePlayedWorksModal } from './PlatformProfilePlayedWorksModal';
describe('PlatformProfilePlayedWorksModal', () => {
test('renders save archives and played works in one modal', async () => {
const user = userEvent.setup();
const onResumeSave = vi.fn();
const onOpenWork = vi.fn();
const saveEntry = {
worldKey: 'custom:save-1',
ownerUserId: 'user-1',
profileId: 'save-1',
worldType: 'custom',
worldName: '回声群岛',
subtitle: '雾海码头',
summaryText: '继续推进上一次保存的故事。',
coverImageSrc: null,
lastPlayedAt: '2026-04-19T12:00:00.000Z',
};
const playedWork = {
worldKey: 'custom:world-1',
ownerUserId: 'user-1',
profileId: 'world-1',
worldType: 'CUSTOM',
worldTitle: '潮雾列岛',
worldSubtitle: '旧灯塔与失控航路',
firstPlayedAt: '2026-04-18T12:00:00.000Z',
lastPlayedAt: '2026-04-19T12:00:00.000Z',
lastObservedPlayTimeMs: 30 * 60 * 1000,
};
render(
<PlatformProfilePlayedWorksModal
stats={{
totalPlayTimeMs: 90 * 60 * 1000,
playedWorks: [playedWork],
updatedAt: '2026-04-19T12:00:00.000Z',
}}
isLoading={false}
error={null}
saveEntries={[saveEntry]}
saveError={null}
isResumingSaveWorldKey={null}
onClose={vi.fn()}
onOpenWork={onOpenWork}
onResumeSave={onResumeSave}
/>,
);
const dialog = screen.getByRole('dialog', { name: '玩过' });
expect(within(dialog).getByText('可继续')).toBeTruthy();
expect(within(dialog).getAllByText('玩过').length).toBeGreaterThan(0);
expect(within(dialog).getByText('1.5小时')).toBeTruthy();
await user.click(within(dialog).getByRole('button', { name: //u }));
expect(onResumeSave).toHaveBeenCalledWith(saveEntry);
await user.click(within(dialog).getByRole('button', { name: //u }));
expect(onOpenWork).toHaveBeenCalledWith(playedWork);
});
test('renders platform empty state when no history exists', () => {
render(
<PlatformProfilePlayedWorksModal
stats={{
totalPlayTimeMs: 0,
playedWorks: [],
updatedAt: '2026-04-19T12:00:00.000Z',
}}
isLoading={false}
error={null}
saveEntries={[]}
saveError={null}
isResumingSaveWorldKey={null}
onClose={vi.fn()}
onResumeSave={vi.fn()}
/>,
);
const emptyState = screen.getByText('暂无玩过');
expect(emptyState.className).toContain('platform-empty-state');
expect(emptyState.className).toContain('text-left');
});
});