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); }); });