75 lines
2.8 KiB
TypeScript
75 lines
2.8 KiB
TypeScript
/**
|
||
* Smoke-Tests für die Test-Helfer aus Task A0.
|
||
* Stellt sicher, dass Logger, MockRenderEngine und InMemoryDoc funktionieren,
|
||
* BEVOR spätere Tasks auf ihnen aufbauen.
|
||
*/
|
||
import { describe, it, expect, vi } from 'vitest';
|
||
import { logger, setLogLevel } from '../src/utils/logger';
|
||
import { MockRenderEngine } from './helpers/mockAdapter';
|
||
import { createInMemoryDoc, makeTestLayer } from './helpers/inMemoryDoc';
|
||
import type { CADElement } from '../src/types/cad.types';
|
||
|
||
describe('A0 helpers – logger', () => {
|
||
it('schreibt info im Default-Level in die Testumgebung', () => {
|
||
const spy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
||
setLogLevel('info');
|
||
logger.info('smoke test message');
|
||
expect(spy).toHaveBeenCalledWith('[web-cad]', 'smoke test message');
|
||
spy.mockRestore();
|
||
});
|
||
|
||
it('debug bleibt bei Level info still und erscheint bei debug', () => {
|
||
const spy = vi.spyOn(console, 'log').mockImplementation(() => {});
|
||
setLogLevel('info');
|
||
logger.debug('hidden');
|
||
expect(spy).not.toHaveBeenCalled();
|
||
setLogLevel('debug');
|
||
logger.debug('visible');
|
||
expect(spy).toHaveBeenCalledWith('[web-cad][debug]', 'visible');
|
||
spy.mockRestore();
|
||
});
|
||
});
|
||
|
||
describe('A0 helpers – MockRenderEngine', () => {
|
||
it('protokolliert Aufrufe mit Reihenfolge und Argumenten', () => {
|
||
const mock = new MockRenderEngine();
|
||
mock.render();
|
||
mock.hitTest(10, 20, 5);
|
||
mock.setPreviewElement(null);
|
||
|
||
expect(mock.countCalls('render')).toBe(1);
|
||
expect(mock.countCalls('hitTest')).toBe(1);
|
||
expect(mock.lastArgsOf('hitTest')).toEqual([10, 20, 5]);
|
||
expect(mock.calls.map((c) => c.method)).toEqual(['render', 'hitTest', 'setPreviewElement']);
|
||
});
|
||
|
||
it('liefert konfigurierbare hitTest-Ergebnisse', () => {
|
||
const mock = new MockRenderEngine();
|
||
const el = { id: 'e1', type: 'line' } as unknown as CADElement;
|
||
mock.nextHitTestResult = el;
|
||
expect(mock.hitTest(0, 0)).toBe(el);
|
||
mock.reset();
|
||
expect(mock.hitTest(0, 0)).toBeNull();
|
||
});
|
||
});
|
||
|
||
describe('A0 helpers – createInMemoryDoc', () => {
|
||
it('erstellt netzwerkfreies Dokument mit Seeding', () => {
|
||
const { ydoc, addAll } = createInMemoryDoc();
|
||
ydoc.data.layers.set('layer-1', makeTestLayer() as never);
|
||
const el = { id: 'el1', type: 'rect', layerId: 'layer-1', x: 0, y: 0, width: 1, height: 1, properties: {} } as unknown as CADElement;
|
||
addAll([el]);
|
||
expect(ydoc.getElements().length).toBe(1);
|
||
expect(ydoc.getLayers().length).toBe(1);
|
||
});
|
||
|
||
it('clear entfernt alle Elemente', () => {
|
||
const { ydoc, addAll, clear } = createInMemoryDoc();
|
||
const el = { id: 'el1', type: 'rect', layerId: 'layer-1', x: 0, y: 0, width: 1, height: 1, properties: {} } as unknown as CADElement;
|
||
addAll([el]);
|
||
expect(ydoc.getElements().length).toBe(1);
|
||
clear();
|
||
expect(ydoc.getElements().length).toBe(0);
|
||
});
|
||
});
|