114 lines
3.3 KiB
TypeScript
114 lines
3.3 KiB
TypeScript
import { describe, expect, test } from 'vitest';
|
|
|
|
import {
|
|
buildPlatformErrorDialogDismissKey,
|
|
buildPlatformTaskCompletionDialogDismissKey,
|
|
formatPlatformDialogSource,
|
|
isBackgroundGenerationStillRunningMessage,
|
|
normalizePlatformDialogMessage,
|
|
PLATFORM_TASK_COMPLETION_MESSAGE,
|
|
resolveActivePlatformDialog,
|
|
resolvePlatformErrorDialog,
|
|
} from './platformDialogStateModel';
|
|
|
|
describe('platformDialogStateModel', () => {
|
|
test('normalizes platform dialog messages', () => {
|
|
expect(normalizePlatformDialogMessage(' 图片失败 ')).toBe('图片失败');
|
|
expect(normalizePlatformDialogMessage(' ')).toBeNull();
|
|
expect(normalizePlatformDialogMessage(null)).toBeNull();
|
|
});
|
|
|
|
test('formats dialog source with optional identity', () => {
|
|
expect(formatPlatformDialogSource('拼图草稿', ' puzzle-session-1 ')).toBe(
|
|
'拼图草稿 puzzle-session-1',
|
|
);
|
|
expect(formatPlatformDialogSource('拼图草稿', ' ')).toBe('拼图草稿');
|
|
});
|
|
|
|
test('detects background generation still running messages', () => {
|
|
expect(
|
|
isBackgroundGenerationStillRunningMessage('后台仍在处理,请稍后查看。'),
|
|
).toBe(true);
|
|
expect(isBackgroundGenerationStillRunningMessage('素材生成失败。')).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
test('resolves the first non-empty error candidate', () => {
|
|
expect(
|
|
resolvePlatformErrorDialog([
|
|
{
|
|
key: 'empty',
|
|
source: '空来源',
|
|
message: ' ',
|
|
},
|
|
{
|
|
key: 'puzzle',
|
|
source: '拼图草稿 puzzle-session-1',
|
|
message: ' 素材生成失败。 ',
|
|
},
|
|
]),
|
|
).toEqual({
|
|
key: 'puzzle',
|
|
source: '拼图草稿 puzzle-session-1',
|
|
message: '素材生成失败。',
|
|
});
|
|
|
|
expect(
|
|
resolvePlatformErrorDialog([
|
|
{
|
|
key: 'empty',
|
|
source: '空来源',
|
|
message: null,
|
|
},
|
|
]),
|
|
).toBeNull();
|
|
});
|
|
|
|
test('builds stable dismiss keys for error and completion dialogs', () => {
|
|
expect(
|
|
buildPlatformErrorDialogDismissKey({
|
|
key: 'puzzle',
|
|
source: '拼图草稿 puzzle-session-1',
|
|
message: '素材生成失败。',
|
|
}),
|
|
).toBe('puzzle:拼图草稿 puzzle-session-1:素材生成失败。');
|
|
expect(buildPlatformErrorDialogDismissKey(null)).toBeNull();
|
|
|
|
expect(
|
|
buildPlatformTaskCompletionDialogDismissKey({
|
|
key: 'match3d',
|
|
source: '抓大鹅草稿 match3d-session-1',
|
|
message: PLATFORM_TASK_COMPLETION_MESSAGE,
|
|
completedAtMs: null,
|
|
}),
|
|
).toBe(
|
|
`match3d:抓大鹅草稿 match3d-session-1:${PLATFORM_TASK_COMPLETION_MESSAGE}:0`,
|
|
);
|
|
});
|
|
|
|
test('hides active dialog when the dismiss key has already been recorded', () => {
|
|
const dialog = {
|
|
key: 'puzzle',
|
|
source: '拼图草稿 puzzle-session-1',
|
|
message: '素材生成失败。',
|
|
};
|
|
const dismissKey = buildPlatformErrorDialogDismissKey(dialog);
|
|
|
|
expect(
|
|
resolveActivePlatformDialog(
|
|
dialog,
|
|
dismissKey,
|
|
buildPlatformErrorDialogDismissKey,
|
|
),
|
|
).toBeNull();
|
|
expect(
|
|
resolveActivePlatformDialog(
|
|
dialog,
|
|
'other-dismiss-key',
|
|
buildPlatformErrorDialogDismissKey,
|
|
),
|
|
).toBe(dialog);
|
|
});
|
|
});
|