refactor: 收口小玩法生成 action payload
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
import { describe, expect, test } from 'vitest';
|
||||
|
||||
import type {
|
||||
JumpHopSessionSnapshotResponse,
|
||||
JumpHopWorkspaceCreateRequest,
|
||||
} from '../../../packages/shared/src/contracts/jumpHop';
|
||||
import type {
|
||||
Match3DAgentSessionSnapshot,
|
||||
Match3DAnchorPackResponse,
|
||||
@@ -15,7 +19,12 @@ import type {
|
||||
PuzzleAgentSessionSnapshot,
|
||||
} from '../../../packages/shared/src/contracts/puzzleAgentSession';
|
||||
import type { PuzzleWorkSummary } from '../../../packages/shared/src/contracts/puzzleWorkSummary';
|
||||
import type {
|
||||
WoodenFishSessionSnapshotResponse,
|
||||
WoodenFishWorkspaceCreateRequest,
|
||||
} from '../../../packages/shared/src/contracts/woodenFish';
|
||||
import {
|
||||
buildJumpHopDraftActionPayload,
|
||||
buildMatch3DFormPayloadFromSession,
|
||||
buildMatch3DFormPayloadFromWork,
|
||||
buildPendingMatch3DDraftMetadata,
|
||||
@@ -25,6 +34,7 @@ import {
|
||||
buildPuzzleFormPayloadFromSession,
|
||||
buildPuzzleFormPayloadFromWork,
|
||||
buildPuzzleWorkUpdatePayloadFromDraft,
|
||||
buildWoodenFishDraftActionPayload,
|
||||
isEmptyPuzzleFormOnlyDraft,
|
||||
isPuzzleFormOnlyDraft,
|
||||
} from './platformMiniGameDraftPayloadModel';
|
||||
@@ -196,6 +206,91 @@ function buildMatch3DWork(
|
||||
};
|
||||
}
|
||||
|
||||
function buildJumpHopDraft(
|
||||
overrides: Partial<NonNullable<JumpHopSessionSnapshotResponse['draft']>> = {},
|
||||
): NonNullable<JumpHopSessionSnapshotResponse['draft']> {
|
||||
return {
|
||||
templateId: 'jump-hop',
|
||||
templateName: '跳一跳',
|
||||
profileId: 'jump-hop-profile-1',
|
||||
workTitle: '草稿跳一跳',
|
||||
workDescription: '从草稿恢复。',
|
||||
themeTags: ['草稿'],
|
||||
difficulty: 'standard',
|
||||
stylePreset: 'paper-toy',
|
||||
characterPrompt: '草稿角色',
|
||||
tilePrompt: '草稿平台',
|
||||
endMoodPrompt: '草稿终点',
|
||||
characterAsset: null,
|
||||
tileAtlasAsset: null,
|
||||
tileAssets: [],
|
||||
path: null,
|
||||
coverComposite: null,
|
||||
generationStatus: 'draft',
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function buildJumpHopPayload(
|
||||
overrides: Partial<JumpHopWorkspaceCreateRequest> = {},
|
||||
): JumpHopWorkspaceCreateRequest {
|
||||
return {
|
||||
templateId: 'jump-hop',
|
||||
workTitle: '表单跳一跳',
|
||||
workDescription: '从表单提交。',
|
||||
themeTags: ['表单'],
|
||||
difficulty: 'advanced',
|
||||
stylePreset: 'neon-glass',
|
||||
characterPrompt: '表单角色',
|
||||
tilePrompt: '表单平台',
|
||||
endMoodPrompt: '表单终点',
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function buildWoodenFishDraft(
|
||||
overrides: Partial<
|
||||
NonNullable<WoodenFishSessionSnapshotResponse['draft']>
|
||||
> = {},
|
||||
): NonNullable<WoodenFishSessionSnapshotResponse['draft']> {
|
||||
return {
|
||||
templateId: 'wooden-fish',
|
||||
templateName: '敲木鱼',
|
||||
profileId: 'wooden-fish-profile-1',
|
||||
workTitle: '草稿木鱼',
|
||||
workDescription: '从草稿恢复。',
|
||||
themeTags: ['草稿'],
|
||||
hitObjectPrompt: '草稿敲击物',
|
||||
hitObjectReferenceImageSrc: '/draft-hit-ref.png',
|
||||
hitSoundPrompt: null,
|
||||
floatingWords: ['草稿 +1'],
|
||||
hitObjectAsset: null,
|
||||
backgroundAsset: null,
|
||||
backButtonAsset: null,
|
||||
hitSoundAsset: null,
|
||||
coverImageSrc: null,
|
||||
generationStatus: 'draft',
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
function buildWoodenFishPayload(
|
||||
overrides: Partial<WoodenFishWorkspaceCreateRequest> = {},
|
||||
): WoodenFishWorkspaceCreateRequest {
|
||||
return {
|
||||
templateId: 'wooden-fish',
|
||||
workTitle: '表单木鱼',
|
||||
workDescription: '从表单提交。',
|
||||
themeTags: ['表单'],
|
||||
hitObjectPrompt: '表单敲击物',
|
||||
hitObjectReferenceImageSrc: '/form-hit-ref.png',
|
||||
hitSoundPrompt: null,
|
||||
hitSoundAsset: null,
|
||||
floatingWords: ['表单 +1'],
|
||||
...overrides,
|
||||
};
|
||||
}
|
||||
|
||||
describe('platformMiniGameDraftPayloadModel', () => {
|
||||
test('builds puzzle form payload from work with fallback description priority', () => {
|
||||
expect(
|
||||
@@ -242,6 +337,64 @@ describe('platformMiniGameDraftPayloadModel', () => {
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
test('builds jump hop draft action payload from payload or draft', () => {
|
||||
expect(
|
||||
buildJumpHopDraftActionPayload('compile-draft', {
|
||||
payload: buildJumpHopPayload(),
|
||||
draft: buildJumpHopDraft(),
|
||||
}),
|
||||
).toEqual({
|
||||
actionType: 'compile-draft',
|
||||
workTitle: '表单跳一跳',
|
||||
workDescription: '从表单提交。',
|
||||
themeTags: ['表单'],
|
||||
difficulty: 'advanced',
|
||||
stylePreset: 'neon-glass',
|
||||
characterPrompt: '表单角色',
|
||||
tilePrompt: '表单平台',
|
||||
endMoodPrompt: '表单终点',
|
||||
});
|
||||
|
||||
expect(
|
||||
buildJumpHopDraftActionPayload('regenerate-tiles', {
|
||||
draft: buildJumpHopDraft(),
|
||||
}),
|
||||
).toMatchObject({
|
||||
actionType: 'regenerate-tiles',
|
||||
workTitle: '草稿跳一跳',
|
||||
tilePrompt: '草稿平台',
|
||||
});
|
||||
});
|
||||
|
||||
test('builds wooden fish draft action payload from payload or draft', () => {
|
||||
expect(
|
||||
buildWoodenFishDraftActionPayload('compile-draft', {
|
||||
payload: buildWoodenFishPayload(),
|
||||
draft: buildWoodenFishDraft(),
|
||||
}),
|
||||
).toEqual({
|
||||
actionType: 'compile-draft',
|
||||
workTitle: '表单木鱼',
|
||||
workDescription: '从表单提交。',
|
||||
themeTags: ['表单'],
|
||||
hitObjectPrompt: '表单敲击物',
|
||||
hitObjectReferenceImageSrc: '/form-hit-ref.png',
|
||||
hitSoundAsset: null,
|
||||
floatingWords: ['表单 +1'],
|
||||
});
|
||||
|
||||
expect(
|
||||
buildWoodenFishDraftActionPayload('regenerate-hit-object', {
|
||||
draft: buildWoodenFishDraft(),
|
||||
}),
|
||||
).toMatchObject({
|
||||
actionType: 'regenerate-hit-object',
|
||||
workTitle: '草稿木鱼',
|
||||
hitObjectPrompt: '草稿敲击物',
|
||||
floatingWords: ['草稿 +1'],
|
||||
});
|
||||
});
|
||||
|
||||
test('builds puzzle form payload from session form draft and fallbacks', () => {
|
||||
expect(buildPuzzleFormPayloadFromSession(buildPuzzleSession())).toEqual({
|
||||
seedText: '表单画面',
|
||||
|
||||
Reference in New Issue
Block a user