Files
web-cad/frontend/tests/helpers.smoke.test.ts
2026-08-26 21:04:17 +02:00

75 lines
2.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 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);
});
});