/**
* 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');
});
});