fix: render prompt museum media
This commit is contained in:
1 parent
11b19832a3
commit
f8d82e6c19
9 files changed
+609
-37
No files matched your search
@@ -7,6 +7,7 @@ import type { PromptMuseumEntry, PromptMuseumPage } from '../../shared/image-pro
|
||||
|
||||
const fetchPromptMuseumPageMock = vi.hoisted(() => vi.fn());
|
||||
const fetchPromptMuseumEntryMock = vi.hoisted(() => vi.fn());
|
||||
const fetchPromptMuseumMediaMock = vi.hoisted(() => vi.fn());
|
||||
|
||||
vi.mock('@/lib/image-prompt-museum', async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof import('@/lib/image-prompt-museum')>();
|
||||
@@ -14,6 +15,7 @@ vi.mock('@/lib/image-prompt-museum', async (importOriginal) => {
|
||||
...actual,
|
||||
fetchPromptMuseumPage: (...args: unknown[]) => fetchPromptMuseumPageMock(...args),
|
||||
fetchPromptMuseumEntry: (...args: unknown[]) => fetchPromptMuseumEntryMock(...args),
|
||||
fetchPromptMuseumMedia: (...args: unknown[]) => fetchPromptMuseumMediaMock(...args),
|
||||
};
|
||||
});
|
||||
|
||||
@@ -66,6 +68,7 @@ describe('Prompt Museum page', () => {
|
||||
useImagePromptMuseumStore.getState().clearPendingPrompt();
|
||||
fetchPromptMuseumPageMock.mockResolvedValue(pageFixture);
|
||||
fetchPromptMuseumEntryMock.mockResolvedValue(entryFixture);
|
||||
fetchPromptMuseumMediaMock.mockResolvedValue('data:image/webp;base64,AQID');
|
||||
});
|
||||
|
||||
it('keeps the inspiration filters compact and below the native title bar', async () => {
|
||||
@@ -126,4 +129,78 @@ describe('Prompt Museum page', () => {
|
||||
expect.objectContaining({ cursor: 'cursor-two' }),
|
||||
);
|
||||
});
|
||||
|
||||
it('renders source attribution as text when the server omits its optional URL', async () => {
|
||||
fetchPromptMuseumEntryMock.mockResolvedValueOnce({
|
||||
...entryFixture,
|
||||
attribution: {
|
||||
...entryFixture.attribution,
|
||||
source: { name: 'PromptHero' },
|
||||
},
|
||||
});
|
||||
|
||||
render(
|
||||
<MemoryRouter initialEntries={['/image-prompts']}>
|
||||
<Routes>
|
||||
<Route path="/image-prompts" element={<ImagePromptMuseum />} />
|
||||
</Routes>
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
fireEvent.click(await screen.findByRole('button', { name: '查看 编辑感产品海报' }));
|
||||
expect(await screen.findByText('PromptHero')).toBeInTheDocument();
|
||||
expect(screen.queryByRole('link', { name: 'PromptHero' })).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('loads relative media through Main and renders its data URL', async () => {
|
||||
fetchPromptMuseumPageMock.mockResolvedValueOnce({
|
||||
...pageFixture,
|
||||
items: [{
|
||||
...pageFixture.items[0],
|
||||
thumbnail: {
|
||||
...pageFixture.items[0].thumbnail,
|
||||
url: '/api/image-prompt-museum/prompt-one/media/thumbnail',
|
||||
},
|
||||
}],
|
||||
});
|
||||
|
||||
render(
|
||||
<MemoryRouter initialEntries={['/image-prompts']}>
|
||||
<Routes>
|
||||
<Route path="/image-prompts" element={<ImagePromptMuseum />} />
|
||||
</Routes>
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
const image = await screen.findByRole('img', { name: '编辑感产品海报示例' });
|
||||
expect(image).toHaveAttribute('src', 'data:image/webp;base64,AQID');
|
||||
expect(fetchPromptMuseumMediaMock).toHaveBeenCalledWith(
|
||||
'/api/image-prompt-museum/prompt-one/media/thumbnail',
|
||||
);
|
||||
});
|
||||
|
||||
it('keeps a card usable when its relative image fails', async () => {
|
||||
fetchPromptMuseumMediaMock.mockRejectedValueOnce(new Error('image unavailable'));
|
||||
fetchPromptMuseumPageMock.mockResolvedValueOnce({
|
||||
...pageFixture,
|
||||
items: [{
|
||||
...pageFixture.items[0],
|
||||
thumbnail: {
|
||||
...pageFixture.items[0].thumbnail,
|
||||
url: '/api/image-prompt-museum/prompt-one/media/thumbnail',
|
||||
},
|
||||
}],
|
||||
});
|
||||
|
||||
render(
|
||||
<MemoryRouter initialEntries={['/image-prompts']}>
|
||||
<Routes>
|
||||
<Route path="/image-prompts" element={<ImagePromptMuseum />} />
|
||||
</Routes>
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
expect(await screen.findByLabelText('编辑感产品海报示例加载失败')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: '查看 编辑感产品海报' })).toBeEnabled();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user