mirror of
https://github.com/jakejarvis/sofa.git
synced 2026-08-29 01:35:39 -04:00
Add `purgeMetadataCache` and `purgeImageCache` procedures that let admins free disk space on demand. Metadata purge removes un-enriched stub titles not in any user's library plus orphaned person records; image purge deletes all cached TMDB files from disk. Expose both as POST endpoints under `/admin/cache/` via the oRPC contract, implement the core logic in a new `@sofa/core/cache` module, and surface them in a new "Danger Zone" section on the Settings page with individual confirmation dialogs and a combined "Purge all" action.
36 lines
1.0 KiB
TypeScript
36 lines
1.0 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, spyOn, test } from "bun:test";
|
|
import { loadImageBuffer } from "../src/image-cache";
|
|
|
|
beforeEach(() => {
|
|
process.env.IMAGE_CACHE_ENABLED = "false";
|
|
});
|
|
|
|
afterEach(() => {
|
|
delete process.env.IMAGE_CACHE_ENABLED;
|
|
});
|
|
|
|
describe("loadImageBuffer", () => {
|
|
test("uses category-specific TMDB sizes when cache is disabled", async () => {
|
|
const urls: string[] = [];
|
|
const fetchSpy = spyOn(globalThis, "fetch").mockImplementation((async (
|
|
input: string | URL | Request,
|
|
) => {
|
|
urls.push(String(input));
|
|
return new Response(new Uint8Array([1, 2, 3]), {
|
|
status: 200,
|
|
headers: { "content-type": "image/jpeg" },
|
|
});
|
|
}) as typeof fetch);
|
|
|
|
await loadImageBuffer("/poster.jpg", "posters");
|
|
await loadImageBuffer("/profile.jpg", "profiles");
|
|
|
|
expect(urls).toEqual([
|
|
"https://image.tmdb.org/t/p/w500/poster.jpg",
|
|
"https://image.tmdb.org/t/p/w185/profile.jpg",
|
|
]);
|
|
|
|
fetchSpy.mockRestore();
|
|
});
|
|
});
|