/** * Component: Audiobook Grid Tests * Documentation: documentation/frontend/components.md */ // @vitest-environment jsdom import React from 'react'; import path from 'path'; import { render, screen } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; const mockAudiobookCard = () => { vi.doMock(path.resolve('src/components/audiobooks/AudiobookCard.tsx'), () => ({ AudiobookCard: ({ audiobook }: { audiobook: any }) => (
{audiobook.asin}
), })); }; describe('AudiobookGrid', () => { beforeEach(() => { vi.resetModules(); mockAudiobookCard(); }); it('renders skeleton cards when loading', async () => { const { AudiobookGrid } = await import('@/components/audiobooks/AudiobookGrid'); const { container } = render(); expect(container.querySelectorAll('.animate-pulse')).toHaveLength(10); }); it('shows the empty message when there are no results', async () => { const { AudiobookGrid } = await import('@/components/audiobooks/AudiobookGrid'); render(); expect(screen.getByText('Nothing found')).toBeInTheDocument(); }); it('applies grid classes based on card size', async () => { const { AudiobookGrid } = await import('@/components/audiobooks/AudiobookGrid'); const { container } = render( ); expect(container.querySelector('div')?.className).toContain('grid-cols-1'); }); });