init with react+axum+spacetimedb
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-26 18:06:23 +08:00
commit cbc27bad4a
20199 changed files with 883714 additions and 0 deletions

View File

@@ -0,0 +1,173 @@
// @vitest-environment jsdom
import { fireEvent, render, screen } from '@testing-library/react';
import { describe, expect, test, vi } from 'vitest';
import type { BigFishSessionSnapshotResponse } from '../../../packages/shared/src/contracts/bigFish';
import { BigFishResultView } from './BigFishResultView';
vi.mock('../ResolvedAssetImage', () => ({
ResolvedAssetImage: ({
src,
alt,
className,
}: {
src?: string | null;
alt?: string;
className?: string;
}) => (src ? <img src={src} alt={alt} className={className} /> : null),
}));
function createSession(): BigFishSessionSnapshotResponse {
return {
sessionId: 'big-fish-session-1',
currentTurn: 2,
progressPercent: 88,
stage: 'asset_refining',
anchorPack: {
gameplayPromise: {
key: 'gameplayPromise',
label: '玩法承诺',
value: '弱小逆袭',
status: 'confirmed',
},
ecologyVisualTheme: {
key: 'ecologyVisualTheme',
label: '生态与视觉母题',
value: '深海谜境',
status: 'confirmed',
},
growthLadder: {
key: 'growthLadder',
label: '成长阶梯',
value: '8 级进化',
status: 'confirmed',
},
riskTempo: {
key: 'riskTempo',
label: '风险节奏',
value: '平衡',
status: 'confirmed',
},
},
draft: {
title: '深海谜境',
subtitle: '逐级吞噬成长',
coreFun: '弱小逆袭',
ecologyTheme: '深海谜境',
levels: [
{
level: 1,
name: '荧潮幼体',
oneLineFantasy: '在深海荧光裂谷中寻找第一个同伴。',
silhouetteDirection: '圆润鱼苗',
sizeRatio: 1,
visualPromptSeed: '深海荧光幼体',
motionPromptSeed: '轻微摆尾',
mergeSourceLevel: null,
preyWindow: [1],
threatWindow: [2],
isFinalLevel: false,
},
],
background: {
theme: '深海谜境',
colorMood: '深蓝与青绿',
foregroundHints: '漂浮微粒',
midgroundComposition: '中央留白',
backgroundDepth: '深海纵深',
safePlayAreaHint: '中央 70%',
spawnEdgeHint: '四周边缘',
backgroundPromptSeed: '深海谜境背景',
},
runtimeParams: {
levelCount: 1,
mergeCountPerUpgrade: 3,
spawnTargetCount: 12,
leaderMoveSpeed: 160,
followerCatchUpSpeed: 120,
offscreenCullSeconds: 3,
preySpawnDeltaLevels: [1],
threatSpawnDeltaLevels: [1],
winLevel: 1,
},
},
assetSlots: [
{
slotId: 'big-fish-asset-level-main',
assetKind: 'level_main_image',
level: 1,
motionKey: null,
status: 'ready',
assetUrl:
'/generated-big-fish-assets/big-fish-session-1/level-main-image/level-1/image.png',
promptSnapshot: '深海荧光幼体',
updatedAt: '2026-04-23T10:00:00.000Z',
},
{
slotId: 'big-fish-asset-background',
assetKind: 'stage_background',
level: null,
motionKey: null,
status: 'ready',
assetUrl:
'/generated-big-fish-assets/big-fish-session-1/stage-background/image.png',
promptSnapshot: '深海谜境背景',
updatedAt: '2026-04-23T10:00:00.000Z',
},
],
assetCoverage: {
levelMainImageReadyCount: 1,
levelMotionReadyCount: 0,
backgroundReady: true,
requiredLevelCount: 1,
publishReady: false,
blockers: ['还缺少 2 个基础动作'],
},
messages: [],
lastAssistantReply: '主图占位图已生成。',
publishReady: false,
updatedAt: '2026-04-23T10:00:00.000Z',
};
}
describe('BigFishResultView', () => {
test('renders generated formal previews with accurate status copy', () => {
render(
<BigFishResultView
session={createSession()}
onBack={() => {}}
onExecuteAction={() => {}}
onStartTestRun={() => {}}
/>,
);
expect(screen.getByText('主图 已生成')).toBeTruthy();
expect(screen.getByAltText('荧潮幼体')).toBeTruthy();
expect(screen.getByAltText('深海谜境 场地背景')).toBeTruthy();
});
test('shows publish failures in a dismissible modal', () => {
const onDismissError = vi.fn();
render(
<BigFishResultView
session={createSession()}
error="big_fish 发布校验未通过:还缺少 16 个基础动作"
onBack={() => {}}
onDismissError={onDismissError}
onExecuteAction={() => {}}
onStartTestRun={() => {}}
/>,
);
expect(screen.getByRole('dialog')).toBeTruthy();
expect(screen.getByText('发布失败')).toBeTruthy();
expect(
screen.getByText('big_fish 发布校验未通过:还缺少 16 个基础动作'),
).toBeTruthy();
fireEvent.click(screen.getByRole('button', { name: '知道了' }));
expect(onDismissError).toHaveBeenCalledTimes(1);
});
});