123 lines
4.2 KiB
JavaScript
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"),
|
|
[
|
|
"# 项目",
|
|
"",
|
|
"",
|
|
`[报告](../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");
|