fix: 修复拼图草稿写入步骤完成态

This commit is contained in:
kdletters
2026-05-22 16:09:01 +08:00
parent d46c5f9383
commit b89d4940a9
4 changed files with 43 additions and 2 deletions

View File

@@ -70,6 +70,25 @@ describe('miniGameDraftGenerationProgress', () => {
expect(writeBackProgress?.steps[5]?.status).toBe('active');
});
test('puzzle write-back step turns completed once rounded progress reaches 100%', () => {
const state: MiniGameDraftGenerationState = {
kind: 'puzzle',
phase: 'compile',
startedAtMs: 1_000,
completedAssetCount: 0,
totalAssetCount: 0,
error: null,
};
const progress = buildMiniGameDraftGenerationProgress(state, 298_950);
expect(progress?.phaseId).toBe('puzzle-select-image');
expect(progress?.overallProgress).toBe(98);
expect(progress?.estimatedRemainingMs).toBe(50);
expect(progress?.steps[5]?.completed).toBe(1);
expect(progress?.steps[5]?.status).toBe('completed');
});
test('puzzle direct upload generation skips the first image generation step', () => {
const state: MiniGameDraftGenerationState = {
kind: 'puzzle',
@@ -116,6 +135,10 @@ describe('miniGameDraftGenerationProgress', () => {
expect(progress?.overallProgress).toBe(98);
expect(progress?.estimatedRemainingMs).toBe(0);
expect(progress?.steps[5]?.completed).toBe(1);
expect(progress?.steps[5]?.status).toBe('completed');
expect(progress?.steps.every((step) => step.status === 'completed')).toBe(
true,
);
});
test('puzzle ready copy points to result page work info completion', () => {

View File

@@ -484,7 +484,17 @@ function buildMiniGameProgressSteps(
activeStepProgressRatio: number,
) {
return steps.map((step, index) => {
const isCompleted = state.phase === 'ready' || index < activeStepIndex;
// 中文注释:拼图草稿编译的 action 回包才代表可进入结果页;
// 但预计写入时长已耗尽时,最后一步自身应呈现已完成,避免出现“进行中 100%”。
const isPuzzleWriteStepCompleted =
state.kind === 'puzzle' &&
state.phase !== 'failed' &&
step.id === 'puzzle-select-image' &&
clampProgress(activeStepProgressRatio * 100) >= 100;
const isCompleted =
state.phase === 'ready' ||
index < activeStepIndex ||
isPuzzleWriteStepCompleted;
const isActive =
state.phase !== 'failed' && !isCompleted && index === activeStepIndex;
const isAssetStep = step.id === state.phase && state.totalAssetCount > 0;