mirror of
https://github.com/JimLiu/baoyu-skills.git
synced 2026-07-12 05:51:44 +08:00
59 lines
2.7 KiB
TypeScript
59 lines
2.7 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import test from "node:test";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
const articleScript = fs.readFileSync(path.join(__dirname, "wechat-article.ts"), "utf8");
|
|
|
|
test("browser article paste uses CDP-targeted paste instead of global macOS keystrokes", () => {
|
|
assert.equal(
|
|
articleScript.includes('tell application "System Events" to keystroke "v" using command down'),
|
|
false,
|
|
);
|
|
});
|
|
|
|
test("browser article publishing verifies the title before saving drafts", () => {
|
|
assert.match(articleScript, /verifyTitleUnchangedBeforeSave/);
|
|
assert.match(articleScript, /Title was modified during paste/);
|
|
});
|
|
|
|
test("browser article body insertion does not paste HTML through the active form field", () => {
|
|
assert.match(articleScript, /insertHtmlIntoEditorFromFile/);
|
|
assert.doesNotMatch(articleScript, /await copyHtmlFromBrowser\(cdp, effectiveHtmlFile, contentImages\)/);
|
|
});
|
|
|
|
test("browser article body operations target the body ProseMirror, not the title ProseMirror", () => {
|
|
assert.match(articleScript, /BODY_EDITOR_SELECTOR = '\.rich_media_content \.ProseMirror'/);
|
|
assert.doesNotMatch(articleScript, /clickElement\(session, '\\.ProseMirror'\)/);
|
|
});
|
|
|
|
test("browser article reuses the selected account Chrome profile before launching", () => {
|
|
assert.match(articleScript, /await findExistingChromeDebugPort\(profileDir\)/);
|
|
});
|
|
|
|
test("browser article inserts inline images through WeChat local upload instead of clipboard paste", () => {
|
|
assert.match(articleScript, /uploadImageThroughFileInput/);
|
|
assert.match(articleScript, /DOM\.setFileInputFiles/);
|
|
assert.doesNotMatch(articleScript, /await copyImageToClipboard\(img\.localPath\)/);
|
|
});
|
|
|
|
test("browser article uploads original images before fallback processing", () => {
|
|
const rawUploadIndex = articleScript.indexOf("await uploadImagePathThroughFileInput(session, absolutePath, beforeCount)");
|
|
const fallbackIndex = articleScript.indexOf("const fallback = await prepareFallbackWechatBodyImageUpload(absolutePath)");
|
|
|
|
assert.notEqual(rawUploadIndex, -1);
|
|
assert.notEqual(fallbackIndex, -1);
|
|
assert.ok(rawUploadIndex < fallbackIndex);
|
|
assert.match(articleScript, /prepareWechatBodyImageUpload/);
|
|
assert.match(articleScript, /Raw image upload failed, retrying with fallback processing/);
|
|
});
|
|
|
|
test("browser article waits for a saved draft appmsgid before reporting success", () => {
|
|
assert.match(articleScript, /waitForDraftSaved/);
|
|
assert.match(articleScript, /appmsgid/);
|
|
assert.doesNotMatch(articleScript, /Waiting for save confirmation/);
|
|
});
|