Files
immich/web/src/lib/components/assets/thumbnail/ImageThumbnail.spec.ts
T
Jason Rasmussen a16d233a0c chore(web): sort imports (#27922)
* feat: sort imports

* fix: something?
2026-04-21 14:51:38 -04:00

90 lines
2.7 KiB
TypeScript

import { fireEvent, render } from '@testing-library/svelte';
import ImageThumbnail from '$lib/components/assets/thumbnail/ImageThumbnail.svelte';
vi.mock('$lib/utils/sw-messaging', () => ({
cancelImageUrl: vi.fn(),
}));
describe('ImageThumbnail component', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('renders an img element with correct attributes', () => {
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
});
const img = baseElement.querySelector('img');
expect(img).not.toBeNull();
expect(img!.getAttribute('src')).toBe('/test-thumbnail.jpg');
expect(img!.getAttribute('alt')).toBe('');
});
it('shows BrokenAsset on error', async () => {
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
});
const img = baseElement.querySelector('img')!;
await fireEvent.error(img);
expect(baseElement.querySelector('img')).toBeNull();
expect(baseElement.querySelector('span')?.textContent).toEqual('error_loading_image');
});
it('calls onComplete with false on successful load', async () => {
const onComplete = vi.fn();
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
onComplete,
});
const img = baseElement.querySelector('img')!;
await fireEvent.load(img);
expect(onComplete).toHaveBeenCalledWith(false);
});
it('calls onComplete with true on error', async () => {
const onComplete = vi.fn();
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
onComplete,
});
const img = baseElement.querySelector('img')!;
await fireEvent.error(img);
expect(onComplete).toHaveBeenCalledWith(true);
});
it('applies hidden styles when hidden is true', () => {
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
hidden: true,
});
const img = baseElement.querySelector('img')!;
const style = img.getAttribute('style') ?? '';
expect(style).toContain('grayscale');
expect(style).toContain('opacity');
});
it('sets alt text after loading', async () => {
const { baseElement } = render(ImageThumbnail, {
url: '/test-thumbnail.jpg',
altText: 'Test image',
widthStyle: '200px',
});
const img = baseElement.querySelector('img')!;
expect(img.getAttribute('alt')).toBe('');
await fireEvent.load(img);
expect(img.getAttribute('alt')).toBe('Test image');
});
});