/** * 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); }); });