Files
emdash-patch-imageupload/packages/core/tests/unit/astro/routes.test.ts
kunthawat 2d1be52177 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
2026-05-03 10:44:54 +07:00

62 lines
1.7 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { injectCoreRoutes } from "../../../src/astro/integration/routes.js";
import { GET as getMediaFile } from "../../../src/astro/routes/api/media/file/[...key].js";
function mockMediaContext(key: string | undefined) {
const download = vi.fn().mockResolvedValue({
body: new Uint8Array([1, 2, 3]),
contentType: "image/png",
size: 3,
});
return {
context: {
params: { key },
locals: {
emdash: {
storage: { download },
},
},
} as Parameters<typeof getMediaFile>[0],
download,
};
}
describe("core media route injection", () => {
it("uses a catch-all media file route so storage keys can contain slashes", () => {
const routes: Array<{ pattern: string; entrypoint: string }> = [];
injectCoreRoutes((route) => {
routes.push({
...route,
entrypoint: route.entrypoint.replaceAll("\\", "/"),
});
});
expect(routes).toContainEqual(
expect.objectContaining({
pattern: "/_emdash/api/media/file/[...key]",
entrypoint: expect.stringContaining("api/media/file/[...key].ts"),
}),
);
});
});
describe("media file catch-all route", () => {
it("passes slash-containing keys through to storage.download", async () => {
const { context, download } = mockMediaContext("nested/path/file.png");
const response = await getMediaFile(context);
expect(response.status).toBe(200);
expect(download).toHaveBeenCalledWith("nested/path/file.png");
});
it("returns not found when the catch-all key is missing", async () => {
const { context, download } = mockMediaContext(undefined);
const response = await getMediaFile(context);
expect(response.status).toBe(404);
expect(download).not.toHaveBeenCalled();
});
});