Files
geo/apps/desktop-client/src/main/adapters/media-image.test.ts
T
root b4cfc6f992 feat(desktop-client): fall back to authenticated desktop asset endpoint
When a public asset URL fails (e.g. stale signed token), retry via the
new /api/desktop/content/assets endpoint with the desktop Bearer token
so editor images keep rendering across token rotations.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 12:21:02 +08:00

48 lines
1.4 KiB
TypeScript

import { Buffer } from "node:buffer";
import { describe, expect, it, vi } from "vitest";
vi.mock("electron", () => ({
nativeImage: {
createFromBuffer: () => ({
isEmpty: () => false,
getSize: () => ({ width: 1, height: 1 }),
crop: () => ({
isEmpty: () => false,
getSize: () => ({ width: 1, height: 1 }),
toPNG: () => Buffer.from([]),
}),
toPNG: () => Buffer.from([]),
}),
},
}));
vi.mock("../transport/api-client", () => ({
fetchDesktopApiURL: vi.fn(),
resolveDesktopApiURL: (path: string) => `http://127.0.0.1:8080${path}`,
}));
import {
buildAssetURLCandidates,
getCenteredCropRect,
} from "./media-image";
describe("media image helpers", () => {
it("resolves public asset URLs through public and authenticated desktop candidates", () => {
expect(buildAssetURLCandidates("/api/public/assets/12")).toEqual([
"http://127.0.0.1:8080/api/public/assets/12?format=png",
"http://127.0.0.1:8080/api/desktop/content/assets/12?format=png",
"http://127.0.0.1:8080/api/public/assets/12",
]);
});
it("centers crop rectangles at the requested ratio", () => {
const rect = getCenteredCropRect(1600, 1000, 4 / 3);
expect(rect.x).toBeCloseTo(133.333, 3);
expect(rect.y).toBeCloseTo(0);
expect(rect.width).toBeCloseTo(1333.333, 3);
expect(rect.height).toBeCloseTo(1000);
});
});