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