Merge remote-tracking branch 'origin/codex/wooden-fish-template'

This commit is contained in:
kdletters
2026-05-22 08:09:58 +08:00
617 changed files with 31612 additions and 237 deletions

View File

@@ -0,0 +1,64 @@
/* @vitest-environment jsdom */
import { fireEvent, render, screen } from '@testing-library/react';
import { expect, test, vi } from 'vitest';
import type { CreationEntryConfig } from '../../services/creationEntryConfigService';
import { PlatformEntryCreationTypeModal } from './PlatformEntryCreationTypeModal';
import { derivePlatformCreationTypes } from './platformEntryCreationTypes';
const entryConfig = {
startCard: {
title: '新建作品',
description: '',
idleBadge: '模板',
busyBadge: '开启中',
},
typeModal: {
title: '选择创作类型',
description: '',
},
creationTypes: [
{
id: 'wooden-fish',
title: '敲木鱼',
subtitle: '轻点积累功德',
badge: '可创建',
imageSrc: '/creation-type-references/puzzle.webp',
visible: true,
open: true,
sortOrder: 10,
updatedAtMicros: 1,
},
],
} satisfies CreationEntryConfig;
test('dispatches wooden fish creation type selection', () => {
const onSelectWoodenFish = vi.fn();
render(
<PlatformEntryCreationTypeModal
isOpen
isBusy={false}
error={null}
entryConfig={entryConfig}
creationTypes={derivePlatformCreationTypes(entryConfig.creationTypes)}
onClose={() => {}}
onSelectRpg={() => {}}
onSelectBigFish={() => {}}
onSelectMatch3D={() => {}}
onSelectSquareHole={() => {}}
onSelectJumpHop={() => {}}
onSelectWoodenFish={onSelectWoodenFish}
onSelectPuzzle={() => {}}
onSelectCreativeAgent={() => {}}
onSelectBarkBattle={() => {}}
onSelectVisualNovel={() => {}}
onSelectBabyObjectMatch={() => {}}
/>,
);
fireEvent.click(screen.getByRole('button', { name: //u }));
expect(onSelectWoodenFish).toHaveBeenCalledTimes(1);
});

View File

@@ -19,6 +19,7 @@ export interface PlatformEntryCreationTypeModalProps {
onSelectMatch3D: () => void;
onSelectSquareHole: () => void;
onSelectJumpHop: () => void;
onSelectWoodenFish: () => void;
onSelectPuzzle: () => void;
onSelectCreativeAgent: () => void;
onSelectBarkBattle: () => void;
@@ -102,6 +103,7 @@ export function PlatformEntryCreationTypeModal({
onSelectMatch3D,
onSelectSquareHole,
onSelectJumpHop,
onSelectWoodenFish,
onSelectPuzzle,
onSelectCreativeAgent,
onSelectBarkBattle,
@@ -147,6 +149,9 @@ export function PlatformEntryCreationTypeModal({
if (item.id === 'jump-hop') {
onSelectJumpHop();
}
if (item.id === 'wooden-fish') {
onSelectWoodenFish();
}
if (item.id === 'puzzle') {
onSelectPuzzle();
}

File diff suppressed because it is too large Load Diff

View File

@@ -182,3 +182,29 @@ test('edutainment switch hides baby object match creation entry from database co
getVisiblePlatformCreationTypes(hiddenCards).map((item) => item.id),
).toEqual(['puzzle']);
});
test('baby object match entry is visible and open when database marks it creatable', () => {
const cards = derivePlatformCreationTypes([
{
id: 'baby-object-match',
title: '宝贝识物',
subtitle: '亲子识物分类',
badge: '可创建',
imageSrc: '/child-motion-demo/picture-book-grass-stage.png',
visible: true,
open: true,
sortOrder: 90,
updatedAtMicros: 1,
},
]);
expect(getVisiblePlatformCreationTypes(cards)).toEqual([
expect.objectContaining({
id: 'baby-object-match',
hidden: false,
locked: false,
}),
]);
expect(isPlatformCreationTypeVisible(cards, 'baby-object-match')).toBe(true);
expect(isPlatformCreationTypeOpen(cards, 'baby-object-match')).toBe(true);
});

View File

@@ -39,6 +39,10 @@ export type SelectionStage =
| 'bark-battle-generating'
| 'bark-battle-result'
| 'bark-battle-runtime'
| 'wooden-fish-workspace'
| 'wooden-fish-generating'
| 'wooden-fish-result'
| 'wooden-fish-runtime'
| 'creative-agent-workspace'
| 'visual-novel-agent-workspace'
| 'visual-novel-generating'