This commit is contained in:
2026-05-01 00:33:39 +08:00
parent 61969c5116
commit fe02603ba1
68 changed files with 4586 additions and 748 deletions

View File

@@ -1,12 +1,34 @@
/* @vitest-environment jsdom */
import { fireEvent, render, screen } from '@testing-library/react';
import { expect, test, vi } from 'vitest';
import { act } from 'react';
import { afterEach, expect, test, vi } from 'vitest';
import type { PlatformPublicGalleryCard } from '../rpg-entry/rpgEntryWorldPresentation';
import type { PlatformPuzzleGalleryCard } from '../rpg-entry/rpgEntryWorldPresentation';
import { PlatformWorkDetailView } from './PlatformWorkDetailView';
function createPuzzleEntry(): PlatformPublicGalleryCard {
vi.mock('../ResolvedAssetImage', () => ({
ResolvedAssetImage: ({
src,
alt,
className,
'aria-hidden': ariaHidden,
}: {
src?: string | null;
alt?: string;
className?: string;
'aria-hidden'?: boolean | 'true' | 'false';
}) => (
<img
src={src ?? ''}
alt={alt ?? ''}
className={className}
aria-hidden={ariaHidden}
/>
),
}));
function createPuzzleEntry(): PlatformPuzzleGalleryCard {
return {
sourceType: 'puzzle',
workId: 'work-1',
@@ -18,6 +40,7 @@ function createPuzzleEntry(): PlatformPublicGalleryCard {
subtitle: '拼图关卡',
summaryText: '适合公开游玩的拼图作品。',
coverImageSrc: null,
coverSlides: [],
themeTags: ['拼图'],
playCount: 12,
remixCount: 3,
@@ -29,6 +52,10 @@ function createPuzzleEntry(): PlatformPublicGalleryCard {
};
}
afterEach(() => {
vi.useRealTimers();
});
test('PlatformWorkDetailView renders compact stats and date time', () => {
render(
<PlatformWorkDetailView
@@ -94,3 +121,51 @@ test('PlatformWorkDetailView calls like handler', () => {
expect(onLike).toHaveBeenCalledTimes(1);
});
test('PlatformWorkDetailView cycles puzzle level cover slides', () => {
vi.useFakeTimers();
render(
<PlatformWorkDetailView
entry={{
...createPuzzleEntry(),
coverImageSrc: '/fallback-cover.png',
coverSlides: [
{
id: 'level-1',
imageSrc: '/level-1.png',
label: '第一关',
},
{
id: 'level-2',
imageSrc: '/level-2.png',
label: '第二关',
},
],
}}
isBusy={false}
error={null}
onBack={vi.fn()}
onLike={vi.fn()}
onStart={vi.fn()}
onRemix={vi.fn()}
/>,
);
expect(screen.getAllByAltText('关键词:逍遥游拼图')[0]?.getAttribute('src')).toBe(
'/level-1.png',
);
fireEvent.click(screen.getByRole('button', { name: '下一张关卡图' }));
expect(screen.getAllByAltText('关键词:逍遥游拼图')[0]?.getAttribute('src')).toBe(
'/level-2.png',
);
act(() => {
vi.advanceTimersByTime(4200);
});
expect(screen.getAllByAltText('关键词:逍遥游拼图')[0]?.getAttribute('src')).toBe(
'/level-1.png',
);
});