Emdash source with visual editor image upload fix

Fixes:
1. media.ts: wrap placeholder generation in try-catch
2. toolbar.ts: check r.ok, display error message in popover
This commit is contained in:
2026-05-03 10:44:54 +07:00
parent 78f81bebb6
commit 2d1be52177
2352 changed files with 662964 additions and 0 deletions

View File

@@ -0,0 +1,43 @@
import { describe, it, expect } from "vitest";
import { atprotoPlugin } from "../src/index.js";
describe("atprotoPlugin descriptor", () => {
it("returns a valid PluginDescriptor", () => {
const descriptor = atprotoPlugin();
expect(descriptor.id).toBe("atproto");
expect(descriptor.version).toBe("0.1.0");
expect(descriptor.entrypoint).toBe("@emdash-cms/plugin-atproto/sandbox");
expect(descriptor.adminPages).toHaveLength(1);
expect(descriptor.adminWidgets).toHaveLength(1);
});
it("uses standard format", () => {
const descriptor = atprotoPlugin();
expect(descriptor.format).toBe("standard");
});
it("declares required capabilities", () => {
const descriptor = atprotoPlugin();
expect(descriptor.capabilities).toContain("read:content");
expect(descriptor.capabilities).toContain("network:fetch:any");
});
it("declares the storage used by the sandbox implementation", () => {
const descriptor = atprotoPlugin();
expect(descriptor.storage).toHaveProperty("records");
expect(descriptor.storage!.records!.indexes).toContain("contentId");
expect(descriptor.storage!.records!.indexes).toContain("status");
expect(descriptor.storage!.records!.indexes).toContain("lastSyncedAt");
});
it("exposes an admin status page and widget", () => {
const descriptor = atprotoPlugin();
expect(descriptor.adminPages).toEqual([
{ path: "/status", label: "AT Protocol", icon: "globe" },
]);
expect(descriptor.adminWidgets).toEqual([
{ id: "sync-status", title: "AT Protocol", size: "third" },
]);
});
});