Skip to content

Commit e9af783

Browse files
test(admin): cover provider thumbnail lazy loading, fix stale comment
Addresses emdashbot review on emdash-cms#1827: ProviderGridItem/ProviderListItem thumbnails were untested, and the grid test comment still cited the old 100-item page size (now 40).
1 parent 7033e23 commit e9af783

1 file changed

Lines changed: 43 additions & 2 deletions

File tree

packages/admin/tests/components/MediaLibrary.test.tsx

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import * as React from "react";
33
import { describe, it, expect, vi, beforeEach } from "vitest";
44

55
import { MediaLibrary } from "../../src/components/MediaLibrary";
6-
import type { MediaItem } from "../../src/lib/api";
6+
import { fetchMediaProviders, fetchProviderMedia } from "../../src/lib/api";
7+
import type { MediaItem, MediaProviderItem } from "../../src/lib/api";
78
import { render } from "../utils/render.tsx";
89

910
// ---------------------------------------------------------------------------
@@ -92,14 +93,54 @@ describe("MediaLibrary", () => {
9293
});
9394

9495
it("grid thumbnails are natively lazy-loaded", async () => {
95-
// A library page can hold up to 100 items; without `loading="lazy"` the
96+
// A library page can hold up to 40 items; without `loading="lazy"` the
9697
// browser fetches every thumbnail on mount instead of only the visible ones.
9798
const items = [makeMediaItem({ id: "1", filename: "pic.jpg", mimeType: "image/jpeg" })];
9899
const screen = await renderLibrary({ items });
99100
await expect.element(screen.getByAltText("pic.jpg")).toHaveAttribute("loading", "lazy");
100101
});
101102
});
102103

104+
describe("provider thumbnails", () => {
105+
function makeProviderItem(overrides: Partial<MediaProviderItem> = {}): MediaProviderItem {
106+
return {
107+
id: "provider_01",
108+
filename: "cloud-pic.jpg",
109+
mimeType: "image/jpeg",
110+
previewUrl: "https://provider.example.com/cloud-pic.jpg",
111+
width: 800,
112+
height: 600,
113+
...overrides,
114+
};
115+
}
116+
117+
function mockProvider(items: MediaProviderItem[]) {
118+
vi.mocked(fetchMediaProviders).mockResolvedValue([
119+
{
120+
id: "acme",
121+
name: "Acme Provider",
122+
capabilities: { upload: false, search: false, delete: false },
123+
},
124+
]);
125+
vi.mocked(fetchProviderMedia).mockResolvedValue({ items });
126+
}
127+
128+
it("provider grid thumbnails are natively lazy-loaded", async () => {
129+
mockProvider([makeProviderItem()]);
130+
const screen = await renderLibrary();
131+
await screen.getByRole("button", { name: "Acme Provider" }).click();
132+
await expect.element(screen.getByAltText("cloud-pic.jpg")).toHaveAttribute("loading", "lazy");
133+
});
134+
135+
it("provider list thumbnails are natively lazy-loaded", async () => {
136+
mockProvider([makeProviderItem()]);
137+
const screen = await renderLibrary();
138+
await screen.getByRole("button", { name: "Acme Provider" }).click();
139+
await screen.getByRole("button", { name: "List view" }).click();
140+
await expect.element(screen.getByAltText("cloud-pic.jpg")).toHaveAttribute("loading", "lazy");
141+
});
142+
});
143+
103144
describe("view mode toggle", () => {
104145
it("switches between grid and list view", async () => {
105146
const items = [makeMediaItem({ id: "1", filename: "test.jpg" })];

0 commit comments

Comments
 (0)