41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { mkdtemp, readFile, readdir } from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import test from "node:test";
|
|
|
|
import { localizeMarkdownMedia } from "./media-localizer.js";
|
|
|
|
const PNG_1X1_BASE64 =
|
|
"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO7Z0ioAAAAASUVORK5CYII=";
|
|
|
|
test("localizeMarkdownMedia saves embedded base64 images into imgs directory", async () => {
|
|
const tempDir = await mkdtemp(path.join(os.tmpdir(), "url-to-markdown-media-"));
|
|
const dataUri = `data:image/png;base64,${PNG_1X1_BASE64}`;
|
|
const markdown = [
|
|
"---",
|
|
`coverImage: "${dataUri}"`,
|
|
"---",
|
|
"",
|
|
"# Embedded Image",
|
|
"",
|
|
``,
|
|
"",
|
|
].join("\n");
|
|
|
|
const result = await localizeMarkdownMedia(markdown, {
|
|
markdownPath: path.join(tempDir, "post.md"),
|
|
});
|
|
|
|
assert.equal(result.downloadedImages, 1);
|
|
assert.equal(result.downloadedVideos, 0);
|
|
assert.match(result.markdown, /coverImage: "imgs\/img-001\.png"/);
|
|
assert.match(result.markdown, /!\[inline\]\(imgs\/img-001\.png\)/);
|
|
|
|
const files = await readdir(path.join(tempDir, "imgs"));
|
|
assert.deepEqual(files, ["img-001.png"]);
|
|
|
|
const bytes = await readFile(path.join(tempDir, "imgs", "img-001.png"));
|
|
assert.equal(bytes.length, Buffer.from(PNG_1X1_BASE64, "base64").length);
|
|
});
|