import { CardPosterLayoutEngine, calculatePosterCanvasDimensions, calculatePosterElementBoxes, PosterLayoutOptions, PosterElementBox, } from '../../../src/modules/card/service/poster-layout'; describe('Point 54: 商务展会多语言电子邀请海报轻量级排版引擎', () => { let engine: CardPosterLayoutEngine; beforeEach(() => { engine = new CardPosterLayoutEngine(); }); describe('1. calculatePosterCanvasDimensions (画布尺寸比例计算)', () => { it('9:16 比例应计算为标准 1080x1920 尺寸', () => { const dim = calculatePosterCanvasDimensions('story_9_16'); expect(dim.width).toBe(1080); expect(dim.height).toBe(1920); expect(dim.aspectRatio).toBe('9:16'); }); it('4:5 比例应计算为 1080x1350 尺寸', () => { const dim = calculatePosterCanvasDimensions('feed_4_5'); expect(dim.width).toBe(1080); expect(dim.height).toBe(1350); expect(dim.aspectRatio).toBe('4:5'); }); }); describe('2. calculatePosterElementBoxes (多元素布局坐标与安全区排布)', () => { const mockOptions: PosterLayoutOptions = { aspectRatio: 'story_9_16', cardName: 'Alex Zheng', title: 'VP of International BD', company: 'OmniCard Global AI Ltd.', eventName: 'GITEX Global 2026 Dubai', boothNumber: 'Hall 4, Stand B-28', qrCodeSize: 240, }; it('应计算包含头部标头、人物卡片、展会信息与底部二维码的精准坐标盒', () => { const boxes = calculatePosterElementBoxes(mockOptions); expect(boxes.avatarBox).toBeDefined(); expect(boxes.nameBox).toBeDefined(); expect(boxes.eventBox).toBeDefined(); expect(boxes.qrBox).toBeDefined(); // 二维码位于海报底部且居中 expect(boxes.qrBox.width).toBe(240); expect(boxes.qrBox.height).toBe(240); expect(boxes.qrBox.x).toBe((1080 - 240) / 2); expect(boxes.qrBox.y).toBeGreaterThan(1300); // 靠近下半部分 }); it('文字过长时应自动计算截断与文本适应预警', () => { const longOptions: PosterLayoutOptions = { ...mockOptions, title: 'Very Long Title Exceeding Single Line Width That Needs Smart Handling In Print', }; const boxes = calculatePosterElementBoxes(longOptions); expect(boxes.titleBox.isMultiLine).toBe(true); }); }); describe('3. CardPosterLayoutEngine 生成完整布局方案', () => { it('应输出可直接供 Canvas 或 SVG 渲染的完整海报元数据清单', () => { const manifest = engine.generateLayoutManifest({ aspectRatio: 'story_9_16', cardName: 'Tariq Al-Mansoor', title: 'Middle East Regional Director', company: 'Saudi Digital Tech', eventName: 'LEAP 2026 Riyadh', boothNumber: 'Hall 2, C-15', }); expect(manifest.canvas.width).toBe(1080); expect(manifest.themeColor).toBe('#0B5CFF'); // 瑞士国际主义单一钴蓝主色 expect(manifest.elements.length).toBeGreaterThanOrEqual(4); }); }); });