46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
/**
|
||
* BlockThumbnail Tests (Task F3) – SVG-Thumbnail aus elementToPrimitives
|
||
*/
|
||
import { describe, it, expect } from 'vitest';
|
||
import { generateBlockSvg, primitivesToSvg } from '../src/utils/blockThumbnail';
|
||
import { elementToPrimitives } from '../src/render/pixi/elementDrawers';
|
||
import type { CADElement } from '../src/types/cad.types';
|
||
|
||
describe('blockThumbnail (F3)', () => {
|
||
const chair: CADElement = {
|
||
id: 'c1',
|
||
type: 'chair',
|
||
layerId: 'l0',
|
||
x: 100,
|
||
y: 200,
|
||
width: 40,
|
||
height: 40,
|
||
properties: {},
|
||
} as CADElement;
|
||
|
||
it('erzeugt SVG mit viewBox aus Element-BBox', () => {
|
||
const svg = generateBlockSvg([chair]);
|
||
expect(svg).toContain('<svg');
|
||
expect(svg).toContain('viewBox');
|
||
});
|
||
|
||
it('konvertiert rect-Primitive in SVG-rect', () => {
|
||
const prims = elementToPrimitives(chair);
|
||
expect(prims.length).toBeGreaterThan(0);
|
||
const svg = primitivesToSvg(prims);
|
||
expect(svg).toContain('<rect');
|
||
});
|
||
|
||
it('liefert leeren String für leere Auswahl', () => {
|
||
expect(generateBlockSvg([])).toBe('');
|
||
});
|
||
|
||
it('BBox umfasst mehrere Elemente korrekt', () => {
|
||
const a: CADElement = { ...chair, id: 'a', x: 0, y: 0 };
|
||
const b: CADElement = { ...chair, id: 'b', x: 500, y: 300 };
|
||
const svg = generateBlockSvg([a, b]);
|
||
// chair-Drawer erzeugt rect-Zentrum bei (el.x - w/2) → BBox -40..500/-40..300 + PAD 10
|
||
expect(svg).toContain('viewBox="-50 -50 560 360"');
|
||
});
|
||
});
|