feat: add direct edit preview APIs
This commit is contained in:
61
test/workbench-edit-api.js
Normal file
61
test/workbench-edit-api.js
Normal file
@@ -0,0 +1,61 @@
|
||||
'use strict';
|
||||
|
||||
const assert = require('assert/strict');
|
||||
const fs = require('fs');
|
||||
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 workspace = fs.mkdtempSync(path.join(os.tmpdir(), 'workbench-edit-api-'));
|
||||
const input = {
|
||||
areaId: 'edit-api-test',
|
||||
osmFile: path.join(workspace, 'source.osm'),
|
||||
outDir: path.join(workspace, 'outputs', 'native-road'),
|
||||
stagingDir: path.join(workspace, 'outputs', '_pipeline'),
|
||||
overridesFile: path.join(workspace, 'native-road-overrides.json'),
|
||||
trafficSignalsFile: path.join(workspace, 'native-traffic-signals.json'),
|
||||
options: { edgeLines: false, junctionTemplates: { enabled: false, references: [] } },
|
||||
};
|
||||
fs.copyFileSync(path.join(__dirname, 'fixtures', 'fengshu-er-road.osm'), input.osmFile);
|
||||
fs.writeFileSync(input.overridesFile, `${JSON.stringify({ schema: 'native-road-overrides/v1', overrides: [] })}\n`);
|
||||
fs.writeFileSync(
|
||||
input.trafficSignalsFile,
|
||||
`${JSON.stringify({ schema: 'native-traffic-signals/v1', provenance: 'empty', assemblies: { type: 'FeatureCollection', features: [] } })}\n`,
|
||||
);
|
||||
const initialized = ensureRevisionStore(workspace, input.options);
|
||||
const area = compileInput({
|
||||
...input,
|
||||
areaConfigSnapshotFile: initialized.paths.activeAreaConfig,
|
||||
editsFile: initialized.paths.activeEdits,
|
||||
}).area;
|
||||
|
||||
const state = editState(area);
|
||||
assert.equal(state.active, true);
|
||||
assert.equal(state.documentVersion, 0);
|
||||
assert.equal(state.handles.schema, 'road-edit-handles/v1');
|
||||
assert.equal(state.activeRevisionId, 'rev-0001');
|
||||
|
||||
const trackedFiles = [
|
||||
initialized.paths.activeEdits,
|
||||
initialized.paths.activeState,
|
||||
initialized.paths.activeAreaConfig,
|
||||
].map((file) => ({
|
||||
file,
|
||||
bytes: fs.readFileSync(file),
|
||||
mtimeMs: fs.statSync(file).mtimeMs,
|
||||
}));
|
||||
const preview = editPreview(area, { previewSeq: 17, document: state.document });
|
||||
assert.equal(preview.ok, true);
|
||||
assert.equal(preview.previewSeq, 17);
|
||||
assert.equal(preview.degraded, false);
|
||||
assert.equal(preview.handles.schema, 'road-edit-handles/v1');
|
||||
assert.ok(preview.layers.roadSurface);
|
||||
for (const tracked of trackedFiles) {
|
||||
assert.deepEqual(fs.readFileSync(tracked.file), tracked.bytes, `${tracked.file} bytes unchanged by preview`);
|
||||
assert.equal(fs.statSync(tracked.file).mtimeMs, tracked.mtimeMs, `${tracked.file} mtime unchanged by preview`);
|
||||
}
|
||||
|
||||
fs.rmSync(workspace, { recursive: true, force: true });
|
||||
console.log('workbench edit API tests passed');
|
||||
Reference in New Issue
Block a user