import { describe, expect, it } from 'vitest' import { extractEmbeddedFileRef, extractEmbeddedFileRefs, } from '@/lib/uploads/utils/embedded-image-ref' const KEY = 'workspace/W1/1700000000000-deadbeefdeadbeef-photo.png' const ENCODED = encodeURIComponent(KEY) describe('extractEmbeddedFileRef', () => { it('parses serve-url embeds (encoded, raw, and s3/blob prefixed) to the workspace key', () => { expect(extractEmbeddedFileRef(`/api/files/serve/${ENCODED}?context=workspace`)).toEqual({ key: KEY, }) expect(extractEmbeddedFileRef(`/api/files/serve/s3/${ENCODED}`)).toEqual({ key: KEY }) expect(extractEmbeddedFileRef(`/api/files/serve/blob/${ENCODED}`)).toEqual({ key: KEY }) }) it('parses view-url and in-app-path embeds to the file id', () => { expect(extractEmbeddedFileRef('/api/files/view/wf_YwDXi8eWOkTxn0sbgChlB')).toEqual({ fileId: 'wf_YwDXi8eWOkTxn0sbgChlB', }) expect(extractEmbeddedFileRef('/workspace/W1/files/wf_abc')).toEqual({ fileId: 'wf_abc' }) }) it('returns null for external, data, and non-workspace serve urls', () => { expect(extractEmbeddedFileRef('https://cdn.example.com/a.png')).toBeNull() expect(extractEmbeddedFileRef('data:image/png;base64,AAAA')).toBeNull() expect(extractEmbeddedFileRef('/api/files/serve/profile-pictures%2Fu1%2Favatar.png')).toBeNull() }) }) describe('extractEmbeddedFileRefs', () => { it('collects de-duplicated keys and ids from a document via the shared parser', () => { const content = ` ![a](/api/files/serve/${ENCODED}?context=workspace) ![b](/api/files/view/wf_abc) ![c](/workspace/W1/files/4bdaf6c4-072e-464e-891d-b6af3b5fe2cc) ![dup](/api/files/serve/s3/${ENCODED}) ![ext](https://cdn.example.com/x.png) ![pub](/api/files/serve/profile-pictures%2Fu1%2Favatar.png) ` const { keys, ids } = extractEmbeddedFileRefs(content) expect(keys).toEqual([KEY]) expect(ids.sort()).toEqual(['4bdaf6c4-072e-464e-891d-b6af3b5fe2cc', 'wf_abc'].sort()) }) it('caps total references (keys + ids) at 50 combined', () => { const ids = Array.from( { length: 40 }, (_, i) => `/api/files/view/wf_${String(i).padStart(6, '0')}` ) const keys = Array.from( { length: 40 }, (_, i) => `/api/files/serve/${encodeURIComponent(`workspace/W1/k${i}.png`)}` ) const { keys: k, ids: d } = extractEmbeddedFileRefs([...ids, ...keys].join(' ')) expect(k.length + d.length).toBe(50) }) })