import assert from 'node:assert/strict'; import test from 'node:test'; import fs from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; import { ensureWorkspaceHtmlThumbnail, workspaceThumbnailRelativePath, } from './mindspace-workspace-thumbnails.mjs'; import { isModernFeedThumbnail } from './mindspace-thumbnails.mjs'; test('workspaceThumbnailRelativePath maps html to sidecar svg', () => { assert.equal(workspaceThumbnailRelativePath('pilates.html'), 'pilates.thumbnail.svg'); assert.equal(workspaceThumbnailRelativePath('public/pilates.html'), 'public/pilates.thumbnail.svg'); }); test('ensureWorkspaceHtmlThumbnail writes sidecar on html save', async () => { const root = await fs.mkdtemp(path.join(os.tmpdir(), 'workspace-thumb-')); const html = ` 普拉提618 `; await fs.writeFile(path.join(root, 'pilates.html'), html, 'utf8'); const svg = await ensureWorkspaceHtmlThumbnail(root, 'pilates.html', html, { title: '普拉提618' }); assert.equal(isModernFeedThumbnail(svg), true); assert.match(svg, /运动|普拉提618/i); await fs.access(path.join(root, 'pilates.thumbnail.svg')); }); test('ensureWorkspaceHtmlThumbnail schedules raster png sidecar', async () => { const root = await fs.mkdtemp(path.join(os.tmpdir(), 'workspace-thumb-png-')); const html = ` PNG sidecar `; await fs.writeFile(path.join(root, 'demo.html'), html, 'utf8'); await ensureWorkspaceHtmlThumbnail(root, 'demo.html', html, { title: 'PNG sidecar' }); await new Promise((resolve) => queueMicrotask(resolve)); await new Promise((resolve) => setImmediate(resolve)); await fs.access(path.join(root, 'demo.thumbnail.png')); });