53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
/**
|
||
* InMemoryDoc-Helper – Netzwerkfreie YjsDocument-Fabrik für Tests.
|
||
*
|
||
* YjsDocument läuft bereits komplett In-Memory (Y.Doc ohne Provider);
|
||
* dieser Wrapper bietet bequemes Seeding und Reset für isolierte Tests.
|
||
* Genutzt ab A3 (Tool-Workflow-Tests) und A2b (CADDocument-Tests).
|
||
*/
|
||
import { YjsDocument } from '../../src/crdt/YjsDocument';
|
||
import type { CADElement } from '../../src/types/cad.types';
|
||
|
||
export interface SeededDoc {
|
||
ydoc: YjsDocument;
|
||
/** Fügt Elemente in EINER Transaktion hinzu (1 Undo-Schritt). */
|
||
addAll(elements: CADElement[]): void;
|
||
/** Entfernt alle Elemente/Layer-Inhalte (Dokument bleibt verwendbar). */
|
||
clear(): void;
|
||
}
|
||
|
||
/** Erzeugt ein frisches, leeres Test-Dokument. */
|
||
export function createInMemoryDoc(): SeededDoc {
|
||
const ydoc = new YjsDocument();
|
||
return {
|
||
ydoc,
|
||
addAll(elements) {
|
||
ydoc.doc.transact(() => {
|
||
for (const el of elements) ydoc.data.elements.set(el.id, el);
|
||
});
|
||
},
|
||
clear() {
|
||
ydoc.doc.transact(() => {
|
||
for (const id of Array.from(ydoc.data.elements.keys())) {
|
||
ydoc.data.elements.delete(id);
|
||
}
|
||
});
|
||
},
|
||
};
|
||
}
|
||
|
||
/** Basis-CADLayer für Tests. */
|
||
export function makeTestLayer(id = 'layer-1', name = 'Test-Layer') {
|
||
return {
|
||
id,
|
||
name,
|
||
visible: true,
|
||
locked: false,
|
||
color: '#ffffff',
|
||
lineType: 'solid',
|
||
transparency: 0,
|
||
sortOrder: 0,
|
||
parentId: null,
|
||
};
|
||
}
|