import { render, screen } from '@testing-library/react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { OptimizedImage } from './optimized-image';
vi.mock('@/hooks/useIntersectionObserver', () => ({
useIntersectionObserver: () => ({ isIntersecting: true }),
}));
vi.mock('@/components/ui/optimized-image/useImageFormatSupport', () => ({
useImageFormatSupport: () => ['jpeg'],
}));
describe('OptimizedImage Component', () => {
beforeEach(() => {
vi.clearAllMocks();
});
it('renders loading placeholder when src is provided', () => {
const { container } = render();
const wrapper = container.querySelector('.relative');
expect(wrapper).toBeInTheDocument();
});
it('renders custom placeholder while loading', () => {
render(
Loading...}
/>,
);
expect(screen.getByText('Loading...')).toBeInTheDocument();
});
it('accepts fallback prop and renders', () => {
render(
Image not available}
/>,
);
expect(document.querySelector('.relative')).toBeInTheDocument();
});
it('applies custom className to wrapper', () => {
const { container } = render(
,
);
const wrapper = container.querySelector('.custom-class');
expect(wrapper).toBeInTheDocument();
});
it('applies width and height to wrapper', () => {
const { container } = render(
,
);
const wrapper = container.querySelector('.relative');
const style = wrapper?.getAttribute('style') ?? '';
expect(style).toContain('width: 200px');
expect(style).toContain('height: 200px');
});
});