P2-01: add SQLite WASM OPFS project worker

This commit is contained in:
2026-08-02 04:45:57 -04:00
parent bdaea21574
commit cc7cfc6153
15 changed files with 385 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { createMockFacade } from '../src/facade/mockFacade'
import { PROJECT_SCHEMA_MIGRATIONS, PROJECT_SCHEMA_SQL, PROJECT_SCHEMA_VERSION } from '../src/facade/projectSchema'
test('facade exposes a stable initial document projection', () => {
const facade = createMockFacade()
@@ -11,6 +12,13 @@ test('facade exposes a stable initial document projection', () => {
assert.equal(facade.gui.workbench.getActive(), 'Part Design')
})
test('project schema is versioned and covers the FreeCAD document graph', () => {
assert.equal(PROJECT_SCHEMA_VERSION, 1)
assert.equal(PROJECT_SCHEMA_MIGRATIONS[0].version, PROJECT_SCHEMA_VERSION)
for (const table of ['projects', 'documents', 'objects', 'object_properties', 'dependencies', 'transactions', 'resources']) assert.match(PROJECT_SCHEMA_SQL, new RegExp(`CREATE TABLE IF NOT EXISTS ${table}`))
assert.match(PROJECT_SCHEMA_SQL, /CREATE INDEX IF NOT EXISTS objects_document_ordinal/)
})
test('workbench and selection changes are event driven', () => {
const facade = createMockFacade()
const events: string[] = []
@@ -72,6 +80,15 @@ test('document mutations use the facade history boundary', () => {
assert.equal(facade.app.document.getActive().label, 'Untitled document')
})
test('project persistence remains behind the facade contract', async () => {
const facade = createMockFacade()
const saved = await facade.project.save()
assert.equal(saved.documentId, 'doc-pump-housing')
const loaded = await facade.project.load('doc-pump-housing')
assert.equal(loaded?.label, 'Pump Housing')
assert.equal(facade.project.capabilities().mode, 'sqlite-memory')
})
test('Part Design feature tasks commit a document object and remain undoable', () => {
const facade = createMockFacade()
const before = facade.app.document.getActive()