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:
61
packages/core/tests/unit/astro/routes.test.ts
Normal file
61
packages/core/tests/unit/astro/routes.test.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user