feat: persist direct edits with revision rebase

This commit is contained in:
2026-08-27 12:52:40 +08:00
parent 41c314fc61
commit f3f763f94c
2 changed files with 122 additions and 6 deletions

View File

@@ -6,7 +6,7 @@ const os = require('os');
const path = require('path');
const { compileInput } = require('../src/compile/compiler');
const { ensureRevisionStore } = require('../src/compile/road-revisions');
const { editState, editPreview } = require('../workbench/server');
const { editPreview, editState, rebaseEdits, saveEdits } = require('../workbench/server');
const workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'workbench-edit-api-'));
const input = {
@@ -57,5 +57,20 @@ for (const tracked of trackedFiles) {
assert.equal(fs.statSync(tracked.file).mtimeMs, tracked.mtimeMs, `${tracked.file} mtime unchanged by preview`);
}
const saved = saveEdits(area, { expectedDocumentVersion: 0, document: state.document });
assert.equal(saved.documentVersion, 1);
const beforeConflict = fs.readFileSync(initialized.paths.activeEdits);
assert.throws(
() => saveEdits(area, { expectedDocumentVersion: 0, document: state.document }),
(error) => error.statusCode === 409 && error.current.documentVersion === 1,
);
assert.deepEqual(fs.readFileSync(initialized.paths.activeEdits), beforeConflict, '409 does not write the document');
const checkpoint = require('../src/compile/road-revisions').createCheckpoint(workspace, 'Preview checkpoint');
assert.equal(checkpoint.manifest.id, 'rev-0002');
const rebased = rebaseEdits(area, checkpoint.manifest.id);
assert.equal(rebased.counts.exact, 0);
assert.deepEqual(rebased.constraints, []);
fs.rmSync(workspace, { recursive: true, force: true });
console.log('workbench edit API tests passed');