import { strToU8, zipSync } from 'fflate' import { describe, expect, it } from 'vitest' import { extractPptxPages } from './pptx-parser' import { createImagePptx } from '../../../tests/support/pptx-fixture' describe('PPTX image extraction', () => { it('extracts referenced images with slide locators', () => { const pages = extractPptxPages(createImagePptx('Native text', 2)) expect(pages.map((page) => page.pageNumber)).toEqual([1, 2]) expect(pages[0]).toEqual({ pageNumber: 1, content: 'Native text', images: [{ name: 'image1.png', data: new Uint8Array([1, 2, 3]), mimeType: 'image/png' }] }) }) it('follows presentation order and ignores external and unreferenced media', () => { const pages = extractPptxPages(Buffer.from(zipSync({ 'ppt/presentation.xml': strToU8(''), 'ppt/_rels/presentation.xml.rels': strToU8(''), 'ppt/slides/slide1.xml': strToU8('First'), 'ppt/slides/_rels/slide1.xml.rels': strToU8(''), 'ppt/slides/slide2.xml': strToU8('Second'), 'ppt/media/unused.png': new Uint8Array([1]) }))) expect(pages.map(({ pageNumber, content, images }) => ({ pageNumber, content, images }))).toEqual([ { pageNumber: 1, content: 'Second', images: [] }, { pageNumber: 2, content: 'First', images: [] } ]) }) })