/** * @vitest-environment jsdom */ import JSZip from 'jszip' import { describe, expect, it, vi } from 'vitest' import { openSimPptxViewer, SIM_PPTX_LIST_OPTIONS } from '@/lib/pptx-renderer/sim-pptx-viewer' async function createMinimalPptx(): Promise { const zip = new JSZip() zip.file('[Content_Types].xml', '') zip.file( 'ppt/presentation.xml', ` ` ) zip.file( 'ppt/_rels/presentation.xml.rels', ` ` ) zip.file( 'ppt/slides/slide1.xml', ` ` ) zip.file('ppt/slides/_rels/slide1.xml.rels', '') return zip.generateAsync({ type: 'arraybuffer' }) } describe('openSimPptxViewer', () => { it('renders a minimal PPTX and cleans up the container on destroy', async () => { const container = document.createElement('div') Object.defineProperty(container, 'clientWidth', { configurable: true, value: 960 }) const onRenderComplete = vi.fn() const handle = await openSimPptxViewer({ buffer: await createMinimalPptx(), container, onRenderComplete, }) expect(onRenderComplete).toHaveBeenCalled() expect(container.querySelector('[data-slide-index="0"]')).not.toBeNull() handle.destroy() expect(container.innerHTML).toBe('') }) it('uses windowed list rendering defaults for large decks', () => { expect(SIM_PPTX_LIST_OPTIONS).toMatchObject({ windowed: true, batchSize: 8, initialSlides: 4, }) }) })