import test from "node:test"; import assert from "node:assert/strict"; import { ButtonComponent } from "obsidian"; import { RemarkableBrowserModal } from "../src/ui/browser-modal"; import { RmapiNode } from "../src/types"; function createDocument(name: string): RmapiNode { return { id: `id-${name}`, name, type: "DocumentType", version: 1, modifiedClient: "2026-05-31T10:00:00Z", currentPage: 0, parent: "", tags: [], starred: false, }; } function createPlugin(nodes: RmapiNode[]) { const calls: any[] = []; const plugin: any = { app: {}, rmapi: { list: async () => nodes, }, downloader: { downloadDocument: async (...args: any[]) => { calls.push(args); }, }, }; return { calls, plugin }; } test("RemarkableBrowserModal creates import and handwriting buttons for documents", async () => { ButtonComponent.instances = []; const doc = createDocument("Meeting Notes"); const { calls, plugin } = createPlugin([doc]); const modal = new RemarkableBrowserModal(plugin); modal.onOpen(); await new Promise((resolve) => setImmediate(resolve)); const importButton = ButtonComponent.instances.find((button) => button.buttonEl.text === "Import"); const markdownButton = ButtonComponent.instances.find((button) => button.buttonEl.text === "Handwriting to Markdown"); assert.ok(importButton); assert.ok(markdownButton); await importButton.click(); await markdownButton.click(); assert.deepEqual(calls, [ [{ node: doc, remotePath: "/Meeting Notes" }, { convertToMd: false, forceDownload: true }], [{ node: doc, remotePath: "/Meeting Notes" }, { convertToMd: true, forceDownload: true }], ]); });