b49bf9c984
将旧布局上限统一提升至2MiB并接入revision CAS保存 新增画布图层、生成对话框和迁移状态结构化存储 新增migration operator保护的回填、激活和回滚脚本 新增历史图片映射及音频资源恢复的定向dry-run/apply流程 补齐前端保存队列、OpenAPI、Bindings、发布归档与回归测试
103 lines
2.8 KiB
TypeScript
103 lines
2.8 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
buildSpacetimeCallArgs,
|
|
encodeSpacetimeCliOption,
|
|
parseProcedureResult,
|
|
} from './spacetime-migration-common.mjs';
|
|
|
|
describe('SpacetimeDB CLI SATS option encoding', () => {
|
|
it('keeps absent options null and wraps present values as Some', () => {
|
|
expect(encodeSpacetimeCliOption(null)).toBeNull();
|
|
expect(encodeSpacetimeCliOption(undefined)).toBeNull();
|
|
expect(encodeSpacetimeCliOption('job-2')).toEqual([0, 'job-2']);
|
|
expect(encodeSpacetimeCliOption(123)).toEqual([0, 123]);
|
|
});
|
|
|
|
it('serializes non-empty maintenance cursors in the CLI procedure input', () => {
|
|
const args = buildSpacetimeCallArgs(
|
|
{
|
|
database: 'genarrative-prod',
|
|
passthrough: [],
|
|
serverUrl: 'http://127.0.0.1:3311',
|
|
},
|
|
'compact_external_generation_job_payloads_and_return',
|
|
{
|
|
dry_run: true,
|
|
limit: 1,
|
|
cursor_job_id: encodeSpacetimeCliOption('job-2'),
|
|
completed_before_micros: encodeSpacetimeCliOption(123),
|
|
},
|
|
);
|
|
|
|
const input = JSON.parse(args.at(-2) ?? 'null');
|
|
expect(input.cursor_job_id).toEqual([0, 'job-2']);
|
|
expect(input.completed_before_micros).toEqual([0, 123]);
|
|
});
|
|
|
|
it('normalizes editor canvas migration procedure results', () => {
|
|
const result = parseProcedureResult(
|
|
JSON.stringify([
|
|
true,
|
|
[
|
|
0,
|
|
[
|
|
'canvas-1',
|
|
'project-1',
|
|
'source-hash',
|
|
'structured-hash',
|
|
7,
|
|
2,
|
|
1,
|
|
'resource-hash',
|
|
1,
|
|
'backfilled',
|
|
7,
|
|
],
|
|
],
|
|
[1],
|
|
]),
|
|
'backfill_editor_canvas_layout_and_return',
|
|
);
|
|
|
|
expect(result).toEqual({
|
|
ok: true,
|
|
migration: {
|
|
canvas_id: 'canvas-1',
|
|
project_id: 'project-1',
|
|
source_layout_sha256: 'source-hash',
|
|
structured_layout_sha256: 'structured-hash',
|
|
verified_revision: 7,
|
|
layer_count: 2,
|
|
dialog_count: 1,
|
|
resource_refs_sha256: 'resource-hash',
|
|
migration_version: 1,
|
|
status: 'backfilled',
|
|
revision: 7,
|
|
},
|
|
error_message: null,
|
|
});
|
|
});
|
|
|
|
it('normalizes editor canvas resource repair procedure results', () => {
|
|
const result = parseProcedureResult(
|
|
JSON.stringify([true, [0, [true, false, 2, 0, 0, 0, 7]], [1]]),
|
|
'repair_editor_canvas_resources_and_return',
|
|
);
|
|
|
|
expect(result).toEqual({
|
|
ok: true,
|
|
repair: {
|
|
dry_run: true,
|
|
already_repaired: false,
|
|
matched_layer_count: 2,
|
|
remapped_layer_count: 0,
|
|
restored_resource_count: 0,
|
|
removed_source_resource_id_count: 0,
|
|
revision: 7,
|
|
},
|
|
error_message: null,
|
|
});
|
|
});
|
|
});
|