Files
edgeever/tests/note-id-copy.test.ts
T

38 lines
1.9 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { readFileSync } from "node:fs";
const readSource = (path: string) => readFileSync(new URL(path, import.meta.url), "utf8");
const webEditorSource = readSource("../apps/web/src/components/EditorPane.tsx");
const webMemoListSource = readSource("../apps/web/src/components/MemoListPane.tsx");
const webCopyNoticeSource = readSource("../apps/web/src/components/ClipboardCopyNotice.tsx");
const androidDetailSource = readSource("../apps/mobile/src/screens/WorkspaceMemoDetail.tsx");
const iosDetailSource = readSource("../apps/ios/EdgeEver/Features/Workspace/MemoDetailView.swift");
describe("copy current note ID", () => {
test("copies the raw memo ID from the desktop and web note menu", () => {
expect(webEditorSource).toContain("copyTextToClipboard(memo.id)");
expect(webEditorSource).toContain('"editor.copyNoteId"');
});
test("renders copy feedback at the page root so panes cannot clip it", () => {
expect(webMemoListSource).toContain("<ClipboardCopyNotice");
expect(webEditorSource).toContain("<ClipboardCopyNotice");
expect(webCopyNoticeSource).toContain("createPortal(");
expect(webCopyNoticeSource).toContain("document.body");
});
test("copies the raw memo ID from both native mobile clients", () => {
expect(androidDetailSource).toContain("Clipboard.setStringAsync(memo.id)");
expect(androidDetailSource).toContain('label={canCopyMemoId ? "复制笔记 ID"');
expect(iosDetailSource).toContain("UIPasteboard.general.string = memo.id");
expect(iosDetailSource).toContain('env.preferences.t("复制笔记 ID", en: "Copy note ID")');
});
test("does not present temporary local IDs as agent-readable IDs", () => {
expect(webEditorSource).toContain("disabled={isLocalMemoId(memo.id)}");
expect(androidDetailSource).toContain('!memo.id.startsWith("local:")');
expect(iosDetailSource).toContain('id.hasPrefix("local:") || id.hasPrefix("local_")');
});
});