feat: restore Wolai workspace navigation and assets
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#!/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");
|
||||
Reference in New Issue
Block a user