Files
Genarrative/apps/ai-game-creator-shell/tests/uiDesignStateStore.test.ts
T
k88936 086ebd0248
Project CI / Repository checks (pull_request) Successful in 2m52s
Project CI / Frontend tests (pull_request) Successful in 3m20s
Project CI / Backend tests (pull_request) Successful in 3m59s
Project CI / Native shell tests (pull_request) Successful in 14m50s
重构 UI 编辑器状态存储类型
- 将 `UiDesignStateStore` 重命名为 `IUiDesignStateStore`,统一命名规范。
- 替换所有引用,移除 `mockUiDesignStateStore`,改用 `uiDesignStateStore`。
- 更新相关测试和技术文档以匹配重命名与实现更改。
2026-08-20 16:00:09 +08:00

74 lines
2.1 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
vi.mock('@tauri-apps/api/core', () => ({ invoke: vi.fn() }));
import { invoke } from '@tauri-apps/api/core';
import {
createTauriUiDesignStateStore,
uiDesignStateStore,
} from '../src/features/ui-editor/uiDesignStateStore';
describe('UI 设计 State mock store', () => {
it('按资源保留快照并拒绝过期 revision', async () => {
const first = await uiDesignStateStore.load('ui-1');
first.state.ui_trees.push({} as never);
await expect(
uiDesignStateStore.save('ui-1', first.revision, first.state),
).resolves.toMatchObject({
status: 'saved',
revision: 1,
});
await expect(uiDesignStateStore.load('ui-1')).resolves.toMatchObject({
revision: 1,
state: { ui_trees: [{}] },
});
await expect(
uiDesignStateStore.save('ui-1', first.revision, first.state),
).resolves.toMatchObject({ status: 'conflict', current: { revision: 1 } });
});
it('通过专用 Tauri 命令提交项目身份和资源 CAS revision', async () => {
const store = createTauriUiDesignStateStore('/tmp/project', 'project-1');
const state = {
ui_trees: [],
ui_design_images: {},
sprite_assets: {},
font_assets: {},
};
vi.mocked(invoke).mockResolvedValueOnce({ revision: 3, state });
await expect(store.load('asset-1')).resolves.toEqual({
revision: 3,
state,
});
expect(invoke).toHaveBeenLastCalledWith('load_ui_design_state', {
input: {
projectPath: '/tmp/project',
expectedProjectId: 'project-1',
assetId: 'asset-1',
},
});
vi.mocked(invoke).mockResolvedValueOnce({
status: 'saved',
state,
revision: 4,
committedProjectRevision: 18,
});
await expect(store.save('asset-1', 3, state)).resolves.toMatchObject({
status: 'saved',
revision: 4,
});
expect(invoke).toHaveBeenLastCalledWith('save_ui_design_state', {
input: {
projectPath: '/tmp/project',
expectedProjectId: 'project-1',
assetId: 'asset-1',
expectedRevision: 3,
state,
},
});
});
});