Files
mnote/scripts/wolai-export-importer.test.js

123 lines
4.2 KiB
JavaScript

#!/usr/bin/env node
"use strict";
const assert = require("node:assert/strict");
const fs = require("node:fs");
const os = require("node:os");
const path = require("node:path");
const { importWolaiExport } = require("./lib/wolai-export-importer");
function writeUtf8(filePath, content) {
fs.mkdirSync(path.dirname(filePath), { recursive: true });
fs.writeFileSync(filePath, content, "utf8");
}
function makeTempDir() {
return fs.mkdtempSync(path.join(os.tmpdir(), "mnote-wolai-import-smoke-"));
}
function runImportFixture() {
const workspace = makeTempDir();
const sourceRoot = path.join(workspace, "source");
const targetRoot = path.join(workspace, "target");
const nbsp = "\u00A0";
const assetName = `12849总结报告-WB17061405${nbsp}肖建洋_qGouWUbkM_.doc`;
writeUtf8(
path.join(sourceRoot, "liaibo的个人空间.md"),
[
"# liaibo的个人空间",
"",
"- [项目](pages/项目_abcd1234.md)",
"",
].join("\n"),
);
writeUtf8(
path.join(sourceRoot, "pages", "项目_abcd1234.md"),
[
"# 项目",
"",
"![](../image/diagram one.png)",
`[报告](../file/${assetName} "12849总结报告-WB17061405${nbsp}肖建洋.doc")`,
"[/home/fc/import/markdown/abc/resources/s0040-4020(01)88151-5.pdf](/home/fc/import/markdown/abc/resources/s0040-4020\\(01\\)88151-5.pdf)",
"[旧resources附件](../../resources/林可函数.xlsx \"林可函数.xlsx\")",
"",
].join("\n"),
);
writeUtf8(path.join(sourceRoot, "image", "diagram one.png"), "png-body\n");
writeUtf8(path.join(sourceRoot, "file", assetName), "doc-body\n");
const result = importWolaiExport({
sourceRoot,
targetRoot,
ownerId: "liaibo",
workspaceId: "local-ws:liaibo:my-space",
copyMode: "copy",
});
return {
result,
targetRoot,
assetName,
childMarkdownPath: path.join(
targetRoot,
"liaibo的个人空间",
"项目",
"项目.md",
),
};
}
function assertWolaiExportImport() {
const { result, targetRoot, assetName, childMarkdownPath } = runImportFixture();
const childMarkdown = fs.readFileSync(childMarkdownPath, "utf8");
const workspaceMetadata = JSON.parse(
fs.readFileSync(path.join(targetRoot, ".mnote", "workspace.json"), "utf8"),
);
const importMetadata = JSON.parse(
fs.readFileSync(path.join(targetRoot, ".mnote", "wolai-import.json"), "utf8"),
);
const localIndexSettings = JSON.parse(
fs.readFileSync(path.join(targetRoot, ".mnote", "index", "local-index-settings.json"), "utf8"),
);
assert.equal(result.ok, true);
assert.equal(result.pages.imported, 2);
assert.equal(result.assets.copied, 2);
assert.equal(result.links.rewritten, 5);
assert.equal(result.links.missing, 2);
assert.equal(workspaceMetadata.ownerId, "liaibo");
assert.equal(importMetadata.links.missingSamples.length, 2);
assert.deepEqual(localIndexSettings.includePaths, ["."], "导入后默认应索引整个 local-first 工作区");
assert.equal(localIndexSettings.runOnChange, false);
assert.match(childMarkdown, /\.assets\/image\/diagram one\.png/);
assert.match(childMarkdown, /\.assets\/file\/12849总结报告-WB17061405/);
assert.doesNotMatch(childMarkdown, /Wolai资源/);
assert.doesNotMatch(childMarkdown, /\]\(\.\.\/file\//);
assert.doesNotMatch(childMarkdown, /\/home\/fc\/import/);
assert.doesNotMatch(childMarkdown, /resources\/林可函数\.xlsx/);
assert.match(childMarkdown, /#wolai-missing-resource/);
assert.equal(
fs.readFileSync(
path.join(targetRoot, "liaibo的个人空间", "项目", ".assets", "image", "diagram one.png"),
"utf8",
),
"png-body\n",
);
assert.equal(
fs.readFileSync(
path.join(targetRoot, "liaibo的个人空间", "项目", ".assets", "file", assetName),
"utf8",
),
"doc-body\n",
);
const uploadedAssets = JSON.parse(
fs.readFileSync(path.join(targetRoot, ".mnote", "uploaded-assets.json"), "utf8"),
);
assert.ok(uploadedAssets.entries["liaibo的个人空间/项目/.assets/image/diagram one.png"]);
assert.ok(uploadedAssets.entries[`liaibo的个人空间/项目/.assets/file/${assetName}`]);
}
assertWolaiExportImport();
console.log("wolai-export-importer.test: ok");